LoadRunner - 调用外部DLL的点点滴滴
来源:互联网 发布:淘宝招牌图片尺寸 编辑:程序博客网 时间:2024/05/01 16:27
come from: http://www.cnblogs.com/coderzh/archive/2008/04/02/1135118.html
引言
调用外部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函数吧!
了解详细的内容请参考LR的帮助:HP LoadRunner Virtual User Generator User's Guide > Appendixes >Calling External Functions > Loading a DLL—Globally
- LoadRunner - 调用外部DLL的点点滴滴
- 【转】调用外部Dll的点点滴滴
- loadrunner调用外部Dll
- LoadRunner调用外部DLL的方法
- VC++6.0调用DLL的点点滴滴
- LoadRunner下DLL的调用
- LoadRunner下DLL的调用
- LoadRunner下DLL的调用
- LoadRunner下DLL的调用
- LoadRunner中调用DLL的补充说明
- 转:LoadRunner下DLL的调用
- loadrunner 调用dll实现
- LoadRunner 调用dll
- LoadRunner调用Dll
- QT调用dll、外部程序调用QT的dll.md
- 如何让VB调用外部的DLL
- vc++ 调用外部dll的方法
- LoadRunner如何调用外部函数
- CentOS系统下docker的安装配置及使用详解
- Jquery单选树
- linux之sed用法
- js(jquery)绑定点击事件
- MD5加密
- LoadRunner - 调用外部DLL的点点滴滴
- Html5学习第一天
- PyQt之玩转signal(信号)与slot(槽)二:添加自定义槽
- Windows下编译fast rcnn
- FastJson字段解析问题
- 反射判断成员变量是否静态,并获得其静态成员的值
- URI URL URN的区别
- ServletConfig 接口和ServletContext 接口
- iOS可持续化集成: Jenkins + bundler + cocoapods + shenzhen + fastlane + pgyer