现在的位置: 首页 > 综合 > 正文

使用LoadRunner录制脚本时如何选择合适的协议?

2013年07月26日 ⁄ 综合 ⁄ 共 3332字 ⁄ 字号 评论关闭

怎么开场呢?我就不说这个问题“很傻很天真”了,这就好比“渔夫要捞鱼,如何选择合适的网眼”、“程序员要写代码,如何选择系统头文件”一样,提出这样的问题充分暴露出一种浮躁盲目的情绪:

× 业务不精:对被测软件环境的总体架构不了解,不知道client和server间的通讯方式;
× 工具不精:但凡对LoadRunner的基本原理有所了解,估计也不会有这样的问题。

其实只要你能把以上的两点搞明白了,这个问题也就不再是问题。
LoadRunner属于应用在客户端的测试工具,在客户端模拟大量并发用户去访问服务器,从而达到给服务器施加压力的目的。所以说LoadRunner模拟的就是客户端,其脚本代表的是客户端用户所进行的业务操作,即只要脚本能表示用户的业务操作就可以。

具体到脚本应该选择什么协议,说直观点,就是选择脚本中选择哪些系统头文件的问题。试想一下,如果你碰到开发人员写程序时不知道用什么头文件,估计大部分测试员暗地里要“笑话”人家;现在轮到自己了,呵呵。下面是各种协议和相关头文件的对应关系。

具体到选择协议,个人看法,有两种策略。

×选择click and scrīpt,相对比较简单的协议,类似于WinRunnerQTP的GUI级别的脚本,直接记录鼠标和键盘的动作,不需要关注底层的通讯协议,可以避免很多问题(如关联等),容易理解,不过LoadRunner 9.0支持的click and scrīpt不多,只有以下三种:
Web (Click and scrīpt)
SAP (Click and scrīpt)
Ajax (Click and scrīpt)

×另外一种就是选择协议的依据就是client和server之间的通讯协议了,记住,依据只是通讯协议,而不是别的。

谁说B/S结构的就一定选择WEB(HTTP/HTML)?你试试51testing首页的“在线客服”,或者在线的QQ或者MSN,看看用WEB(HTTP/HTML)能否录到期望的脚本?

谁又说C/S结构的就一定是WinSocket协议?目前很多的Win32应用客户端其实也是HTTP通讯。难道各位没有注意到LoadRunner还有下面的选项

所以说选择什么协议和什么c/s、b/s结构关系不大,唯一的依据就是客户端和服务器之间的通讯。明白这一点后,什么“单协议”、“双协议多协议”统统不再是问题。

--------------------------------------------------------------------------------------------------------------------------------

先搞清楚什么是协议,为什么要选择协议。这就需要我们对通信机理有一些的了解。
首先,什么是协议?
协议无非就是一个约定,关于数据包发送的格式的约定,就是说如果大家都这样发送,那么通信就能够成功,如果大家都各按各的来,那么就没办法进行通信了。
那么接下来就是LR录制时的工作原理了,LR的录制和WR不一样,它不关心你的对象识别什么的,不关心你的什么窗口之类的,LR有一个Agent进程,来 专门监控客户端和服务器之间的通信,然后用自己的函数进行录制。所以说,LR录制的时候关心的是通信,是客户端和服务器之间的数据包。lr录制机理,在录制时,lr应该会对你从本机发出去的数据进行截包,并拆包。因为我们知道协议的不同 就是体现在数据包的结构不同,lr应该通过对包结构的分析,判断是不是它支持的协议,对包数据的分析,来获取用户发送的东西。说到这里,大家就比 较清楚了,为什么有的时候不能录制呢?因为,协议不认识阿,导致LR截获的数据包不能解析,所以录制下来是空的。比如你用ftp的协议去录制一个访问网页的IE操作,那肯定是无所收获的。因为lr没有在网络截获到ftp协议格式的包,都是http协议格式的包,它不认,当然就是一个录制为空的结果了。

