loadrunner下websocket协议性能测试(四)
文章目录
- loadrunner下websocket协议性能测试(四)
- 前言
- 一、HTTP协议返回内容和socket协议关联
- 二、自定义参数使用
- 三、websocket返回报文参数提取及使用
- 四、websocket事务检查
- 五、添加场景执行测试
- 总结
前言
经过前面三篇文章,websocket协议的性能测试脚本在loadrunner下基本已经完成,本篇主要记录下websocket脚本的参数化
一、HTTP协议返回内容和socket协议关联
上脚本直接:
web_reg_save_param("userId", "LB=", "RB=", "Search=Body", LAST);
web_custom_request("web_custom_request",
"URL=http://127.0.0.1:8080/rest/test",
"Method=GET",
"TargetFrame=",
"Resource=0",
"Referer=",
"Body=",
LAST);
熟悉http性能测试的应该明白上面脚本的作用,socket脚本可以直接再data.ws中使用<参数名>或{参数名}来使用提取的参数,不过要注意参数引用一定要放在上述脚本后面。
二、自定义参数使用
socket脚本中data.ws,选择需要参数的内容,直接参数替换,与http协议一样,不再详述
三、websocket返回报文参数提取及使用
先上脚本吧还是:
/**
* 定义指针变量,用于接受lrs_get_received_buffer返回数据
*/
char *ReturnBuffer;
/**
* 发送报文至服务端
*/
lrs_send("socket0","buf2",LrsLastArg);
/**
* 设置读取结束标识
*/
lrs_set_receive_option(EndMarker,BinaryStringTerminator,"}");
/**
* 接受报文,\x81\x1e{"command":21,"result":900000}
*/
lrs_receive("socket0","buf3",LrsLastArg);
/**
* 使用lrs_get_received_buffer函数获取我们想要的body
*/
ReturnBuffer = lrs_get_received_buffer("socket0",2,30,NULL);
/**
* 获取body后使用lrs_save_param_ex保存为参数,可以在buff中调用
*/
lrs_save_param_ex("socket0","user",ReturnBuffer,0,30,"ascii","testresult");
lr_output_message("The last buffer's data is:%s/n", ReturnBuffer);
lr_output_message("The last param's data is:%s/n", lr_eval_string("{testresult}"));
return 0;
函数讲解:
lrs_get_received_buffer:接受指定长度的buff数据
char *lrs_get_received_buffer( char *s_desc, int offset, int length, char *encoding );
s_desc:socket描述符
offset:偏移量,即获取字符开始的位置
length:需要截取的长度
encoding :编码格式,NULL时即为客户端的编码格式
改函数可以获取指定的响应内容,后续做事务检查使用,也可以配合lrs_save_param_ex使用,进行参数化
lrs_save_param_ex:根据选项生成参数
int lrs_save_param_ex( char *s_desc, char *type, char *buff, int offset, int length, char *encoding, char *param );
s_desc:socket描述符
type:存储的数据类型,有user、static、received三种,分别代表用户数据(自己定义的字符串,如脚本中lrs_get_received_buffer返回的字符串这种的),静态数据(data.ws中定义的buf数据),最后接收的数据
buff:标识要保存哪个缓冲区的数据。type为user则填写自己定义的字符串变量名称,为static则填写data.ws中定义的buf名称,为received则忽略参数为NULL
offset:表示在指定buff中的偏移量,即参数保存的开始位置
length:表示参数保存的长度
encoding:表示解码方式,对于user类型,需要指定为ASCII或EBCDIC的一种,NULL即为ASCII,对于static和received类型则忽略,使用客户端的原始编码格式进行解码
param :为要保存的参数名称
注:参数提取完成后,可以使用{参数名}或<参数名>直接在data.ws中调用
四、websocket事务检查
上面使用lrs_get_received_buffer进行获取指定数据后可使用strcmp进行检查判断,确定事务是否成功
上脚本:
char *ReturnBuffer;
/**
* 定义预期返回的code码
*/
char *code = "900000";
lr_start_transaction("test");
lrs_send("socket0","buf2",LrsLastArg);
lrs_set_receive_option(EndMarker,BinaryStringTerminator,"}");
lrs_receive("socket0","buf3",LrsLastArg);
/**
* 提取实际的code码
*/
ReturnBuffer = lrs_get_received_buffer("socket0",25,6,NULL);
lrs_save_param_ex("socket0","received",NULL,25,6,NULL,"testresult");
lr_output_message("The last param's data is:%s/n", lr_eval_string("{testresult}"));
lr_output_message("The last buffer's data is:%s/n", ReturnBuffer);
lr_output_message("The code buffer's data is:%s/n", code);
/**
* 对比实际值与预期值,判断事务是否成功
*/
if(strcmp(ReturnBuffer,code)==0){
lr_end_transaction("test", LR_PASS);
}else{
lr_end_transaction("test", LR_FAIL);
}
return 0;
strcmp,通过对比两个字符串的值,确定事务是否通过
五、添加场景执行测试
不是工具使用的教程,所以不再详述啊
1.创建场景
2.添加windows负载机
3.执行场景
总结
到这里loadrunner11中websocket脚本开发和参数话基本全部完成了,中间踩了很多坑,后面把坑整理出来单独写吧,还有就是lrs协议写的脚本只能在windows的负载机上运行,无法在linux的负载机上运行,想在linux上跑tcp协议的话,需要自己去封装包,后面有时间整理完linux的资料再写吧。