51Testing软件测试论坛
标题:
loadrunner测试socket协议程序知识汇总
[打印本页]
作者:
cafard-haibin
时间:
2011-6-10 09:15
标题:
loadrunner测试socket协议程序知识汇总
本帖最后由 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虽然增加了一个功能,用于测试你的程序使用什么样的协议录制比较合理。但很明显这是鸡肋。在工作中我们是如何更好的去把工作做好。高技术说白了也是为了更好的工作,但有了技术我们还要利用方法、思路去做工作。
作者:
cafard-haibin
时间:
2011-6-10 09:19
第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;
}
复制代码
作者:
cafard-haibin
时间:
2011-6-10 09:33
对第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名称。
作者:
cafard-haibin
时间:
2011-6-10 09:47
第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
复制代码
说明:收发的数据部分。这个部分我会利用一节课单独讲述。
作者:
woddebbmm
时间:
2011-6-10 14:51
看完了 没懂……对不起啊。。。人比较笨
作者:
yxd2006
时间:
2011-6-11 20:44
学习了,
谢谢楼主分享
作者:
cafard-haibin
时间:
2011-6-16 10:25
第4节课:数据包结构分析。[attach]73581[/attach]备注:上图中是我前面讲到的数据包。也是我们程序自身定义的包结构。所以希望大家不要断章取义,以为所有包结构都是这样的。我也不会讲标志的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。
没人顶不写了。~~~~~~~都是来下资料的或者转资料的。
作者:
testtoone
时间:
2011-6-16 11:52
继续写列。。。
有兴趣研究这个
作者:
高保真
时间:
2011-6-16 13:22
楼主讲述的很详细啊,希望能够继续,现在在忙项目,等忙完手头的活,来跟楼主学习winsocket。
作者:
wangyong3552128
时间:
2011-6-28 10:40
我看着你呢。写..
作者:
rolex_sky
时间:
2011-6-28 11:12
楼主,继续啊,我很感兴趣。顶你的。
作者:
南勃万
时间:
2011-6-28 11:34
继续嘛lz
作者:
vince0106
时间:
2011-6-28 12:00
很好的学习资料~希望LZ继续啊~~~
作者:
jiaraoaini
时间:
2011-7-1 09:10
楼主一定要继续啊。。。
作者:
zhang.yuandong
时间:
2011-7-1 10:28
貌似懂了 又没懂!LZ继续
作者:
sanlo
时间:
2011-7-1 17:26
lz继续,学习中。
感谢分享
作者:
kratexi
时间:
2011-7-3 14:55
看了
必须要登录顶下
作者:
shy2005828
时间:
2011-7-6 17:53
顶下,很有价值的
作者:
candyzc
时间:
2011-7-7 14:24
写的很详细,很强大,支持
作者:
ziyun200
时间:
2011-7-8 13:45
希望楼主能留个QQ或是啥联系方式,想请教啊
作者:
shx711
时间:
2011-7-8 15:20
回复
7#
cafard-haibin
楼主,继续,相信还是有很多童鞋有兴趣的。
这个跟tuxedo协议的有些类似,你写的"所以可以看出我们的例子中的包头长度是15.包体长度是0x14。也就是20."这个是怎么推算出来的?另,这对后面的工作有何指导意义?
还望楼主能坚持写下去。顶起!
作者:
BBnight
时间:
2011-7-21 12:34
回复
7#
cafard-haibin
很有兴趣啊,最近也在用 socket~~~,测试socket服务端、客户端之类的。
希望楼主能多多分析实践中的心得体会,共同探讨一起提高
作者:
放任无奈
时间:
2011-7-24 18:09
顶 希望楼主写下去
挺通俗易懂的
作者:
放任无奈
时间:
2011-7-24 18:20
回复
21#
shx711
包头范围是第一个字节到第一行倒数第二个字节 15个
包体范围是第一行倒数第一个起 和后面所有的 共20个...
注意,这是LZ程序中定义的结构,不要问为什么包头是15个,包体是20个了
作者:
郝天雨
时间:
2011-8-2 10:38
很不错啊,感谢楼主分享,最近也准备做socket类的性能测试。
作者:
gwrocky
时间:
2011-8-2 14:38
楼主啊,期待你继续呢,有啥好的数据包分析的文章,我现在用工具录制了但是分析数据包感觉很困难啊,
作者:
gwrocky
时间:
2011-8-2 15:02
回复
7#
cafard-haibin
我问开发的我们的TCP/IP的数据包结构,回答我,我都不知道,彻底郁闷了。
作者:
anna03
时间:
2011-8-3 09:07
看的正起劲,没了,lz继续啊,很多童鞋都有兴趣啊
作者:
naonao
时间:
2011-8-3 16:09
经典绝对顶!LZ继续啊!
瞧瞧这满脸的期待。。。
作者:
yu2000
时间:
2011-8-3 16:52
顶一下。。。
作者:
candyzc
时间:
2011-8-4 14:35
写的确实很好呀,还有没有了
作者:
cafard-haibin
时间:
2011-8-17 11:12
第5节课:关于winsocket中关联:
其中loadrunner中的关联概念大家先搞明白,知道什么时候需要关联。比如有一个登陆过程,登陆成功后返回:用户代码xx登陆成功 。我想把那个用户代码xx取出来。留在后面其他地方使用,这时候就用到了winsocket中一些关联相关的函数。整篇内容请参加我的博客。
http://blog.csdn.net/cafardhaibin/article/details/6607827
前段时间几乎脱离了网络的忙碌。所有关于这块知识总结就到此为止。希望给大家能有个抛砖引玉的作用就够了。
作者:
lijian88_vip
时间:
2011-8-18 11:09
很基础的东西,写的很细,LZ继续啊
作者:
yujingzhen
时间:
2011-8-18 13:59
楼主,不给力啊。。看的正起劲。。没了。
作者:
daisy02
时间:
2011-8-23 18:06
帮顶,写的很好啊
作者:
wower1985
时间:
2011-8-23 18:52
回复 cafard-haibin
楼主,继续,相信还是有很多童鞋有兴趣的。
这个跟tuxedo协议的有些类似,你写的"所 ...
shx711 发表于 2011-7-8 15:20
这种讲法是不对的,对于某些层次的软件,他的通讯是有明确的通讯报文规则的,叫做“通讯规约”通讯规约定义了软件是如何通讯的,也就是定义定义了报文那个字节代表什么、那几个字节代表什么,一个数据包有多少个字节、校验码等等。准确的说就定义好的通讯规约,你就完全能知道数据包里每个字节代表的意义。所以对于此类自定义通讯规约的软件,我们可以根本不用录制数据包,自己编写、修改数据包都可行。
作者:
yayabug
时间:
2011-9-22 10:03
顶一下
作者:
zhangxuekun
时间:
2011-9-23 13:09
关于socket协议的测试,请教个问题。
场景是Client和服务端通过socket建立一条连接,然后客户端反复不断的向服务端提交消息。
Client提交消息到服务端,服务端进行响应(应该是TCP层)。在服务端没有进行响应的情况下Client无法
提交第二条消息。而对于LR本身,并不关心是否收到网络层响应。这就会导致其他迭代的消息发送失败。
这个问题应该如何处理?
谢谢
作者:
675711880
时间:
2011-10-27 10:57
回复
4#
cafard-haibin
请问这节在哪可以看到?
作者:
dream2030
时间:
2011-10-27 14:38
楼主写的很好很详细,正好也在用这部分,偶正看的起劲呢,怎么能没了呢。。楼主你太伟大了,继续写下去吧。。
作者:
fj323611
时间:
2011-11-1 15:50
学习了,楼主牛的
作者:
chronojly
时间:
2011-11-9 16:13
看的懵懵懂懂的时候,戛然而止了,靠自己去推敲了
作者:
zhaoqiong51test
时间:
2011-11-11 11:16
学习了,讲的很详细,初学者也看的懂。不过后面的包结构计算不会。希望楼主继续,关注中~~~~~~~
作者:
dvsam
时间:
2011-11-11 11:42
Mark
作者:
liuxn_sz
时间:
2011-11-17 14:30
楼主讲的很好,希望继续下去!
关注中....
作者:
Katero
时间:
2011-11-17 15:48
呵呵看到楼主说不写了,很可爱呢,恩,继续写吧,我们可以学习,你也可以稳固下知识
作者:
feifei_h
时间:
2011-12-1 16:11
有点点懂 了,楼主 ,继续阿
作者:
lyhgq321
时间:
2011-12-2 00:10
嘿,最近也是用到这个协议,参数化都不成功,望楼主能写出一篇详细完整的文章来。
作者:
bob123654
时间:
2011-12-6 15:47
楼主好淫
作者:
wsjianxian
时间:
2011-12-8 13:07
ding------------
作者:
naroon
时间:
2012-3-8 12:23
最近有涉及到socket的,正在学习。谢谢楼主共享~
作者:
bluetearxie
时间:
2012-3-8 14:45
最近正在用这个 很多不是很清楚 谢谢楼主分享
作者:
蓝色水滴
时间:
2012-3-14 16:23
问题是我们**的在controller里无法跑。。。。。有点小杯具
作者:
hbthzhy
时间:
2012-3-19 14:05
刚刚接触socket的测试。前4节讲的都很清楚的。后边还没明白就没有了。。
作者:
zbjie
时间:
2012-3-19 14:42
写呗,刚开始学,学得不错,不过没了。
作者:
jj_ljw
时间:
2012-4-10 09:31
顶下,lz继续啊
作者:
4149071
时间:
2012-4-10 15:10
顶起
作者:
火镜传说
时间:
2013-5-24 13:36
前面的是基础。包分析与处理是难点
作者:
zhengaiqi
时间:
2013-5-28 10:46
一直在学习中。。。。
作者:
fuwu527751246
时间:
2013-10-31 11:32
回复
32#
cafard-haibin
咋就完了呢
作者:
dqhzh
时间:
2014-1-15 16:12
太少了,遗憾,不过很受用
作者:
TEA_茶
时间:
2014-3-6 21:07
回复
7#
cafard-haibin
你好,你写的socket协议的学习很详细啊。我这边正好想请教一个问题不知道方便不。就是我现在使用socket协议时存在接收返回报文,返回报文不是定长的,所以能不能分2次接受。一次接受报文头,然后在根据报文头长度判断接受的报文长度呢?
作者:
谷子fang
时间:
2014-3-12 11:55
楼主写啊 这么好的东西
作者:
dashuai969
时间:
2014-3-21 12:03
支持一下
作者:
linda22
时间:
2014-3-25 17:07
不想每次连接都断开,lrs_close_socket();把这句给注销了,但是运行时仍然是每次都断开连接,不明白为什么了。
作者:
xiaoxiaoimg
时间:
2014-4-24 09:11
相当精彩,楼主继续!
作者:
cara_zhang1
时间:
2016-3-11 15:56
有没有这方面的教程推荐啊
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2