LoadRunner的Socket脚本关联小技巧
我們在socket腳本調(diào)試的時候經(jīng)常會遇到很多問題,比如:socket包中繁雜的二進制編碼,socket數(shù)據(jù)如何進行截取,如何對socket數(shù)據(jù)包進行參數(shù)化等等,以下幾點內(nèi)容是近期我在調(diào)試新加坡MTL項目中socket代碼的一些經(jīng)驗,希望對各位以后進行socket腳本調(diào)試時能有所幫助。
此次MTL項目中的SE評測場景,其實與愛吼網(wǎng)的評測場景比較接近,對于此類項目的性能測試,通過HTTP協(xié)議時無法完成的,我們只有通過Socket腳本來實現(xiàn)。
在做性能測試的時候,“關聯(lián)”是必不可少的,在WEB系統(tǒng)中,我經(jīng)常采用LR函數(shù):web_reg_save_param()來完成,但web類型的函數(shù)在Socket協(xié)議中是無法使用的,那么我們怎么來進行Socket協(xié)議的關聯(lián)呢?
1. 查找關聯(lián)數(shù)據(jù)
在Socket錄制協(xié)議的腳本“action”中是看不到客戶端所發(fā)送的數(shù)據(jù)的,所有客戶端與服務端交互的數(shù)據(jù),都保存在data.ws中:
? ?那么,我們必須要在data.ws中找到我們需要關聯(lián)的數(shù)據(jù),根據(jù)系統(tǒng)設計,SE評測發(fā)送音頻數(shù)據(jù)時,服務端會先返回給客戶端一個Evalinstance,這是一個表示評測實例的ID,后面在進行音頻數(shù)據(jù)傳輸?shù)臅r候,需要帶上這個ID,那么我們先搜索一下這個ID:
? ? ?在buf3中,我們發(fā)現(xiàn)了這個Evalinstance。(recv代表的接受的包,send代表的是發(fā)送包)
我們需要保存這個ID,以便后面發(fā)送音頻數(shù)據(jù)使用。
2. 保存關聯(lián)數(shù)據(jù)
在buf3中,我們找到了我們所需要的數(shù)據(jù),如何保存?
回到action中,找到lrs_receive("socket0", "buf3", LrsLastArg);語句,這條語句表示客戶端接受buf3數(shù)據(jù)包,而數(shù)據(jù)包的內(nèi)容就是我們剛才在data.ws中看到的內(nèi)容。在這條語句時候,我們需要添加函數(shù)進行數(shù)據(jù)保存:
lrs_save_searched_string("socket0", NULL, "evalid", "LB=SimpleEngineTest/", "RB=\"", 1,0,-1);
這個函數(shù)的用法基本與web_reg_save_param()類似,一樣是通過左右邊界來進行數(shù)據(jù)查找,函數(shù)的8個參數(shù)依次代表:“socket線程名”、“buf名稱”(這里傳NULL表示從上面一個buf取值)、“參數(shù)名稱”(需要將數(shù)據(jù)保存的參數(shù)名稱)、“左邊界”、“右邊界”、“第幾次出現(xiàn)”、“位移的數(shù)量”、“參數(shù)的長度”。線程名和buf名一定不可以傳錯,最后三個數(shù)據(jù)只要傳(1 , 0,-1)就可以了。
在socket協(xié)議中,關聯(lián)數(shù)據(jù)保存也可以用函數(shù)lrs_save_param(),這里不作說明,每個函數(shù)都其優(yōu)點,適當?shù)臅r候也可以采用。需要注意的是web_reg_save_param()需要放在請求之前,lrs_save_searched_string()是放在接受之后。
3. 參數(shù)替換
保存參數(shù)之后,我們需要對data.ws中發(fā)送的數(shù)據(jù)包,進行下全局替換,將用到Evalinstance的地方全部替換成 “evalid”參數(shù):
在socket包中,參數(shù)需要用“<>”來表示。
最后,再介紹1個socket函數(shù):lrs_set_receive_option()使用這個函數(shù)可以防止回放腳本receive出現(xiàn)一些相關問題。
lrs_set_receive_option(EndMarker, EndMarker_None ) //讀取直到緩沖結(jié)束。
lrs_set_receive_option(EndMarker, StringTerminator , "\r\n") //讀取直到"\r\n"符號出現(xiàn).你可以根據(jù)自己的接收數(shù)據(jù)的結(jié)束符修改。
lrs_set_receive_option(EndMarker, BinaryStringTerminator , "\\X00")讀取直到二進制符號"\\X00"出現(xiàn)。
總之,Socket腳本調(diào)試問題比較多,也不是一兩句話說的完的,網(wǎng)上一些資料多是“去頭斷尾”,要么是“藥不對癥”。這里僅是就socket的關聯(lián)給大家做個介紹,希望這篇文章對大家有所幫助,同時也希望各位將自己的一些經(jīng)驗拿出來共享。
總結(jié)
以上是生活随笔為你收集整理的LoadRunner的Socket脚本关联小技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IOS开发之下拉刷新和上拉加载更多
- 下一篇: 2015年4月8日主从不同步故障解决(字