• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

LoadRunner与Winsock协议

发布: 2008-10-09 16:21 | 作者: 网络转载 | 来源: 网络 | 查看: 543次 | 进入软件测试论坛讨论

领测软件测试网

MILY: 宋体; mso-font-kerning: 0pt; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 宋体">在讨论winsock解决方案之前,我们先讨论一下各种协议是如何工作。从前面的简介可以了解到很多的高级协议,例如FTPHTTP协议等。以及所有基于window的应用(例如IEWS-FTP)底层都是在Winsocket层上通信,因此任何高级协议的底层都是用Winsocket通信。
   
什么时候在LR中选择Winsocket协议呢?你要先了解LR是怎么样工作的:LR捕捉API请求然后再把它们回放。所以当你在创建LR WEB脚本的时候,VUGEN捕捉从IE出去的所有的HTTP请求。除此之外lr还支持其他很多协议,例如OracleODBC等。在选择不同协议录制脚本的时候,LR是依靠hooks捕捉正确的API请求。所以既然大部分网络协议都是架构在winsocket协议之上的,那对于lr不支持的协议,我们都可以在winsocket层上录制脚本。所以当找不到合适协议的时候,可以选择winsocket来录制。

 

录制WinSock协议脚本!
   Lr
录制新的虚拟用户脚本,选择winsock协议;
  
web虚拟用户脚本中录制的是URL信息,所以VUGEN启动流览器并运行就可以了,但选择Winsocket录制的时候,可能会是各种形式的应用,并不简简单单就是浏览器,所以在开始的时候我们不需要指定应用的地址。

 

   下面的例子我们选择winsock来录制web应用,正如上面说的我们开始要指定ie的地址。因为本来lr是支持http协议的,所以这个例子并无具体的意义,只是为了使例子简单。
winsock
脚本典型代码:
lrs_create_socket("socket0"
"UDP""LocalHost="0"""RemoteHost=doors:2084"LrsLastArg);
lrs_create_socket("socket1"
"TCP""LocalHost=0""RemoteHost=www2yahoocom:80"LrsLastArg);
lrs_send("socket0"
"buf0"LrsLastArg);
lrs_receive("socket0"
"buf1"LrsLastArg);
lrs_send("socket1"
"buf2"LrsLastArg);
lrs_send("socket0"
"buf3"LrsLastArg);
lrs_receive("socket0"
"buf4"LrsLastArg);
这是访问雅虎的一个应用,正如我们看到的,winsock先打开一个winsocket连接,然后收发包。我们发现录制的脚本中比web脚本(三个文件)多一个文件。

 

第四个文件是data.ws,它里面记载了在action里面收发所有包的内容。
  
下面是一个data.ws的例子。
send buf0
"!"
recv buf1 1
"!"
send buf2
"GET / HTTP/1
1\r\n"
"Accept: */*\r\n"
"Accept-Language: en-us\r\n"
"Accept-Encoding: gzip
deflate\r\n"
"User-Agent: Mozilla/4
0 (compatible; MSIE 501; Windows NT 50)\r\n"
"Host: www
yahoocom\r\n"
"Connection: Keep-Alive\r\n"
"Cookie: B="5oj83bst12l6m&b="2;" Y="v=1&n=8lln5lmi3f8g1&l=6ef8c0d34b0/o&p=m2a2s""
"qa4110004&r=3f&lg=us&intl=us; T="z=4TVE6A4ZqE6A9dIIpt30
NQNTYGNDE3NTYwM081&""
"a=AAE&sk=DAAEwinHlDtEm/&d=c2wBTWpFQk16WXdNakUzTkRneQFhAUFBRQF6egE0VFZFNkFn"
"V0E-; I="i1=010g1q1u24252e2i2k2p2r494a4g4m4q55565b5g6g6t6u7172737678797a7f7""
"g7k7n7o888f8k8p8q989c9f9i9k9l9n9qacanapb0b3bdbfbhblbqbrbuc0c1c4cgcmcscteie"
"jgr&ir=73\r\n"
"\r\n"
send buf3
"!"
recv buf4 1
"!"
recv buf5 2048
"HTTP/1
0 200 OK\r\n"
"Content-Length: 16030\r\n"
"Content-Type: text/html\r\n"
"\r\n"
"
buf2
包含了发给wwwyahoocom的包,buf5包含了从server收到的回应。正如看到的winsock录制的脚本并不像web脚本那样具有可读性,因为winsock是我们最后的选择。在buf序列号的后面是buf的字节数。例如5buffer后面的2048就是表示收到了2048个帧。
 
注意:在很多buffer里面你会发现仅仅包含了一个,这是一个网络常识,这个帧对于应用来说没有任何的作用,完全可以把这些桢清除掉,在dataws清除这个帧是效果的,需要到action里把这些桢注释掉。譬如例子中收到和发出的buffer可以用//注释掉。这样可以使脚本运行得更快。下边的例子:buffers 013 4 可以注释掉:
lrs_create_socket("socket0"
"UDP""LocalHost="0"""RemoteHost=doors:2084"LrsLastArg);
lrs_create_socket("socket1"
"TCP""LocalHost=0""RemoteHost=www2yahoocom:80"LrsLastArg);
// lrs_send("socket0"
"buf0"LrsLastArg);
// lrs_receive("socket0"
"buf1"LrsLastArg);
lrs_send("socket1"
"buf2"LrsLastArg);
// lrs_send("socket0"
"buf3"LrsLastArg);
// lrs_receive("socket0"
"buf4"LrsLastArg);
lrs_receive("socket1"
"buf5"LrsLastArg);
lrs_send("socket0"
"buf6"LrsLastArg);

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网