Loadrunner专题之协议选择
- 格式:docx
- 大小:79.91 KB
- 文档页数:5
Loadrunner专题之协议选择
LoadRunner首先是一个测试工具,其次是一个性能测试工具,然后是该工具是
一个基于协议,也就是说LoadRunner测试的对象都需要使用通信协议,对于那
些不使用通信协议仅仅进行本地处理的软件例如Microsoft Word,LoadRunner
就不适用。
以下列出一些LoadRounner支持的协议:
一般应用:C Vuser、VB Vuser、VB scrīpt Vuser、JAVA Vuser、Javascrīpt Vuser
电子商务:WEB(Http/Html)、FTP、LDAP、Palm、Web/WinsocketDual Protocol
客户端/服务器:MS SQL Server、ODBC、Oracle、DB2、Sybase CTlib、Sybase DBlib、
Domain Name Resolution(DNS)、Windows Socket
分布式组件:COM/DCOM、Corba-Java、Rmi_Java
EJB:EJB、Rmi_Java
ERP/CRP: Oracle NCA、SAP-Web、SAPGUI、SAPGUI/SAP-Web Dual Protocol、
PropleSoft_Tuxedo、Siebel Web、Siebel-DB2 CLI、Sieble-MSSQL、Sieble Oracle
遗留系统:Terminal Emulation (RTE)
Mail 服务:Internet Messaging(IMAP)、MS Exchange(MAPI)、POP3、SMTP
中间件:Jacada、Tuxedo 6、Tuxedo 7
无线系统:i-mode、voiceXML、WAP
应用部署软件:Citrix_ICA流:Media Plays(MMS)、Real
协议不同,其数据报文的结构也有所不同;在录制时,lr应该会对你从本机
发出去的数据进行截包,并拆包。因为我们知道协议的不同就是体现在数据包的
结构不同,lr应该通过对包结构的分析,判断是不是它支持的协议,对包数据
的分析,来获取用户发送的东西。比如你用ftp的协议去录制一个访问网页的
IE操作,那肯定是无所收获的。因为lr没有在网络截获到 ftp协议格式的包,
都是http协议格式的包,它不认,当然就是一个录制为空的结果了。现在我们
弄懂了这个事情,就知道该如何选择协议了。
协议的确定,通常有如下几种方法:
1、通过询问开发人员获知所使用的协议,通常这是最简单也是最直接的方法;
因为没有人比开发人员更清楚他们所开发的应用程序使用的什么通信协议了;
2、通过概要或详细设计手册获知所使用的协议,在没有开发人员支持的情况,
通过概要设计或详细设计获知所使用的协议不失为第二简便方法;
3、通过协议分析工具捕包分析,然后确定被测对象所使用的协议。在使用协议
分析工具分析协议过程当中一定要摒除底层协议,不要被底层协议所迷惑;
4、通过以往测试经验确定被测对象所使用的协议,不过这种方法确定的协议有
一定的不准确性。
下面说几个测试的原则
1、一般情况下对于b/s构架的只要选择WEB(Http/Html)协议就可以了,如果
有中间件的则选择中间件服务器的协议 ;
2、对于C/S结构,可以根据后端数据库的类型来选择。如SybaseCTLib协议用
于测试后台的数据库为Sybase的应用;MS SQL Server协议用与测试后台数据
库为 SQL Server的应用;对于一些没有数据库的windows应用,可选用windows
sockets底层协议;使用了数据库但使用的是ODBC连接的数据则选择ODBC协议;
3、一般不是基于浏览器的,对于一些没有数据库的Windows应用,我们在测试
的过程中都会选择WinSocket协议来录制,理论上来讲我们这样选择是正确的,
但我们要知道在录制的时候所选择的协议就决定了LR如何捕获数据包,如果我
们选择错误了,将会捕获到一些无用的数据包。C/S结构是比较复杂的,一定要
搞清楚C/S是client-database还是client-server-database结构的,只有这
样我们才能够决定是选择WinSocket协议还是sql协议,或者说选择多个协议;
当然协议的选择也是一个探索的过程,
只要能够得到我们想要的结果,那就是正确的。还有一点,我们在做性能测试的
时候应该是有测试重点的.
4、关于单协议和双协议,我只知道IE6内核的浏览器在录制脚本的时候要选择
单协议,而IE7内核的浏览器在录制脚本的时候要使用双协议。
Loadrunner调用外部DLL
引言
当我们使用VuGen时, 允许我们调用外部的DLL定义的函数。通过调用外部DLL中的函数,可以
减少我们的脚本在整个运行期间内存消耗。同时,还有一个好处是可以对一些复杂的算法进行复用,比如
一个包括MD5加密、CRC32验证、文件压缩/解压、Base64编码的DLL将是多么振奋人心啊。
调用外部DLL的方法有两种:
● (单个脚本中)在脚本中是使用 lr_load_dll 函数。
● (全局设置,所有脚本)通过修改 mdrv.dat 文件实现。
对DLL的要求
VuGen只能识别标准C编译的DLL, 所以使用VC6创建的函数必须在函数开头加上extern "C",它
告诉编译器对这个函数按照标准C的方式进行编译。而如果你想调用C#编译出来DLL,那就只能望而却
步啦。如何想查看DLL中是否有符合要求的导出函数,可以使用微软的SDK里自带的Dependency Walker
工具。如图:
DLL的创建
启动VC6,新建一个Win32 Dynamic-Link Library的工程,取名:LRDllTest
在这里,我们创建一个简单的求和函数Sum,并什么为导出函数,关键代码如下:
#define LRDLLTEST_API __declspec(dllexport)
extern "C" LRDLLTEST_API int Sum(int a , int b);
//a + b
LRDLLTEST_API int Sum(int a , int b)
{
return a + b;
}
编译,生成DLL:LRDllTest.dll
lr_load_dll方法
有了符合要求的DLL,调用lr_load_dll函数显得非常的简单。lr_load_dll的函数原型是:
lr_load_dll(library_name);
所以,只需要调用该函数,传入需要引用的DLL路径,如果DLL放在脚本目录里,可直接写相对路
径。这里,我推荐把该函数放在vuser_init这个Action里,一方面是由于vuser_init只会执行一次,如果
我们放在中间的那个默认的Action中的话,DLL可能会被装载多次,这是没有必要的。另一方面,装载
DLL也需要一定的性能开销,所以作为初始环境设置将它放在vuser_init中更加合理。
调用lr_load_dll装载DLL后,就可以任意使用该DLL中的导出函数,而不需要再去做任何声明了。
嗯,用起来的确很简单,VuGen中代码如下:
vuser_init()
{
lr_load_dll("LRDllTest.dll");
return 0;
}
Action()
{
int a = Sum(1,2);
lr_output_message("a = %d",a);
return 0;
}
Load Generators调用远程机器进行加压时调用lr_load_dll的方法
有人会遇到这种情况,使用lr_load_dll加载DLL的脚本在本机是可以顺利执行的,但是在Controller
中通过负载生成器(Load Generators)调用远程机器执行脚本时,脚本会无法顺利执行,错误信息:
Error: CCI security error:You are running under secure mode and the function ci_load_dll is not
allowed in this mode.
错误信息让人百思不得其解,不过能够猜到,肯定是远程机器无法调用加载的DLL所致。
众里寻他千百度,暮然回首,解决办法其实是如此的简单:
菜单“File-Add file to script”,把要引用的DLL加进来,一切搞定!注意,Agent的Enable Firewall Agent
选项不要勾上。
mdrv.dat方法
这个办法比较毒,通过修改mdrv.dat文件,无需调用lr_load_dll即可使用该DLL任何导出函数。具
体实施方法如下:
● 将LRDllTest.dll拷贝到LoadRunner安装路径的Bin目录下。
● 修改mdrv.dat文件(安装路径的dat目录下),因为选择的是默认的Web协议,所以找到[lrun_api]
节点,在后面加上一句:
WINNT_DLLS=LRDllTest.dll
OK,再试试不使用lr_load_dll函数,直接调用LRDllTest.dll中的Sum函数吧!