51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 28792|回复: 67
打印 上一主题 下一主题

[原创] loadrunner测试socket协议程序知识汇总

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2011-6-10 09:15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cafard-haibin 于 2011-6-10 09:17 编辑

||简述||
       我会长期对使用loadrunner进行socket通过协议的程序性能测试相关知识进行汇总并讲述。希望有过经验的人能进行讨论,没有实际项目经验的进行学习。但切忌一知半解的人发表一些错误的观点。

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

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

      关于socket协议的概念就不多讲。自己上网查。不理解的贴出来讨论。我这边只说为什么c/s架构的软件要选用socket协议来进行测试。因为loadrunner的原理就是录制网络上传输的网络数据包,所以我们选择与程序相对应的协议,才能更好的去定位在loadrunner中使用什么协议,请问:所有的C/S架构软件都用socket协议吗?当然不是。所以要根据自己的具体产品去看,自己不懂,就找开发去问问。loadrunner11虽然增加了一个功能,用于测试你的程序使用什么样的协议录制比较合理。但很明显这是鸡肋。在工作中我们是如何更好的去把工作做好。高技术说白了也是为了更好的工作,但有了技术我们还要利用方法、思路去做工作。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5
回复

使用道具 举报

该用户从未签到

推荐
 楼主| 发表于 2011-6-16 10:25:22 | 只看该作者
第4节课:数据包结构分析。备注:上图中是我前面讲到的数据包。也是我们程序自身定义的包结构。所以希望大家不要断章取义,以为所有包结构都是这样的。我也不会讲标志的tcp/ip包结构。这方面资料也很多。要学的人可以去百度文库找:Wireshark tcp/ip 包分析。

回到正题:

在我们包结构中:前2位 00 00代表加密方式;4E代表包类型,比如是请求包还是接受包;C0代表包状态;接下来的4位:FF FF FF FF 代表一个目的地址,和一个源地址;接着4位:D1 61 00 00代表一个功能点的标示;接着4C代表包的操作类型;接着2位:14 00代表包体长度。

所以可以看出我们的例子中的包头长度是15.包体长度是0x14。也就是20.所有包的总长度就是20+15=35。

没人顶不写了。~~~~~~~都是来下资料的或者转资料的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
回复 支持 3 反对 0

使用道具 举报

该用户从未签到

2#
 楼主| 发表于 2011-6-10 09:19:01 | 只看该作者
第2节课:socket脚本的基本结构:
  1. #include "lrs.h"


  2. vuser_init()
  3. {
  4.     lrs_startup(257);       

  5.     return 0;
  6. }
复制代码


  1. #include "lrs.h"


  2. Action()
  3. {
  4.         int handler;

  5.         lrs_create_socket("socket0","TCP","RemoteHost=10.1.106.6:20000",LrsLastArg);

  6.         handler=lrs_get_socket_handler("socket0");

  7.         if (handler!=0)

  8.                 {
  9.                 lr_output_message("the new socket handler is: %d",handler);
  10.                 }

  11.         else
  12.                 {
  13.                 lr_output_message("the new socket is not create");
  14.                 }
  15.        
  16.     return 0;
  17. }
复制代码


  1. #include "lrs.h"


  2. vuser_end()
  3. {
  4.     lrs_cleanup();

  5.     return 0;
  6. }
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2011-6-10 09:33:50 | 只看该作者
对第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名称。
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2011-6-10 09:47:25 | 只看该作者
第3节课:一个登陆过程的完整脚本。
  1. #include "lrs.h"


  2. vuser_init()
  3. {

  4.     lrs_startup(257);

  5.         lrs_create_socket("socket0", "TCP", "RemoteHost=10.1.1.28:3656",  LrsLastArg);

  6.     return 0;
  7. }
复制代码



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

  1. /*********************************************************************
  2. * 【创 建 者】 cafard@版权所有

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

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

  5. * 【脚本版本】 LoginV1.0
  6. *********************************************************************/
  7. #include "lrs.h"

  8. Action()
  9. {

  10. //是否需要设置集合点

  11.         //lr_rendezvous("模拟登录");

  12. //开始登录事务
  13.         lr_start_transaction("模拟登录");
  14. //发送登录请求数据包
  15.         lrs_send("socket0", "buf0", LrsLastArg);
  16. //接收服务器返回的数据包
  17.         lrs_receive("socket0", "buf1", LrsLastArg);
  18.         return 0;
  19. }
复制代码


说明:数据收发过程。需要知道lrs_send是发送数据包函数。lrs_receive是接受数据包函数就好。
  1. #include "lrs.h"


  2. vuser_end()
  3. {

  4.         lrs_close_socket("socket0");

  5.         lrs_cleanup();

  6.     return 0;
  7. }
复制代码


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

  1. ;WSRData 2 1
  2. send  buf0 35
  3.         "\x00\x00"
  4.         "N"
  5.         "\xc0\xff\xff\xff\xff"
  6.         "\xf4\x01"
  7.         "\x00\x00"
  8.         "L"
  9.         "\x14\x00"
  10.         "1050378754|cywtzc|0|"


  11. recv  buf1 29
  12.         "\x00\x00"
  13.         "A"
  14.         "\xc0\xff\xff\xff\xff\xd1"
  15.         "\a"
  16.         "\x00\x00"
  17.         "L"
  18.         "\x02\x00"
  19.         "0"
  20.         "\x00"
  21. -1
复制代码


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

使用道具 举报

该用户从未签到

5#
发表于 2011-6-10 14:51:28 | 只看该作者
看完了  没懂……对不起啊。。。人比较笨
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2011-6-11 20:44:44 | 只看该作者
学习了,
谢谢楼主分享
回复 支持 反对

使用道具 举报

该用户从未签到

8#
发表于 2011-6-16 11:52:28 | 只看该作者
继续写列。。。
有兴趣研究这个
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2011-6-16 13:22:04 | 只看该作者
楼主讲述的很详细啊,希望能够继续,现在在忙项目,等忙完手头的活,来跟楼主学习winsocket。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2011-6-28 10:40:24 | 只看该作者
我看着你呢。写..
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2011-6-28 11:12:22 | 只看该作者
楼主,继续啊,我很感兴趣。顶你的。
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2011-6-28 11:34:45 | 只看该作者
继续嘛lz
回复 支持 反对

使用道具 举报

该用户从未签到

13#
发表于 2011-6-28 12:00:37 | 只看该作者
很好的学习资料~希望LZ继续啊~~~
回复 支持 反对

使用道具 举报

该用户从未签到

14#
发表于 2011-7-1 09:10:36 | 只看该作者
楼主一定要继续啊。。。
回复 支持 反对

使用道具 举报

该用户从未签到

15#
发表于 2011-7-1 10:28:36 | 只看该作者
貌似懂了 又没懂!LZ继续
回复 支持 反对

使用道具 举报

该用户从未签到

16#
发表于 2011-7-1 17:26:41 | 只看该作者
lz继续,学习中。
感谢分享
回复 支持 反对

使用道具 举报

该用户从未签到

17#
发表于 2011-7-3 14:55:04 | 只看该作者
看了
必须要登录顶下
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2011-7-6 17:53:22 | 只看该作者
顶下,很有价值的
回复 支持 反对

使用道具 举报

该用户从未签到

19#
发表于 2011-7-7 14:24:26 | 只看该作者
写的很详细,很强大,支持
回复 支持 反对

使用道具 举报

该用户从未签到

20#
发表于 2011-7-8 13:45:48 | 只看该作者
希望楼主能留个QQ或是啥联系方式,想请教啊
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-5-6 02:31 , Processed in 0.091290 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表