win socket协议_第1页
win socket协议_第2页
win socket协议_第3页
win socket协议_第4页
win socket协议_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LR的socket协议翻译LoadRunner与Winsock协议(一)在开始讨论winsocket解决方案之前,我们先讨论一下各种协议是如何工作.从前面的简介可以了解到很多的高级协议,例如FTP,HTTP协议等. 以及所有基于window的应用(例如IE,WS-FTP)底层都是在Winsocket层上通信,因此任何高级协议的底层都是用Winsocket通 信。什么时候在LR中选择Winsocket协议呢?你要先了解LR是怎么样工作的:LR捕捉API请求然后再把它们回放。所以当你在创建LR WEB脚本的时候,VUGEN捕捉从IE出去的所有的HTTP请求。除此之外lr还支持其他很多协议,例如Or

2、acle,ODBC等。在选择不同协议录制 脚本的时候,LR是依靠hooks捕捉正确的API请求。所以既然大部分网络协议都是架构在winsocket协议之上的,那对于lr不支持的协议,我们 都可以在winsocket层上录制脚本。所以当找不到合适协议的时候,可以选择winsocket来录制。录制WinSock协议脚本!Lr录制新的虚 拟用户脚本,选择winsock协议在web虚拟用户脚本中录制的是URL信息,所以VUGEN启动流览器并运行就可以了,但选择Winsocket录制 的时候,可能会是各种形式的应用,并不简简单单就是浏览器,所以在开始的时候我们不需要指定应用的地址。下面的例子我们选择wi

