loadrunner 协议选择

上一篇 / 下一篇  2018-02-02 15:35:57 / 个人分类:loadrunner 协议

LoadRunner脚本中的协议选择

1)可以直接确认

这种情况下你可以通过你的测试常识直接判读系统使用了什么样的协议,比如前面说的Web系统使用了HTTP./HTML协议,Ftp服务使用了FTP协议等;

2)通过研发人员了解被测系统使用了什么样的协议

如果通过你的判断不能确定使用了什么样的协议这个时候,你可以跟研发人员进行沟通,确认他在开发的过程中使用了什么样的协议。

3)使用常用的数据监听工具进行数据包分析

有的时候可能你的研发人员也不能确定他在开发过程中使用了什么协议,这个确实是有可能的特别是现在的研发人员特别喜欢用别人的插件,或者开发环境封装的很好,导致他们没有开发底层的协议栈,这个时候就需要你自己去判断,自己判断过程中可以借助协议分析工具,常用的协议分析工具如:sniffer Proethreal等;这些工具可以通过抓取数据然后对数据包进行分析的方法分析出现在常用的协议。能力还是相当的强的。

4)万能协议Winsocket协议

如果上述方法都不行,但是你还想用LR完成你的性能测试,没有办法这个时候可以拿出这个Winsocket协议进行脚本的开发,这个协议只要是在Windows上的通信的软件都可以将脚本开发出来,但是脚本调试的难度相当到,需要看大量的16进制的数据,并且有的时候还需要复杂的管理,本人建议能不用,最好不用。

5)另外可以通过以下文章对协议选择有更深入的了解

LoadRunner的协议选择

1.      LR支持多种协议,请大家一定要注意,这个地方协议指的是你的Client端通过什么协议访问的ServerClient一般是面向最终使用者的,Server是第一层Server端,因为现在的体系架构中经常Server层也分多个层次,什么应用层,什么数据层等等,LR只管Client如何访问第一层Server.

2.      特别要注意某些应用,例如一个Web系统,这个系统是通过ActiveX控件来访问后台的,IE只是一个容器,而ActiveX控件访问后台是通过COM/DCOM协议的,这种情况就不能使用Web协议,否则你什么也录制不到,所以,LR工程师一定要了解应用程序的架构和使用的技术

3.      谈谈多协议LR是支持在一个脚本里面使用多协议的,不过这个多协议是有一定的限制的,我有一个LR7.6上哪些协议支持多协议,LR8.0是不是取消了这些限制我不清楚。象HTTPS,一般来讲一定要选择多协议,但在选择具体协议的时候一定只选Web协议,这时候才能作那个端口映射。

4.      谈谈Web协议中Option Web协议里面有一些Option,具体我记不清楚了,但有一个地方很重要:就是选择URL方式还是HTM方式录制,这里有一些原则a.尽量使用HTM方式录制b.如果使用了Javascrīpt,并且javascrīpt里面与后台有交互,那一定要使用URL方式,例如javascrīpt用于判断用户名和密码是否正确(与后台一定会有交互),那么就要使用URL方式录制;但如果Javascipt只是判断用户名或密码的格式,那一般不会与后台发生交互,就不需要使用URL方式。至于什么情况下一定要用URL方式,我曾经写过一个文档,但现在我不记得了不好意思。

5.      谈谈并发点和结果检查很多人喜欢使用并发点和结果检查,我谈谈我自己的看法。第一我基本上从来不使用结果检查,压力测试的结果我一般是去后台检查存储层的数据是否正确的。LR只能检查协议层上的错误,但如果在大量并发用户的情况下使用返回结果检查例如reg_text_check,会极大的占用客户端的资源,我一般不这么作;至于并发点,我只有在客户强烈要求的情况下才会使用,否则基本不用

使用LoadRunner如何更好的选择协议

测试B/S系统选择Web(Http/Html)

测试一个C/S系统要根据所用到的后台数据库来选择不同的协议:

1.      后台数据库是sybase,则采用sybaseCTlib协议。

2.      后台数据库是sql server,则使用MS sql server协议。

3.      后台数据库是oracle数据库,就使用oracle 2-tier协议。

4.      没有数据库的c/sftp,smtp)系统,可以选择windowsSockets协议。

5.      其他的ERPEJB(需要ejbdetector.jar),选择相应的协议即可。

LoadRunnerWinsock协议

在讨论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/11\r\n"

"Accept: */*\r\n"

"Accept-Language: en-us\r\n"

"Accept-Encoding: gzipdeflate\r\n"

"User-Agent: Mozilla/40 (compatible; MSIE 501; Windows NT 50)\r\n"

"Host: wwwyahoocom\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=4TVE6A4ZqE6A9dIIpt30NQNTYGNDE3NTYwM081&""

"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/10 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 0134

TAG:

 

评分:0

我来说两句

日历

« 2024-04-26  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 74960
  • 日志数: 55
  • 建立时间: 2016-04-19
  • 更新时间: 2020-09-23

RSS订阅

Open Toolbar