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/

时间: 2024-08-03 08:59:57

LoadRunner—win/websockets通信中获取数据的相关文章

link中如何多线程从DataTable中获取数据?有没有高效不出错的办法?

问题描述 link中如何多线程从DataTable中获取数据?有没有高效不出错的办法? link中如何多线程从DataTable中获取数据?有没有高效不出错的办法?

asp.net-从SQL数据库中获取数据写入WORD文档,请附加代码,谢谢

问题描述 从SQL数据库中获取数据写入WORD文档,请附加代码,谢谢 基本格式:数据写入时需按一定格式(写入内容包含表格.文字.图片).标题居中等等 标题(含字体) 一.内容1 1.******* 2.***** 二.内容二 (1)***** 三.表格(或图片) 解决方案 c#里有一个非常不错的类库 叫aspose 里面可以操作word插入各种html以及表单以及图片. 非常不错 建议LZ搜索下 有很多相关代码,不想搜索你可以Call我 我发给你就是了 解决方案二: 在bai度中搜"java导出

sqlite-从列值为空的表中获取数据

问题描述 从列值为空的表中获取数据 表: CREATE TABLE Reports ( _id INTEGER NOT NULL PRIMARY KEY,member_id INTEGER, is_conf BOOLEAN, name TEXT, started INTEGER, finished INTEGER, description TEXT, obj_id INTEGER NOT NULL, FOREIGN KEY (obj_id) REFERENCES Objects (_id));

smarty模板引擎从php中获取数据的方法_php实例

本文实例讲述了smarty模板引擎从php中获取数据的方法.分享给大家供大家参考.具体如下: smarty可以分配($smarty->assign)的变量类型:所有php支持的数据类型--基本数据类型.复合数据类型.特殊数据类型(具体见smarty相关手册). 操作/显示文件:index.php 复制代码 代码如下: <?php //创建smarty对象 require_once("./libs/Smarty.class.php"); $smarty = new Smart

如何从sqlite数据库中获取数据并显示在listview中?

问题描述 如何从sqlite数据库中获取数据并显示在listview中? 在登录页面后,我想在listview中把Apple显示成A,Boy显示成B等等,直到F.但是在程序中当我完全登录后,只有登录表成功创建,主菜单还是没有创建. 我想在test database中创建主菜单,然后我想从主菜单表(mainmenu table)中获取数据再显示在listview中. 我使用了下面的代码: if(username.length()>0&&password.length()>0) {

c#-zedgraph 从数据库中获取数据 画图怎么做啊

问题描述 zedgraph 从数据库中获取数据 画图怎么做啊 在网上找的 也不知道对不对 但是不知道往下怎么做了 string sql = "select LOW_STAGE from POINT_STAGE where NAME = " + Didian ; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(sql, conn); da.Fill(ds, "POINT_STAGE"

fgets-popen调用后,从执行的shell命令结果中获取数据失败

问题描述 popen调用后,从执行的shell命令结果中获取数据失败 #include #include #include #include #define CMD "cat /proc/diskstats| grep 'b[sh]d[a-z]b'| awk '{print $4" "$6" "$8" "$10}'" int main() { FILE *file=popen(CMD, "r"); char

oracle分区中,如何从不同的分区中获取数据

问题描述 oracle分区中,如何从不同的分区中获取数据 最近接触一个项目,要求用分区查询数据,分区是以时间中的月份区别的,然后用户点击一个时间段,并根绝这个时间段在不同的分区中查找数据,而且不确定用户能筛选出什么时间,时间段中间跨了几个月,或者说跨了几个分区,前台时间选择包括年月日的格式,现在如何从这些分区中查找到符合条件的数据.有没有什么想法? 解决方案 http://www.educity.cn/wenda/409487.html

smarty模板引擎从配置文件中获取数据的方法_php技巧

本文实例讲述了smarty模板引擎从配置文件中获取数据的方法.分享给大家供大家参考.具体如下: 当某个变量值,不希望在程序中写死时,就可以把该变量写到配置文件里,并从中获取(常见的配置样式). 第一步:先写一个配置文件,如数据库的 db.conf,后缀名conf可以随便写,db.ini也行.文件中内容的格式需要固定:key="值",每一行后面不需要添加分号或者什么,直接回国换行,如: 配置文件:db.conf 复制代码 代码如下: host = "localhost"