3、nsock来录制web应 用,正如上面说的我们开始要指定ie的地址。因为本来lr是支持http协议的,所以这个例子并无具体的意义,只是为了使例子简单。翻译LoadRunner与Winsock协议(二) winsock脚本典型代码?lrs_create_socket(”socket0, “UDP”, “LocalHost=0, “RemoteHost=doors:2084, LrsLastArg);lrs_create_socket(”socket1, “TCP”, “LocalHost=0, “RemoteHost=:80, LrsLastArg);lrs_send(”socket0, “bu

4、f0, 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.w

5、s的例子。send buf0“!”recv buf1 1“!”send buf2“GET / HTTP/1.1rn”“Accept: */*rn”“Accept-Language: en-usrn”“Accept-Encoding: gzip, deflatern”“User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)rn”“Host: rn”“Connection: Keep-Alivern”“Cookie: B=5oj83bst12l6m&b=2; Y=v=1&n=8lln5lmi3f8g1&

6、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“g7k7n7o888f8k8p8q989

7、c9f9i9k9l9n9qacanapb0b3bdbfbhblbqbrbuc0c1c4cgcmcscteie”“jgr&ir=73rn”“rn”send buf3“!”recv buf4 1“!”recv buf5 2048“HTTP/1.0 200 OKrn”“Content-Length: 16030rn”“Content-Type: text/htmlrn”“rn”“buf2 包含了发给的包,buf5包含了从server收到的回应。正如看到的winsock录制的脚本并不像web脚本那样具有可读 性,因为winsock是我们最后的选择。在buf序列号的后面是buf的字节数。例如5号

8、buffer后面的2048就是表示收到了2048个帧。注 意:在很多buffer里面你会发现仅仅包含了一个“!”,这是一个网络常识,这个帧对于应用来说没有任何的作用,完全可以把这些桢清除掉,在 data.ws清除这个帧是效果的,需要到action里把这些桢注释掉。譬如例子中收到和发出的buffer可以用/注释掉。这样可以使脚本运行得更 快。下边的例子: buffers 0, 1, 3 和 4 可以注释掉:lrs_create_socket(”socket0, “UDP”, “LocalHost=0, “RemoteHost=doors:2084, LrsLastArg);lrs_create_

9、socket(”socket1, “TCP”, “LocalHost=0, “RemoteHost=: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,

10、LrsLastArg);lrs_send(”socket0, “buf6, LrsLastArg);翻译LoadRunner与Winsock协议(三) 创建脚本步骤:1. VuGen录制脚本2.增强脚本3.参数化4.关联脚本5.设置运行参数6.运行脚本1. VuGen录制脚本按照之前章节说的步骤创建脚本,录下来的就是基本脚本,可以先把“!”的buffer注释掉。练习:创 建一个简单的winsock脚本,可以选择MI公司的网站,把录下来的脚本命名为winsocket_1,再用Http协议方式创建一个Web脚本,把脚 本保存为WebWinsock_1.请不要更改session_id把两种脚本比较,

11、当你登陆的时候,可以收到一个“welcome,jojo.”的消 息。既然所有的消息都放在data.ws文件里,那么data.ws里面应该能找到这条消息。1.1) 在几号bufffer里面包含“welcome,jojo”?怎样判断这是收到的帧而不是发出的帧?还有着个字符串正如显示的那样或者他是html的一个标签。仔 细查看脚本,在data.ws文件中寻找MSO=SIDxxxxxxxxx,XXXXXX是9位数的号码 ,他表示自从January 1 st,1970以来流逝的所有的秒时间,cookie和session_id都是根据时间来生成的,所以脚本里面的9位数也就直接和脚本运行时间挂钩,所 以我们

12、要把这个数改成我们每次运行脚本的确切时间,首先把这个值更换成参数,在c里面有一个Time()的函数。他返回的就是自从January 1 st,1970以来流逝的所有的秒时间,在脚本的开始用这个函数获取时间值,然后把刚才创建的参数指向这个值。然后在data.ws里面替换所有的id, 这样每次脚本运行都能获得正确的id。1.2)把修改了参数的脚本运行一遍,在脚本的运行日志里面寻找”incorrectly”。会找到”Youve reached this page incorrectly”这条消息,运行web脚本也会发现类似的消息。其中发生了什么呢?注 意:在data.ws文件中收到的buffer内容

13、在每次运行时不会改变,录制脚本时data.ws文件被创建并且回放过程中也不会改变?所以lr录制的 脚本种buffer不是很重要,LR用发送包的数据发出请求,然后对比发送请求的数据包和脚本里面包存的数据,这里lr只判断数据包大小,而不是具体内 容。如果收到的数据包包括“rob”,而server响应是“bob”,lr也会认为脚本运行成功。但如果server回复的是robot”,这样lr就 会因为收到包的大小不对而认为脚本执行失败。另一种情况时lr期望收到500bytes大小的包,但是前10秒只收到了100bytes,这时r会认为超 时判断脚本运行失败,可以通过lrs_set_recv_timeou

14、t 函数来设定超时时间。那么反面一种情况是,你不想接受所有的数据包,只是想收到包的前100bytes,可以通过函数ltr_receive_ex 来任意设定想要收到的字节。2.增强脚本在脚本中添加事务,集合点和控制语句等增强脚本,和web脚本不同的是winsock脚本可读性很差,所以要在录制脚本时添加注释,事务和集合点等。如果在脚本中有逻辑需求,那么插入逻辑语句 (通用声明不适应Winsock_1脚本).3脚本参数化把脚本中变化的值参数化,只要用参数把这些值替换掉就可以,使用不同参数重复业务流程,例如在上面的例子里面jojo/bean就可以参数化成为userIDs/passwords4关联脚本关

15、 联目的是为了让你在一个并发中用到一个商业流程的结果,在web脚本中有这样的过程,从web脚本中sessionid关系到后面的流程能不能运 行,winsock脚本有同样的问题。所以需要捕获到session id然后把它关联起来,举个例子从下面的脚本中获取PID(lr函数的例子):“r”“x0 blah blah blah “rn blah blah blah “PID TT STAT TIME COMMANDrn PID 28469 q2” S 0:01 -tcsh (tcsh)rn”在一个典型的web脚本中,你用web_create_html_param函数,用“PID“ 和“q2”定义边界

16、扑获数据。在Winsock脚本中,用lrs_save_param函数从静态数据或收到的数据包中截获数据,看下面的例子:lrs_receive(”socket2, “buf47, LrsLastArg);lrs_save_param(”socket2, NULL, “param1, 67, 5);和web_create_html_param函数不同的是lrs_save_param在请求之后进行,这个例子中,第一行代码是接收到47号包。lrs_save_param函数的参数意义如下:socket2: 从socket2中扑获数据NULL: null参数意思是从最后一个buffer里截取,在这儿就是指buf47,如果你从其它的buf里面来获取数据,则你必须要指明buf的号码了param1:命名的参数值67:位移(下面截解释)5:捕获的长度位移:从buffer的开始多少位去捕获参数的值,在下面的例子里面,PID是从buf47开始往后67bytes来截取的,我们怎么确定这个值?在data.ws中选取需要截取参数的地方然后按F7键,这样会弹出一个窗体。如下图:在左边的列,你将看到符合这部分数据的偏移量

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论