LoadRunner編寫Socket協議指令碼方法
轉載自: http://lovesoo.org/how-to-use-loadrunner-to-write-socket-protocol-script.html
本文主要介紹使用LoadRunner手工編寫Windows Socket協議測試指令碼的方法。
通過LoadRunner編寫Windows Socket協議測試指令碼,總體說來,比較簡單。就像把大象放進冰箱一樣,總共分三步:
第一步:把冰箱門開啟
//建立到服務端的連線
rc = lrs_create_socket( "socket0"
,
"TCP"
,
"LocalHost=0"
,
"RemoteHost=128.64.64.23:8988"
, LrsLastArg);
if
(rc==
0
)
lr_output_message(
"Socket was successfully created "
);
else
lr_output_message(
"An error occurred while creating the socket, Error Code: %d"
, rc); |
第二步:把大象裝進去
lrs_send("socket0", "buf0", LrsLastArg); //往"socket0"傳送"buf0"中的資料
lrs_receive("socket0", "buf1", LrsLastArg);//將"socke0"中返回的資料存放到"buf1"中
第三步:把冰箱門帶上
//關閉連線 lrs_close_socket("socket0");
整個指令碼關鍵是在第二步,要把這麼一頭大象裝到冰箱裡可不是件容易的事情,我們要對傳送的資料做一些處理才行。LR會把你傳送的資料包內容寫到data.ws這個檔案中,那麼我們在此也同樣應該把資料寫到data.ws中去。假設我要傳送的是“00100312303456”這一串字元,那麼我就直接把它寫到data.ws中,指令碼如下:
;WSRData 2 1 send buf0 10 "00100312303456" //注意要加"" recv buf1 128 -1
執行指令碼,可以看到執行成功。在日誌資訊中可以打印出傳送的BUFFER和接收到的BUFFER內容。
接下來,我們要對傳送的字串進行引數化,讓指令碼每次傳送的字串都不一樣,怎麼做呢?有兩種方法可以實現:
- 直接引數化。在data.ws中直接進行引數化,要注意的是預設的引數名稱符號是尖括號(<>),和HTTP協議的大括號({})不同。指令碼如下:
send buf0 106 "<string>" //string是自定義的引數名
第二種方法則麻煩一點,下面重點做個介紹。
事情是這樣的:如果我要傳送的資料是很通過簡單的方法拼接起來,最簡單的例子,如“使用者名稱(假設是123)+密碼(假設是456)”,在這種情況下,使用第一種方法就夠用了,我可以設定兩個引數<username>和<password>,寫成下面的方式就可以了。
send buf0 106 "<username><password>"
但是情況稍微複雜一些,傳送的資料格式還需要加上字串的長度,比如在上面的例子中,需要這樣表示:00100312303456。
前四位0010是表示後面傳送的字串總長度是10,後面的03則表示使用者名稱有3位,再後面的123才是真正的使用者名稱,再後面的03456也是同樣的道理。而每次傳送的使用者名稱長度不同,字串也就不同,比如使用者名稱如果是1234,那麼我的報文就應該是這樣“001104123403456”這樣一來,我就不能通過簡單地拼接的方式來發送了,而需要再對它進行一些處理:
char data[200]; char length[20]; len = strlen(lr_eval_string("{usermame}")); sprintf(length,"%d",len); strcat(data,length); strcat(data,"{username}"); //然後,再通過lrs_save_param_ex函式把該資料儲存到data_param引數中。 lrs_save_param_ex("socket0", "user", data, 0, strlen(data),NULL, "data_param"); //最後,在data.ws檔案中使用data_param引數傳送資料包: send buf0 "<data_param>"