LoadRunner—win/websockets通信中获取数据

简介:
 过socket进行通信的分布式应用是比较常见的,包括winsocket和websocket,LR支持这两个协议。
  在使用LR回放socket协议的脚本时,可能会经常需要获取服务器返回的数据,语句格式如下:
lrs_create_socket("socket0", "TCP", "RemoteHost=1.2.3.4:12345",  LrsLastArg);
lrs_send("socket0", "buf0", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);
  很明显,socket0是通信所用套接字,buf0是LR将要发送给服务器的内容(来自用户行为),buf1则接收服务器返回。
  我们经常需要通过提取buf1中的内容,并适当的加一些断定语言,来判断这个通信操作有没有获取期望的数据。经常使用函数lrs_get_last_received_buffer,如下:
  lrs_get_last_received_buffer("socket0", &ActualBuffer, &NumberOfBytes);
  这样就把lrs_receive接收到的数据保存在了内存中(指针ActualBuffer指向的一个有LR自动动态分配的内存块),并返回数据长度(保存在NumberOfBytes中)。
  然后就可以像使用用户自定义的数组一样使用该缓冲区,如ActualBuffer[0]。需要注意的是,使用完成后需要手动释放ActualBuffer指向的内存,通过调用lrs_free_buffer。
  下面是一个简单示例,在处理服务器返回数据时,我们将其作为char数组处理,经过验证这是没问题的。
  完整代码:
vuser_init.c
#include "lrs.h"
vuser_init()
{
lrs_startup(257);
return 0;
}
Action.c

/*********************************************************************
* Created by Mercury Interactive Windows Sockets Recorder
*
* Created on: Tue Nov 12 14:51:33
*********************************************************************/
#include "lrs.h"
Action()
{
int NumberOfBytes=0;
char *ActualBuffer;
unsigned char num1,num2,num3,num4;
unsigned int jifen =0;
int dj =0 ;
char * tmp;
int i=0;
lrs_create_socket("socket0", "TCP", "RemoteHost=10.15.107.12:12345",  LrsLastArg);
lrs_send("socket0", "buf0", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);
/* Get the last received buffer and its size. */
lrs_get_last_received_buffer("socket0", &ActualBuffer, &NumberOfBytes);
//7B 9C 0B 00 00 0F 00 02 6C 00 00 00 08 00 90 5F 01 00 0D 00 00 00,从第偏移量17取数,直到14,作为积分;偏移量18为等级。
lr_output_message("The last buffer's size is:%d/n", NumberOfBytes);
num1 = ActualBuffer[17];  //最高位
num2 = ActualBuffer[16];
num3 = ActualBuffer[15];
num4 = ActualBuffer[14];  //最低位
lr_output_message("num1 = %d,num2 = %d,num3 = %d,num4 = %u\n",num1,num2,num3,num4);
jifen = (num1 / 16 ) * 268435456 + (num1 % 16)* 16777216 + (num2 / 16)* 1048576 +(num2 % 16) * 65536 +(num3 / 16) * 4096 +  (num3 % 16 ) * 256 +(num4 / 16)* 16 + (num4 % 16) * 1; //注意00 90 5F 01是16进制格式,其中01(num1)是最高位。
dj=(int)ActualBuffer[18];
lrs_free_buffer(ActualBuffer);
lr_output_message("jifen = %d\n",jifen );
lr_output_message("dj = %d\n",dj );
lrs_close_socket("socket0");
return 0;
}
vuser_end.c
[cpp] view plaincopy
#include "lrs.h"
vuser_end()
{
lrs_cleanup();
return 0;
}

最新内容请见作者的GitHub页:http://qaseven.github.io/

相关文章
|
测试技术
Loadrunner 脚本开发-从文件读取数据并参数化
Loadrunner 脚本开发-从文件读取数据并参数化
62 0
|
SQL 关系型数据库 MySQL
Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
Loadrunner脚本优化-参数化之关联MySQL数据库获取数据
69 0
|
SQL Java 关系型数据库
如何利用LoadRunner最高效的批量制造Oracle数据
前不久写过一篇高效大批量制造MySQL数据的文章:《如何利用LoadRunner最高效的批量制造MySQL数据》,后来有人问我,怎么高效大批量制造Oracle数据。其实是一样的,也是用JDBC的批量插入(addBatch)方法,以下就提供一下我写的脚本,以供参考
1153 0
|
SQL Java 关系型数据库
如何利用LoadRunner最高效的批量制造MySQL数据
批量制造数据的方法有很多种,也有许多专业的工具,但是都算不上高效,针对MySQL的批量插入数据,目前认为最高效的方式是通过执行JAVA代码(通过设置事务为非自动提交,以executeBatch批处理提交大量插入事务)来实现,但是JAVA的灵活参数化和大用户量分布式并发执行,绝对没有LoadRunner方便。
1264 0
|
JSON 测试技术 数据安全/隐私保护
Loadrunner 脚本开发-利用web_submit_data函数实现POST请求
Loadrunner 脚本开发-利用web_submit_data函数实现POST请求
115 0
|
网络协议 测试技术 Windows
Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本
Loadrunner 脚本开发-利用loadrunner开发Windows Sockets协议脚本
129 0
|
Java 测试技术 Android开发
Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试
Loadrunner脚本开发-基于HTTP协议的流媒体视频在线播放服务器性能测试
82 0
|
测试技术
Loadrunner 脚本录制-通过代理录制脚本
Loadrunner 脚本录制-通过代理录制脚本
126 0
|
JSON 测试技术 数据格式
Loadrunner 脚本开发-利用web_custom_request函数进行接口测试
Loadrunner 脚本开发-利用web_custom_request函数进行接口测试
53 0
|
测试技术
loadrunner 脚本开发-url解码
loadrunner 脚本开发-url解码
66 0