LR socket協議指令碼

2021-09-07 13:16:54 字數 3267 閱讀 7289

socket協議分為tcp、udp兩種(區別與聯絡在此不做贅述),一種為長連線、一種為短連線。如果建立連線時在init中對應關閉連線在end中,則為長連線;如果建立關閉連線都是在action則為短連線。

在這裡主要是對socket指令碼除錯過程中遇到的問題做一下簡單記錄。

q1:傳送請求內容的組裝方式?

常用的有兩種,資料一種是data.ws檔案中存放的,一種是直接通過函式存在引數中。

第一種,data.ws中直接把請求放進去就可以了,請求內容的具體形式如(二進位制、加密資料)等根據實際編寫就可以。

action()

else

else}}

else

//socket連線建立不成功

lrs_close_socket(

"socket1");

return0;

}

view code

對應的data.ws中(buf1在這裡是必須的,這裡只擷取實際報文的一部分,buf2可只指定長度)

;wsrdata 2

1send buf1

308"

0 601201609090000

"recv buf2

500 *

//517

//"0510 71

"-1

view code

這種形式的傳送資料就在data.ws中,後續對其引數化與普通的指令碼沒有區別。

第二種,通過sprintf函式儲存內容在引數中,見下例。

action()

action_1000()

", lrslastarg);

//******************************************

if( 0 !=irtn )

sprintf(szpacketcontent,"%s

",lr_eval_string("

1000""

""111111""

10000000.00")

);

lr_start_transaction(

"1000_k");

//設定傳送緩衝區

lrs_set_send_buffer("

socket0

", szpacketcontent, 256

); irtn = lrs_send("

socket0

", "

buf0

", lrslastarg); //

將報文傳送到伺服器

if( 0 !=irtn )

#ifdef debug

lr_output_message(

"send bufffer is:%s

",szpacketcontent);

lr_output_message(

"send buffer lenght is:%d

",isndpacketlen);

#endif

//設定超時

lrs_set_recv_timeout(100, 0

); sprintf(sznumberofbytestorecv,

"numberofbytestorecv=%d

",256

);//

******************************************

//用lrs_receive_ex函式來收報文

irtn=lrs_receive_ex("

socket0

","buf1

",sznumberofbytestorecv,lrslastarg);

//******************************************

if( 0 !=irtn )

//******************************************

//lrs_get_last_received_buffer函式獲得收到報文的緩衝區

irtn=lrs_get_last_received_buffer("

socket0

",&preceivebuf,&ireceivelen);

//******************************************

if( irtn != 0 || null ==preceivebuf )

#ifdef debug

//lr_output_message("the content of last receive buffer is:\n%s",preceivebuf+sizeof(int));

#endif

memcpy(szrecvcontent,preceivebuf,ireceivelen);

p1=(char*)strstr(szrecvcontent,"");

p2=(char*)strstr(szrecvcontent,"");

if (p1==null ||p2==null)

memcpy(resposecode,p1+14,p2-p1-14

);

if( strcmp(resposecode,"

000000

") == 0

)

else

//釋放preceivebuf緩衝區,因為preceivebuf緩衝區是loadrunner分配的,必須顯示的釋放

lrs_free_buffer(preceivebuf);

//關閉連線

lrs_close_socket("

socket0");

return0;

}

view code

對應的data.ws中(無實際的buf0內容,只有buf0、buf1的長度,buf0內容在action中生成)

;wsrdata 2

1send buf0

256recv buf1

256-1

view code

注意:1、請求報文的格式問題,根據實際請求來分析。報文可通過sockettool工具實際傳送看看。比如請求報文每行要分行,在lr裡就需要新增\r\n。

2、如果請求報文在引數化時,無法保證所有報文的長度是固定的。這時採取哪種呢?第二種。比如取所有報文長度的最長值100,那直接引數定義為100,如果實際報文長度為80則該報文補0達到100。如果報文收發沒有問題,就可以直接使用。

待補充。。。。。

loadrunner java協議指令碼要點

常見問題 1.error thread context call to service of the driver failed,reason thread context wasn t initialized onthis thread.msgid merr 10176 這個問題網上很多解答,感覺...

ARP協議及指令碼編寫u

一.什麼是arp 位址解析協議,即arp address resolution protocol 是根據ip位址獲取實體地址的乙個tcp ip協議。主機傳送資訊時將包含目標ip位址的arp請求廣播到網路上的所有主機,並接收返回訊息,以此確定目標的實體地址 收到返回訊息後將該ip位址和實體地址存入本機...

LoadRunner指令碼中的協議選擇

內容簡介 loadrunner指令碼 開發 過程中的協議選擇作為指令碼開發的第乙個步驟,相當重要,只有選擇了合理的正確的協議才能開發出好的 測試指令碼 在協議選擇過程中需要注意選擇與被測物件相應的指令碼,比如web系統一般選擇http.html協議,ftp 伺服器 一般選擇ft內容簡介 loadru...