在性能測試過程中,我們經常會見到socket協議的接口測試傳輸的是16進制,遇到這種我們如何把data.ws裏的數據傳輸到服務器?
第一步:確認傳輸數據的內容,然後每兩位數據前邊添加\x;例如:字符串04077b22636d6422需要轉換成loadrunner可以讀取的數據\x04\x07\x7b\x22\x63\x6d\x64\x22
第二步:確認數據傳輸的格式;有的數據不會要求傳輸數據的多少,但是會判斷字符串最後是否添加有"00",那麼我們需要把字符串內容末尾加上"\x00";字符串04077b22636d6422需要轉換成loadrunner可以讀取的數據\x04\x07\x7b\x22\x63\x6d\x64\x22\x00
第三部:數據參數化;當我們做完第一、二步,我們需要根基測試場景製造測試數據,測試數據的製造我們需要注意兩點:
1、數字佔用倆個字符
2、字母可能佔用倆個字符或者佔用四個(我還不太確定、因爲曾經將一個字母改成數字,發現服務器無法接受數據)
個人建議:16進制數據需要參數化時,全部使用數字,這樣可以避免不必要的麻煩。
參數化內容:如果參數化的數據是數字,我們可以直接將16進制替換成數字(注意:16進制是2個一組的,刪除掉一組16進制數據,我們就需要添一個數字),保持原數據長度不變,我們就可以開始性能測試了。
現在拿一個自己寫的例子:(如果不能實現請勿怪,我只是希望我自己以後寫的時候別忘了,各種函數的使用)
char *Data;
int rc;
int Size = 0;
int msgOk = -1;
char *position = "";
char *passMsg = "succ";
int nSizeStr = 0;
char* buf;
char totalbuf[1024];
int receive_code;
int send_code;
memset( &Data,0,8 );
lr_start_transaction("lianjie1");
rc = lrs_create_socket("sock0", "TCP", "LocalHost=0", "RemoteHost=127.0.0.1:9988", LrsLastArg);
lr_output_message("%d", rc);
if (rc != 0) {
lr_end_transaction("lianjie1", LR_FAIL);
}
else {
lr_end_transaction("lianjie1", LR_PASS);
}
lr_start_transaction("trans_01");
lrs_set_send_timeout(90,0);
// lrs_send("sock0", "buf0", LrsLastArg); \x34\xf9\x68
// nSizeStr = -2013134848;
// buf = (char*)nSizeStr;
// lr_output_message("%s", lr_eval_string("buf"));
// strcat(totalbuf, lr_eval_string("buf"));
// strcat(totalbuf, lr_eval_string("{buf0}"));
// lr_output_message("%s", lr_eval_string("totalbuf"));
lr_rendezvous("fasong");
lrs_send("sock0", "buf0", LrsLastArg);
//往"tt"發送"buf0"中的數據
lr_output_message("%d", send_code);
// lrs_set_recv_timeout2(10,0);
//這裏設置返回超時10秒
lrs_receive("sock0", "buf1", LrsLastArg);
receive_code = lrs_receive("sock0", "buf1", LrsLastArg);
//將"tt"中返回的數據存放到"buf1"中
//注意,這裏需要調整buf1的長度適應實際業務中的數據
lr_output_message("%d", receive_code);
lr_output_message("成功,交易響應碼: %s",lr_eval_string("<buf1>"));
lrs_get_last_received_buffer("sock0", &Data, &Size);
position=(char*)strstr(Data,passMsg);
msgOk = (int) ( position - Data + 1);
lrs_save_param_ex("sock0", "user", Data, 20, 3, "ascii", "new_parameter");
// lrs_save_param_ex("sock0", "user", Data, 0, 2942, "ascii", "new_parameter");
lrs_free_buffer(Data);
lr_output_message("%d", Size);
lr_output_message("%d", receive_code);
lr_output_message("%s", lr_eval_string("<new_parameter>"));
lrs_save_param("sock0", NULL, "new_parameter", 49, 3);
if(strcmp(lr_eval_string("<new_parameter>"),"cmd")==0)
{
lr_output_message("成功,交易響應碼: %s", lr_eval_string("<new_parameter>"));
lr_end_transaction("trans_01", LR_PASS);
}
else
{
lr_output_message("失敗,交易響應碼: %s", lr_eval_string("<new_parameter>"));
lr_end_transaction("trans_01", LR_FAIL);
}
lrs_close_socket("sock0");
return 0;
data.ws
send buf0
"\x04\x07\x7b\x22\x63\x6d\x64\x22<number>\x00
其中:參數化number內容:000001~010000
recv buf1