在性能测试过程中,我们经常会见到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