qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

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;
}

posted on 2013-12-10 10:53 顺其自然EVO 阅读(1177) 评论(0)  编辑  收藏 所属分类: loadrunner


只有注册用户登录后才能发表评论。


网站导航:
 
<2013年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