1. 程式人生 > >LoadRunner編寫Socket協議指令碼方法

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內容。

接下來,我們要對傳送的字串進行引數化,讓指令碼每次傳送的字串都不一樣,怎麼做呢?有兩種方法可以實現:

  1. 直接引數化。在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>"
複製程式碼