现在我们弄懂了这个事情,就知道该如何选择协议了。看见很多人关心lr是不是支持mysql协议。我认为要寻找的答案的思路是这样的:
1。首先弄清mysql协议和其他数据库协议的关系,看能不能用其它数据库协议录制。但其实oracle的cs协议是oracle独有自己开发的协议,sqlserver也是一样,而mysql又与这几大产品又不是隶属关系,其脚本录制的可能性很小。
2。mysql协议的底层是基于什么协议的,如果直接构建在tcp协议上,lr又不支持mysql协议,那只能考虑用低一点的协议录录看,即socket。如果mysql协议是构建在odbc协议上的,那么就可能用lr的odbc api来写。

到这里我们再来看,那我们怎么样选择协议呢?当然原则就是说,你数据包的通信协议能被LR识别。
过去流行的一种说法是,只要B/s结构的都是选择http协议,如果不是b/s那么肯定是socket,其实这种说法是比较肤浅或者比较片面的,我觉得要 真正理解这个问题,必须搞清楚你所测系统的数据流采用的什么协议包装的。这个我个人觉得,最好是能去向开发人员多了解,多学习。(说到这里,我想顺便建议 一点:测试人员向开发人员学习是个好习惯,多学一点底层的东西,或者对程序架构,数据流向,内部结构分析多了解一点,对自己的测试很有帮助,对自己的成长 也是有帮助的),另外,个人觉得,作为一个测试人员需要多了解一些网络方面的专业知识,最好学习一些网络分析工具譬如说Sniffer等,这对测试很有帮
助。
说了这么多,似乎跑题了?还是回到正题,如何选择协议。
我下面给大家推荐一些建议值,是我在某本测试专业书籍上看到了,给大家贴上来,仅供参考。我还是说,具体问题具体分析,选择协议不是一个教条的事情,而是需要研究探索并尝试。
协议选择参考:
   应用类型      协议选择
1. Web网站       HTTP/HTML
2. FTP服务器     FTP
3. 邮件服务器    IMAP,POP3,SMTP
4.  C/S (第一种)客户端以ADO,OLEDB方法连接后台数据库   MS SQL Server,Oracle,Sybase,DB2,Infrmix
    C/S  (第二种)客户端以ODBC方法连接后台数据库  ODBC
    C/S  (第三种)没有后台数据库   Socket
5. ERP系统    SAP Peoplesoft
6.分布式组件   COM/DACOM  EJB
7.无线应用     WAP  PALM

总之,只有充分了解被测系统的应用类型和技术架构,才能做出正确的选择。

理论上来说我们在对一个系统做性能测试以前,要先和开发人员了解一下他们在开发过程中都用了些什么技术,数据流是用什么协议封装的,还要了解我们要测试的 系统的网络结构,服务器的配置等问题;还有就是要知道系统客户端和第一服务器间的协议,这中间就涉及到一个中间件的问题。另外我们要知道协议的选择直接关 系到LR会捕获到什么样的数据包。这些是进行性能测试的基础。
    下面说几个测试的原则(都是自己遇到过的,呵呵,没遇到过的就不知道了):
1、一般情况下b/s构架的只要 选择http协议就可以了,如果有中间件的则选择中间件服务器的协议 ;
2、一般不是基于浏览器的,我们在测试的过程中都会选择WinSocket协议来录制,理论上来讲我们这样选择是正确的,但我们要知道在录制的时候所选择 的协议就决定了LR如何捕获数据包,如果我们选择错误了,将会捕获到一些无用的数据包。cs结构是比较复杂的,在这里我要提醒大家,一定要搞清楚cs是 client-database还是client-server-database结构的,只有这样我们才能够决定是选择WinSocket协议还是 sql协议,或者说选择多个协议;当然协议的选择也是一个探索的过程,只要能够得到我们想要的结果,那就是正确的。还有一点,我们在做性能测试的时候应该
是有测试重点的,呵呵。

3、关于单协议和双协议,我只知道IE6内核的浏览器在录制脚本的时候要选择单协议,而IE7内核的浏览器在录制脚本的时候要使用双协议

分享快乐,知识传播的更远

http://blog.csdn.net/maggiejin/article/details/2470214

抱歉!评论已关闭.