lr指令碼優化、關聯、引數
一、優化指令碼之刪減指令碼
1.檢查腳本里面跟我們目標網站不符的URL地址,刪除掉這些請求
2.腳本里面關於圖片和其他無關資源下載的請求,刪除掉jpg、jpeg、bmp、png、swf、fls
3.沒有ACTION 沒有URL地址的刪掉,因為沒有地址,資料沒有地方去
4.重複的請求刪掉
5.沒有提交資料的或者是沒有看到itemdata這個關鍵詞的註釋掉
6.再次回放,並檢視日誌
7.ctrl+alt+c 註釋指令碼
ctrl+alt+u 去掉註釋
二、關聯
1.什麼是關聯?
· 把指令碼中某些寫死的資料(硬編碼),轉變為伺服器傳送的、動態的、每次都不一樣的資料(以不變應萬變)
2.為什麼要使用關聯?
因為伺服器端在與客戶端的互動過程中,根據業務需求會產生每次不同的資料,為了讓固定的指令碼能夠適應這些資料,需要關聯
3.什麼時候使用關聯?
錄製時是正常的,但是回放時不成功,存在動態資料資訊(動態id),考慮關聯
4.一般關聯的操作步驟
(1)從伺服器返回的資料中選取需要進行關聯的資料(找資料)
(2)將該資料存入指令碼的一個引數中
變動的資料在指令碼中是引數,由於是變化的,所以叫動態ID(需要關聯的資料)
(3)將指令碼中需要使用資料的地方用該引數代替
5.怎麼做關聯?
(1)錄製兩次相同操作的指令碼
(2)兩次指令碼,做比較 Tools--Compare with Script..
(3)白底表示相同部分,黃底表示不同,黃色的大塊,不用太關注,因為和資料包的先後有關,找出動態ID(動態ID一般是一串無規律的字串)
(4)關聯型別;手動關聯(常用)
使用web_reg_save_param()函式(預註冊函式,需要寫在相應請求之前:尋找相應請求),在原始檔中找到需要關聯的字串(動態資料),存入一個引數中
把錄製時資料替換為該引數(動態資料)
(5)如何查詢到相應請求?(為了在之前寫關聯函式)
①拷貝動態ID適當長度,從下方的Generation Log的第一行開始查詢!!!
如果該動態ID查詢到的位置是在伺服器的應答包中(Response Body...),說明查詢正確。(第一次,是從伺服器發出的ID)
②查詢到之後,選取適當長度的左右邊界,拷貝下來,準備寫函式。
③先向下慢慢翻找,找到與當前應答id號相同的id號的請求,該請求即為相應請求。 (90%的情況都是在下方不遠處,Request 和 Event 都是請求)
web_url("... "Snapshot=t7.inf", ); 快照名是唯一的,作為線索
尋找指令碼中t7.inf對應的請求位置。將拷貝的串資訊貼上到請求之前
④找到相應請求之後,在請求之前寫關聯函式,並將後續指令碼中用到動態ID的位置用函式中的引數名替代。
web_reg_save_param("uid", //引數名稱
"LB=name=userSession value=", //左邊界
"RB=>", //右邊界
LAST);
相應請求;
⑤之後,將指令碼中的ID值,用引數uid代替:
"Name=userSession", "Value=121571.58890239zcfDDDipzAtVzzzHDHfcApADVzcf", ENDITEM,
改為:
"Name=userSession", "Value={uid}", ENDITEM,
即可。{uid} 取得LR的變數值,LR語法範圍內有效的。
⑥再次回放購票指令碼,購票成功
三、引數化設定步驟
1.目的:模擬真實場景,例如,登入操作,不可能所有的使用者名稱都一致
2.開啟引數設定,兩種方式
(1)工具欄中的倒數第二按鈕,<p>--Open Parameter List(Ctrl+L)
(2)Vuser--Parameter List..
3.新建引數(以飛機票為例,註冊使用者)
(1)new三個引數,命名為username、pwd1、pwd2
三種方式:手動增加行增加列,輸入、可通過筆記本匯入、連線資料庫匯入
(2)呼叫引數取值的方式
①手動填寫 {引數名},如{username}
②選中值,右擊,Replace with a Parameter,用引數替換,選擇引數,ok
4.指令碼只實現註冊一次的功能,5個引數,所以需要註冊5次,即指令碼執行5次
Run-tine Settings---Run logc,設定5次
5.執行指令碼,最後驗證是否註冊成功,用註冊的這些值去登入,看是否可以登入
四、引數池策略
1.select next row(取值方式)
(1)Sequential 順序:對於每個VU,都是從第一行開始,順序依次向下取值
(2)Random 隨機:對於每個VU,取值隨機,值可以重複
(3)Unique 只用一次:對於每個VU,從第一行開始,唯一依次向下取值
(4)和xx一樣:同行步調一致,具備一定關係
2.Update value on(何時取?when?)
(1)Each iteration 每次迭代:每次指令碼迴圈(預設Action)時更新引數的值
(2)Each occurrence 每次遇到就更新:指令碼執行時,只要遇到該引數即更新
(3)Once 僅取一次:從頭到尾只用這個值
3.Out of value(越界方式===引數池資料不夠時,Unique)
(1)放棄VU:直接放棄該虛擬使用者,
(2)以迴圈方式繼續:迴圈從第一行繼續取
(3)以最後一個值繼續:一直使用最後一個值
4.以兩個輸出函式為例,test為3個引數,依次為ABC
(1)Sequential +Each iteration
迭代第一次,輸出:AA
迭代第二次,輸出:BB
迭代第三次,輸出:CC
(2)Sequential+Each occurrence
迭代第一次,輸出:AB
迭代第二次,輸出:CD
(3)Sequential+Once
迭代N次,輸出:A A
(4)Random+Each iteration
迭代N次,輸出:A or B or C
(5)Random +Each occurrence
迭代N次,輸出:A or B or C
(6)Random+Once
迭代N次,輸出:A or B or C
(7)Unique +Each iteration
迭代第一次,輸出:AA
迭代第二次,輸出:BB
(8)Unique +Each occurrence
迭代第一次,輸出:AB
迭代第二次,輸出:C D
(9)Unique+Once
迭代N次,輸出:A A
五、控制檯
1.設定場景
(1)Start Vusers 雙擊-->設定一個小的遞增
(2)Duration雙擊(Action指令碼)
六、分析結果
1.報告講解
(1)Transcation Name 事務名稱
(2)最小值、平均值、最大值
(3)Std.Deviation 標準方差值,越小越好,越趨近於0,表示所有使用者執行該事務的響應時間越接近,表示系統越穩定
(4)90 Percent 90%響應時間:表示該組中90%的使用者在0.XX秒內完成操作
(5)網路頻寬充足的情況下,當吞吐量(Throughput)隨著點選率(Hits per second)的升高而升高,說明AUT的伺服器處理能力充足
2.效能測試分析
(1)如發現某些事務響應時間超長(最普遍)該怎麼處理?
①通過分析報告中幾個比較重要的圖表進行檢視,初步定位問題,再通過網頁細分圖(網頁診斷圖)去確定響應時間長在系統的哪個部分,大多情況,時間長在伺服器端
(響應時間=客戶端時間+網路時間+伺服器時間)
②如果是應用伺服器發生問題,調整伺服器配置引數即可
③大多數情況是資料庫伺服器
(2)Web Page Breakdown網頁診斷圖
①DNS: 域名解析系統,將伺服器的域名和伺服器的IP地址對應起來的系統,可以將域名解析為IP地址
②Connection時間:
③First Buffer:第一次緩衝(第一個資料包,可以細分為網路及伺服器處理時間+資料庫時間,發請求到收到第一個緩衝)
④Receive:獲取到所有資料包的接收時間,該時間可以衡量網路質量情況。如果時間較長,一般說明網路不好,如果確定測試環境是內網,網路不是問題,則可能是客戶端,也可能是伺服器的問題