这次要测试的是一个下载平台的项目,信令采用在HTTP协议里封装自定义协议的方式实现,由于自定义信令较为复杂,初始采用了LR中的socket方式来编写接口测试脚本,如下所示:
#include "lrs.h"
Action()
{
int ActucalNumber;
int code;
int rspcode;
lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=172.16.11.101:9999", LrsLastArg);
lrs_send("socket0", "buf0", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);
ActucalNumber=lrs_get_last_received_buffer_size("socket0");
lrs_save_param_ex("socket0","received",NULL,0,ActucalNumber,"ascii","param1");
lrs_save_searched_string("socket0",NULL,"param2","LB/BIN=\\xb9\\x00",NULL,1,29,4); //搜索protocol-id\xb9\x00字符串,并截取该字符串出现后固定位数的特殊字符串code.
lrs_save_searched_string("socket0",NULL,"param3","LB/BIN=\\xb9\\x00",NULL,1,37,4); //搜索protocol-id\xb9\x00字符串,并截取该字符串出现后固定位数的特殊字符串respcode.
lrs_hex_string_to_int(lr_eval_string("<param2>"),strlen(lr_eval_string("<param2>")),&code);
lrs_hex_string_to_int(lr_eval_string("<param3>"),strlen(lr_eval_string("<param3>")),&rspcode);
lrs_send("socket0", "buf2", LrsLastArg);
lrs_close_socket("socket0");
lr_output_message("-----------------------------------INFO---------------------------------------");
lr_output_message("The length of resp is %d", ActucalNumber);
lr_output_message("The content of resp is %s", lr_eval_string("<param1>"));
lr_output_message("The content of code is %s", lr_eval_string("<param2>"));
lr_output_message("The content of rspcode is %s", lr_eval_string("<param3>"));
lr_output_message("code is %i",code);
lr_output_message("rspcode is %i",rspcode);
return 0;
}
data.ws部分:
;WSRData 2 1
send buf0 244
"POST / HTTP/1.1\r\n"
"User-Agent: Jakarta Commons-HttpClient/3.1\r\n"
"Host: 172.16.11.101:9999\r\n"
"Content-Length: 102\r\n"
"Content-Type: application/saip\r\n"
"\r\n"
"婍滙~2\xb9\x00" //protocol-id(8)
"\x01\x00\x00\x66" //basic ver+length(4)
"\x10\x60\x01\x2c" //srcmodule+dstmodule(4)
"1234567890123456" //transaction(16)
"\x00\x00\x00\x00" //type+reserved(4)
"\x00\x01\x8e\x72" //code=102002
"\x00\x00\x00\x3a" //datalength(4)
"\x00\x01" //count
"\x02" //type
"\x00\x00\x00\x00" //ver=0
"\x00\x04\x97\xef" //id=301039
"\x00\x00\x00\x00" //offset
"\x00\x02\x9b\xe5" //fileSize
"\x00\x02\x9b\xe5" //Size
"./applist2/app/200902411741329.mrp\x00" //fileURL
recv buf1 171194
脚本上与前面一篇socket协议脚本不同之处是使用了lrs_save_searched_string函数,在服务端返回的数据包里搜索自定义协议标识protocol-id,并以此为基础,截取后面包中我们所需要的字段,转换后打印出来,从而实现了自定义接口测试的需求。
在功能测试后进行性能测试,为保证性能测试的效率,需去除各种逻辑判断语句,而只保留,打开冰箱门,把大象塞进去,看看大象的反应,关上冰箱门这四部分。
#include "lrs.h"
Action()
{
lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=172.16.11.155:9999", LrsLastArg);
lrs_send("socket0", "buf0", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);
lrs_close_socket("socket0");
return 0;
}
当然也可以采用HTTP协议方式实现该功能,在后面的性能测试中,因为现有的license采用socket协议只能实现一台机器100Vuser的并发,我们该脚本略做修改采用了HTTP协议方式编写,从而实现了1000Vuser的HTTP并发。