1. 程式人生 > 其它 >效能:引數化和關聯

效能:引數化和關聯

功能點:
1.單場景
2.混合場景
3.穩定性場景


jmeter裡面的併發是執行緒數
流量是漏斗原理


為什麼要做引數化,原因只有兩個

1.為了避免資料庫(unique屬性)或者業務邏輯對該值的唯一性校驗
(寫的操作一般是資料庫校驗,查詢操作一般是業務邏輯校驗)
2.為了避免命中查詢快取對效能結果帶來的失真
不同的快取形式:redis (伺服器快取), mysql (伺服器快取), 本地快取
本地快取一般快取 cookie,頁面的css,js, 圖片,框架樣式快取在瀏覽器裡面
伺服器快取一般是查詢快取,從庫裡查詢快取到記憶體裡面,一般都要做引數化,避免命中查詢快取

mysql去查詢的過程:

1.進行語法分析,有沒有操作資料庫操作表的許可權,使用者名稱密碼對不對
2.語義分析,sql到底對不對
3.根據sql,生成這條sql的執行計劃
4.看這條執行計劃在快取裡面在不在,如果命中了查詢快取,直接在快取裡面
把結果返回,如果未命中查詢快取,就開啟要操作的表按照你的執行計劃從記憶體
裡面找到你的查詢結果,如果要找的結果不在查詢結果的話,就需要去硬盤裡面去
定址,找到資料後把資料放到記憶體裡面再返回


如何避免參數化
1.去掉資料庫或者業務邏輯程式碼裡面的唯一性校驗
2.關閉mysql的快取


一個併發跑十次
十個併發跑一次



什麼叫做關聯
為什麼要做關聯


關聯:將伺服器返回的動態變化的資料儲存為一個變數,以供後面需要用到該值的請求進行使用
關聯只會在response裡面去找動態變化的值,找到之後儲存成一個變數

需要做關聯的內容:
一,不跟資料庫打交道
請求邏輯對該值有合法性校驗:
1.驗證碼(圖片驗證碼,簡訊驗證碼,郵箱驗證碼)
2.使用者身份的校驗:session, token
3.提交時間校驗:時間戳
大多數情況下特徵:1、不是從伺服器返回的值 2.奇奇怪怪沒有任何規則/規律或者含義的字元

二,跟資料庫打交道
增 insert :insert是否需要做關聯取決於業務場景,關聯值就是要建立關聯關係的欄位
刪 delete :關聯where裡面的id欄位的值
改 update :關聯where裡面的id欄位的值

查 select :關聯where裡面的id欄位的值

共同特徵:int型別的值(身份證號除外) 大多數引數名稱會帶id類字樣
如果最終請求引數沒有使用者id之類的引數 不要自己去加 這類uid資訊會通過cookie之類自動補全


拿到一個壓測需求去分析哪些步驟需要引數化哪些步驟需要關聯:

註冊使用者 引數化:手機,郵箱 關聯:手機,驗證碼
新增收貨地址 關聯:使用者id 可以不用做引數化
修改使用者暱稱 關聯:使用者id 引數化:使用者暱稱(暱稱不能重複)
瀏覽商品 引數化:商品id(避免命中查詢快取) 商家id
新增購物車: 關聯:使用者id 引數化:商品id(因為上一步商品id做了引數化)
生成訂單再支付 關聯:使用者id 使用者id2 引數化:商品id, 商家id
檢視訂單 關聯: 使用者id 訂單號
檢視物流 關聯:使用者id 物流號
收貨 關聯 : 使用者id 物流號 訂單id
退件 關聯 : 使用者id 物流號 訂單id