上下求索

loadrunner采用socket和HTTP协议交叉实现测试需求

上一篇 / 下一篇  2009-06-24 15:48:31

这次要测试的是一个下载平台的项目,信令采用在HTTP协议里封装自定义协议的方式实现,由于自定义信令较为复杂,初始采用了LR中的socket方式来编写接口测试脚本,如下所示:

#include "lrs.h"

Action()
{

 int ActucalNumber;
 int code;
 int rspcode;

 lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=172.16.11.101:9999",  LrsLastArg);
 lrs_send("socket0", "buf0", LrsLastArg);
 lrs_receive("socket0", "buf1", LrsLastArg);
 ActucalNumber=lrs_get_last_received_buffer_size("socket0");   
 lrs_save_param_ex("socket0","received",NULL,0,ActucalNumber,"ascii","param1");
 lrs_save_searched_string("socket0",NULL,"param2","LB/BIN=\\xb9\\x00",NULL,1,29,4);      //搜索protocol-id\xb9\x00字符串,并截取该字符串出现后固定位数的特殊字符串code.
 lrs_save_searched_string("socket0",NULL,"param3","LB/BIN=\\xb9\\x00",NULL,1,37,4);     //搜索protocol-id\xb9\x00字符串,并截取该字符串出现后固定位数的特殊字符串respcode.
 lrs_hex_string_to_int(lr_eval_string("<param2>"),strlen(lr_eval_string("<param2>")),&code);
 lrs_hex_string_to_int(lr_eval_string("<param3>"),strlen(lr_eval_string("<param3>")),&rspcode);
 lrs_send("socket0", "buf2", LrsLastArg);
 lrs_close_socket("socket0");

 lr_output_message("-----------------------------------INFO---------------------------------------");
 lr_output_message("The length of resp is %d", ActucalNumber);
 lr_output_message("The content of resp is %s", lr_eval_string("<param1>"));
 lr_output_message("The content of code is %s", lr_eval_string("<param2>"));
 lr_output_message("The content of rspcode is %s", lr_eval_string("<param3>"));
 lr_output_message("code is %i",code);
 lr_output_message("rspcode is %i",rspcode);

 return 0;
}

data.ws部分:

;WSRData 2 1
send  buf0 244
 "POST / HTTP/1.1\r\n"
 "User-Agent: Jakarta Commons-HttpClient/3.1\r\n"
 "Host: 172.16.11.101:9999\r\n"
 "Content-Length: 102\r\n"
 "Content-Type: application/saip\r\n"
 "\r\n"

 "婍滙~2\xb9\x00"          //protocol-id(8)
 "\x01\x00\x00\x66"       //basic ver+length(4)
 "\x10\x60\x01\x2c"       //srcmodule+dstmodule(4)
 "1234567890123456"       //transaction(16)
 "\x00\x00\x00\x00"       //type+reserved(4)
 "\x00\x01\x8e\x72"       //code=102002
 "\x00\x00\x00\x3a"       //datalength(4)

 "\x00\x01"               //count
 "\x02"                   //type
 "\x00\x00\x00\x00"       //ver=0
 "\x00\x04\x97\xef"       //id=301039
 "\x00\x00\x00\x00"       //offset
 "\x00\x02\x9b\xe5"       //fileSize
 "\x00\x02\x9b\xe5"       //Size
 "./applist2/app/200902411741329.mrp\x00"    //fileURL

recv  buf1 171194

脚本上与前面一篇socket协议脚本不同之处是使用了lrs_save_searched_string函数,在服务端返回的数据包里搜索自定义协议标识protocol-id,并以此为基础,截取后面包中我们所需要的字段,转换后打印出来,从而实现了自定义接口测试的需求。

功能测试后进行性能测试,为保证性能测试的效率,需去除各种逻辑判断语句,而只保留,打开冰箱门,把大象塞进去,看看大象的反应,关上冰箱门这四部分。

#include "lrs.h"

Action()
{

lrs_create_socket("socket0", "TCP", "LocalHost=0", "RemoteHost=172.16.11.155:9999",  LrsLastArg);

lrs_send("socket0", "buf0", LrsLastArg);
lrs_receive("socket0", "buf1", LrsLastArg);

lrs_close_socket("socket0");
return 0;
}

当然也可以采用HTTP协议方式实现该功能,在后面的性能测试中,因为现有的license采用socket协议只能实现一台机器100Vuser的并发,我们该脚本略做修改采用了HTTP协议方式编写,从而实现了1000Vuser的HTTP并发。


TAG: http LoadRunner

msnshow的个人空间 引用 删除 msnshow   /   2010-07-10 10:58:50
改写为HTTP协议后是怎么样的呢
 

评分:0

我来说两句

我的栏目

日历

« 2024-04-24  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 126816
  • 日志数: 65
  • 建立时间: 2009-06-24
  • 更新时间: 2013-11-01

RSS订阅

Open Toolbar