socket協議分為tcp、udp兩種(區別與聯絡在此不做贅述),一種為長連線、一種為短連線。如果建立連線時在init中對應關閉連線在end中,則為長連線;如果建立關閉連線都是在action則為短連線。
在這裡主要是對socket指令碼除錯過程中遇到的問題做一下簡單記錄。
q1:傳送請求內容的組裝方式?
常用的有兩種,資料一種是data.ws檔案中存放的,一種是直接通過函式存在引數中。
第一種,data.ws中直接把請求放進去就可以了,請求內容的具體形式如(二進位制、加密資料)等根據實際編寫就可以。
action()view codeelse
else}}
else
//socket連線建立不成功
lrs_close_socket(
"socket1");
return0;
}
對應的data.ws中(buf1在這裡是必須的,這裡只擷取實際報文的一部分,buf2可只指定長度)
;wsrdata 2view code1send buf1
308"
0 601201609090000
"recv buf2
500 *
//517
//"0510 71
"-1
這種形式的傳送資料就在data.ws中,後續對其引數化與普通的指令碼沒有區別。
第二種,通過sprintf函式儲存內容在引數中,見下例。
action()view codeaction_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;
}
對應的data.ws中(無實際的buf0內容,只有buf0、buf1的長度,buf0內容在action中生成)
;wsrdata 2view code1send buf0
256recv buf1
256-1
注意: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...