loadrunner测试socket协议程序知识汇总

  • Post author:
  • Post category:其他


本文转载自 http://bbs.51testing.com/thread-462017-1-1.html (出处: 51Testing软件测试论坛 )


第1节课:为什么选用socket通过方式?






好多人在本论坛上或者其他技术网站来喜欢问:我想测试C/S架构的软件,请问怎么录制?我的程序是C\C++开发的,请问怎么录制脚本?回答的人也很轻浮的答道:socket。






关于socket协议的概念就不多讲。自己上网查。不理解的贴出来讨论。我这边只说为什么c/s架构的软件要选用socket协议来进行测试。因为loadrunner的原理就是录制网络上传输的网络数据包,所以我们选择与程序相对应的协议,才能更好的去定位在loadrunner中使用什么协议,请问:所有的C/S架构软件都用socket协议吗?当然不是。所以要


根据自己的具体产品去看,自己不懂,就找开发去问问。


loadrunner11虽然增加了一个功能,用于测试你的程序使用什么样的协议录制比较合理。但很明显这是鸡肋。在工作中我们是如何更好的去把工作做好。高技术说白了也是为了更好的工作,但有了技术我们还要利用方法、思路去做工作。




第2节课:socket脚本的基本结构:

#include “lrs.h”

vuser_init()

{


lrs_startup(257);

return 0;

}

#include “lrs.h”

Action()

{

int handler;

lrs_create_socket(“socket0″,”TCP”,”RemoteHost=10.1.106.6:20000″,LrsLastArg);

handler=lrs_get_socket_handler(“socket0”);

if (handler!=0)

{

lr_output_message(“the new socket handler is: %d”,handler);

}

else

{

lr_output_message(“the new socket is not create”);

}

return 0;

}


#include “lrs.h”

vuser_end()

{


lrs_cleanup();

return 0;

}





对第2节课中的内容进行讲解:




代码目的:在进行socket协议性能测试之前,我们首先需要对测试环境的tcp/ip连接数情况进行测试,确保你的测试机、被测试机上不存在tcp/ip连接数限制,或者其他问题。这样才能保证测试的结果的准确性。举个例子:假设您的测试程序放在一台xp机器上。xp机器默认的tcp/ip连接数为10个。那么您并发100个压力测试就失去了意义。所以我们在工作之前需要先通过一个简单的只创建socket连接的程序测试下测试环境。比如我最近发现windows 2003 sp2 企业版创建的socket连接数在7000-8000之间。linux下就比较高。






通过代码学习到的知识点:




lrs_startup(257);  启动winsocket.dll。知道就可以。






lrs_create_socket:创建socket函数。参数分别是:socket名称、协议类型(TCP或UDP)、链接类型(远程链接:RemoteHost、本地:LocalHost、或者本地监听)、LrsLastArg 参数结束标记。在实际工作中对此函数认识还是从浅到深吧。不要一开始就去查函数,看帮助的文档,如果你不是高手,就不要这样。还是先录制一个脚本,在录制的脚本去理解,去体会,知道这个就是创建了一个socket连接就好了。当你要测试客户端、当你要测试服务器。有具体问题了,再去查函数。深入理解。






lrs_get_socket_handler:用来或者你所创建的socket的句柄。就一个参数:要获取句柄的socket名称。









第3节课:一个登陆过程的完整脚本






#include “lrs.h”

vuser_init()

{

lrs_startup(257);

lrs_create_socket(“socket0”, “TCP”, “RemoteHost=10.1.1.28:3656”,  LrsLastArg);

return 0;

}







备注:按照编程习惯,我们一般把初始话winsocket和创建socket连接程序放到脚本初始化部分。不是必须,只是一种完美的表现。当然迭代的时候是有具体的说道。








/*********************************************************************

* 【创 建 者】 cafard@版权所有

* 【脚本说明】 V4.0-客户端-用户登录

* 【创建日期】 2011-05-20

* 【脚本版本】 LoginV1.0

*********************************************************************/

#include “lrs.h”

Action()

{

//是否需要设置集合点

//lr_rendezvous(“模拟登录”);

//开始登录事务

lr_start_transaction(“模拟登录”);

//发送登录请求数据包

lrs_send(“socket0”, “buf0”, LrsLastArg);

//接收服务器返回的数据包

lrs_receive(“socket0”, “buf1”, LrsLastArg);

return 0;

}









说明:数据收发过程。需要知道lrs_send是发送数据包函数。lrs_receive是接受数据包函数就好。










#include “lrs.h”

vuser_end()

{

lrs_close_socket(“socket0”);

lrs_cleanup();

return 0;

}











说明:lrs_close_socket是关闭连接,lrs_cleanup是停止对winsocet的使用,回收相关资源。












;WSRData 2 1

send  buf0 35

“\x00\x00”

“N”

“\xc0\xff\xff\xff\xff”

“\xf4\x01”

“\x00\x00”

“L”

“\x14\x00”

“1050378754|cywtzc|0|”

recv  buf1 29

“\x00\x00”

“A”

“\xc0\xff\xff\xff\xff\xd1”

“\a”

“\x00\x00”

“L”

“\x02\x00”

“0”

“\x00”

-1













说明:收发的数据部分。这个部分我会利用一节课单独讲述。