利用LoadRunner编写socket性能测试脚本
作者:网络转载 发布时间:[ 2016/11/18 11:43:12 ] 推荐标签:性能测试 脚本 socket
缓冲区函数:
lrs_free_buffer 释放分配给缓冲区的内存
lrs_get_buffer_by_name 从数据文件中获取缓冲区及其大小
lrs_get_last_received_buffer 获取套接字上接收到的后的缓冲区及其大小
lrs_get_last_received_buffer_size 获取套接字上接收到的后一个缓冲区的大小
lrs_get_received_buffer 获取后接收到的缓冲区或其一部分
lrs_get_static_buffer 获取静态缓冲区或其一部分
lrs_get_user_buffer 获取套接字的用户数据的内容
lrs_get_user_buffer_size 获取套接字的用户数据的大小
lrs_set_send_buffer 指定要在套接字上发送的缓冲区
环境函数:
lrs_cleanup 终止Windows套接字 DLL 的使用
lrs_startup 初始化 Windows 套接字 DLL
关联语句函数:
lrs_save_param 将静态或接收到的缓冲区(或缓冲区部分)保存到参数中
lrs_save_param_ex 将用户、静态或接收到的缓冲区(或缓冲区部分)保存到参数中
lrs_save_searched_string 在静态或接收到的缓冲区中搜索出现的字符串,将出现字符串的缓冲区部分保存到参数中
转换函数:
lrs_ascii_to_ebcdic 将缓冲区数据从 ASCII 格式转换成 EBCDIC 格式
lrs_decimal_to_hex_string 将十进制整数转换为十六进制字符串
lrs_ebcdic_to_ascii 将缓冲区数据从 EBCDIC 格式转换成ASCII 格式
lrs_hex_string_to_int 将十六进制字符串转换为整数
超时函数:(这一堆函数,是可以对同一个socket生效的)
lrs_set_accept_timeout 为接受套接字设置超时
lrs_set_connect_timeout 为连接到套接字设置超时
lrs_set_recv_timeout 执行lrs_receive命令后,等待服务器返回消息的超时时间,即服务器的响应时间。
lrs_set_recv_timeout2 创建连接成功,接收到服务器返回的消息后,获取匹配消息的超时时间。lrs_receive接收到数据后,会和预期的数据长度进行比较,如果长度不匹配,它将重新从套接字上读取数据,直到超时为止。
lrs_set_send_timeout 为发送套接字数据设置超时
六、实战讲解
在此只做简单的知识普及,便于快速上手编写socket测试脚本。简述创建连接,收发协议,关闭连接的过程。
初始化
//存放通信返回报文
char * ActualBuffer="";
//存放返回报文长度,切记附初值
int numberOfResponse = -1;
//链接是否创建成功,判断值
int rc = 0;
//返回报文是否成功,判断值
int msgOk=-1;
//存放返回报文
char * position="";
//返回报文是否成功标识
char * passMsg="succee";
服务器监听
//--------------创建连接-----------------
rc= lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=<RemoteHost>", LrsLastArg);
if (rc==0){
//判断连接是否创建成功
lr_output_message("Socket was successfully created ");
}
else{
lr_output_message("An error occurred while creating the socket, Error Code: %d", rc);
}
//--------------创建连接-----------------
收发协议
lrs_send("socket0", "buf0", LrsLastArg);
//往“socket0”发送"buf0"
lrs_set_receive_option(EndMarker, BinaryStringTerminator, "</html>");
//设置接收协议包选项,注"</html>"以实际定义协议为准,如果不设置次项。执行到lrs_receive的时候,log里面打印Waiting for writable socket 10
//secs, 0 usecs,都需要等待10秒钟。是这样的,因为你在data.ws中定义了recv buffer的长度,例如你定义为100,但是socket上的返回buffer长度不
//是100,这时候,loadrunner会尝试再次去读取,直到读到长度为100的buffer才算成功。
lrs_receive("socket0", "buf1","Flags=MSG_PEEK ", LrsLastArg);
//将“socket0”中返回的数据存放到“buf1”中
参数配置
可能细心的同学已经发现了,buf0与buf1是从哪里来的。其实这俩兄弟是在data.ws中被定义的,如下所示:
;WSRData 2 1
send buf0 5120
"<参数化>"
recv buf1 1024
-1
5120:此数值为socket协议传输内容长度,切记严格输入正确长度值。
"<参数化>":为buf0所传输内容。相对于loadrunner的http协议参数用{}来说,socket协议参数化采用<>作为定义符。
接收参数判断
在做了接收之后,我们需要提取“buf1”中的某些关键字符作为通信成功标识。
//获取套接字上接收到的后的缓冲区及其大小
lrs_get_last_received_buffer("socket0",&ActualBuffer,&numberOfResponse);
//查询返回报文是否成功
position = (char *)strstr(ActualBuffer, passMsg);
// strstr has returned the address. Now calculate * the offset from the beginning of str
msgOk = (int)(position - ActualBuffer + 1);
if(msgOk>0){
lr_end_transaction("核心对私维护", LR_PASS);
lr_output_message("本次交易:%s",ActualBuffer);
}
else{
lr_end_transaction("核心对私维护", LR_FAIL);
lr_error_message("本次交易:%s",ActualBuffer);
}
关闭连接
//--------------断开socket--------------
lrs_disable_socket("socket0", DISABLE_SEND_RECV);
//--------------关闭socket--------------
lrs_close_socket("socket0");
六、总结
简要描述了利用Loadrunner编写socket性能测试脚本的过程
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
使用loadrunner进行压力测试遇到的问题总结LoadRunner检查点loadrunner11的移动端性能测试之脚本录制验证LoadRunner对Ajax内容的校验LoadRunner使用代理录制脚本LoadRunner运行乱码解决方法LoadRunner利用代理模式录制手机脚本loadrunner11中java vuser引用jar包使用LoadRunner监控Windows资源LoadRunner小技巧集锦LoadRunner提高篇:插入检查点与关联函数loadrunner怎么解决录制完成后脚本为空LoadRunner判断是否服务器连接池瓶颈LoadRunner中对Https证书的配置Loadrunner入门篇-Vuser发生器LoadRunner录制手机APP脚本
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南