`
javababy1
  • 浏览: 1239645 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

LoadRunner下DLL的调用

阅读更多

LoadRunnerDLL的调用

——落叶夏日cwj.007

场景介绍

最近在做类似于QQ的通信工具的性能测试时发现了一些问题,现总结出来与大家分享一下。希望大家在使用LoadRunner时不仅仅停在只是录制/播放角本,而全面提升角本的编程技术,解决复杂场景。

本次测试中碰到的问题是这样的,在消息的传送过程中遇到了DEC加密的过程,LoadRunner录制到的全是加密的消息,比如我录制了某一个用户的登陆,发送消息,退出,但由于是加密的,只能单个用户使用,但如果我想并发多少个用户就存在很多问题,最直接的一个问题就是用户名是加密的,密码是加密的,当然你可以说让程序那里注掉加密的代码进行明码的测试,当然也是一种办法。但程序组提出了要使用更真实的方法来模拟,这时就必需使用下面介绍的方法。

一开始是直接把API移植到LoadRunner中来,不过由于加密算法异常复杂,有几层循环,而角本是解释执行的,进行一次加密运算可能需要好几分钟,当然在角本里可以把角本本身运行的时间去掉,但这样做显然没有直接调用DLL来的效率高。由于程序组比较忙,所以无法提供DLL给测试,所以测试完成了DLL的编写,并在LoadRunner中调用成功,高效的完成了用户信息加密,参数关联,成功的完成了测试。

动态链接库的编写
  在Visual C++6.0开发环境下,打开FileNewProject选项,可以选择Win32 Dynamic-Link Library建立一个空的DLL工程。
  1 Win32 Dynamic-Link Library方式创建Non-MFC DLL动态链接库

  每一个DLL必须有一个入口点,这就象我们用C编写的应用程序一样,必须有一个WINMAIN函数一样。在Non-MFC DLLDllMain是一个缺省的入口函数,你不需要编写自己的DLL入口函数,用这个缺省的入口函数就能使动态链接库被调用时得到正确的初始化。如果应用程序的DLL需要分配额外的内存或资源时,或者说需要对每个进程或线程初始化和清除操作时,需要在相应的DLL工程的.CPP文件中对DllMain()函数按照下面的格式书写。

 

BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;

default:

break;
}
return TRUE;
}

  

参数中,hMoudle是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP段的一个选择符)ul_reason_for_call是一个说明动态库被调原因的标志,当进程或线程装入或卸载动态链接库的时候,操作系统调用入口函数,并说明动态链接库被调用的原因,它所有的可能值为:DLL_PROCESS_ATTACH: 进程被调用、DLL_THREAD_ATTACH: 线程被调用、DLL_PROCESS_DETACH: 进程被停止、DLL_THREAD_DETACH: 线程被停止;lpReserved为保留参数。到此为止,DLL的入口函数已经写了,剩下部分的实现也不难,你可以在DLL工程中加入你所想要输出的函数或变量了。

  我们已经知道DLL是包含若干个函数的库文件,应用程序使用DLL中的函数之前,应该先导出这些函数,以便供给应用程序使用。要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。需要读者注意的是在使用第一种方法的时候,不能使用DEF文件。下面通过两个例子来说明如何使用这两种方法创建DLL文件。

  1)使用导出函数关键字_declspec(dllexport)创建MyDll.dll,该动态链接库中有两个函数,分别用来实现得到两个数的最大和最小数。在MyDll.hMyDLL.cpp文件中分别输入如下原代码:
 

//MyDLL.h
extern "C" _declspec(dllexport) int desinit(int mode);

extern "C" _declspec(dllexport) void desdone(void);

extern "C" _declspec(dllexport) void des_setkey(char *subkey, char *key);

extern "C" _declspec(dllexport) void endes(char *block, char *subkey);

extern "C" _declspec(dllexport) void dedes(char *block, char *subkey);
//MyDll.cpp
#include"MyDll.h"

//这里我用了比较大小的函数代替了我要实现的函数

int desinit(int a, int b)
{
if(a>=b)return a;
else
return b;
}
int desdone(int a, int b)
{
if(a>=b)return b;
else
return a;
}

该动态链接库编译成功后,打开MyDll工程中的debug目录,可以看到MyDll.dllMyDll.lib两个文件。LIB文件中包含DLL文件名和DLL文件中的函数名等,该LIB文件只是对应该DLL文件的"映像文件",与DLL文件中,LIB文件的长度要小的多,在进行隐式链接DLL时要用到它。读者可能已经注意到在MyDll.h中有关键字"extern C",它可以使其他编程语言访问你编写的DLL中的函数。

LoadRunner调用动态链接库

上面完成动态链接库开发后,下面就介绍动态链接库如何被LoadRunner进行调用,其实也是很简单的。在LoadRunner中的DLL调用有局部调用与全局调用,下面介绍局部调用。

首先把你编译的DLL放在角本路径下面,这里是MyDll.dll,MyDll.lib.然后在Action中使用

lr_load_dll("MYDll.dll"),此函数可以把DLL加载进来,让你调用DLL里面的函数,而DLL中的运算是编译级的,所以效率极高,代码样例如下:

#include "lrs.h"

Action()

{

//

int nRet = 6;

char srckey[129];

memset(srckey, 'a', 128);

lr_message(lr_eval_string(srckey));

lr_load_dll("MyDLL.dll");

nRet = desinit(5,8);

lr_message("比较的结果为%d",nRet);

return 0;

}

运行结果

比较的结果为8

全局的动态链接库的调用则需要修改mdrv.dat路径在LoadRunner的安装目录下面(LoadRunner/dat directory);在里面修改如例:

[WinSock]

ExtPriorityType=protocol

WINNT_EXT_LIBS=wsrun32.dll

WIN95_EXT_LIBS=wsrun32.dll

LINUX_EXT_LIBS=liblrs.so

SOLARIS_EXT_LIBS=liblrs.so

HPUX_EXT_LIBS=liblrs.sl

AIX_EXT_LIBS=liblrs.so

LibCfgFunc=winsock_exten_conf

UtilityExt=lrun_api

ExtMessageQueue=0

ExtCmdLineOverwrite=-WinInet No

ExtCmdLineConc=-UsingWinInet No

WINNT_DLLS=user_dll1.dll, user_dll2.dll, ...

//最后一行是加载你需要的DLL

这样你就可以在LR中随意的调用程序员写的API函数,进行一些复杂的数据加密,准备的一些操作,进行复杂的测试。同时如果你觉的有大量高复杂的运算也可以放在DLL中进行封装,以提高效率。

分享到:
评论

相关推荐

    loadrunner中调用dll

    在某些特定情况下,可能需要利用 LoadRunner 的灵活性,调用自定义的动态链接库(DLL)来实现特定功能或扩展其能力。以下是一个关于如何在 LoadRunner 中调用 DLL 的详细步骤和相关知识点。 首先,创建 DLL 文件是...

    悟透LoadRunner - 调用外部DLL的方法

    ### 悟透LoadRunner —— 调用外部DLL的方法 #### 引言 在LoadRunner中,通过调用外部动态链接库(DLL)来扩展脚本功能是一种常见的优化手段。这种方法不仅可以帮助减少脚本运行时的内存占用,还可以促进代码重用...

    LoadRunner测试过程中调用dll文件的制作与使用

    在LoadRunner测试中,调用DLL文件是一种常见的增强测试功能的方法。DLL(Dynamic Link Library)文件是Windows操作系统中的一种共享库,它包含了可被多个应用程序同时使用的代码和数据。在LoadRunner测试过程中,...

    Loadrunner加载DLL和调用命令行程序的方法.pdf

    Loadrunner 加载 DLL 和调用命令行程序的方法 Loadrunner 是一款功能強大的性能测试工具,它可以模拟大量用户对服务器的并发访问,从而评估服务器的性能和可扩展性。在 Loadrunner 中,我们可以加载 DLL 文件和...

    LoadRunner测试过程中调用dll文件的制作与使用.

    在LoadRunner测试中,调用DLL(动态链接库)文件是一种常见的技术,它允许测试脚本利用外部函数库来执行特定任务,例如处理复杂的算法、数据库操作等。下面将详细介绍DLL文件的制作以及如何在LoadRunner中使用。 1....

    Loadrunner加载DLL和调用命令行程序的方法.docx

    Loadrunner加载DLL和调用命令行程序的方法 Loadrunner 是一个功能强大的性能测试工具,它可以模拟大量用户的行为,来测试系统的性能和可靠性。在 Loadrunner 中,我们可以加载外部的 DLL 文件,以便调用其中的函数...

    Loadrunner调用DLL文件函数.pdf

    在LoadRunner测试工具中,调用DLL文件函数是一种高级技术,用于扩展脚本功能和优化性能。DLL(动态链接库)是包含可重用代码的共享库,可以在多个应用程序或脚本之间共享。本文主要讨论如何在LoadRunner中调用DLL...

    课程Loadrunner调用DLL文件函数.pdf

    本文主要探讨如何在LoadRunner中调用DLL(动态链接库)文件中的函数,这有助于减少脚本内存消耗,并复用复杂算法。 首先,VuGen(Virtual User Generator)是LoadRunner的一部分,用于录制和编辑测试脚本。当需要...

    LoadRunner_dll.rar_LoadRunner_loadrunner d

    在IT行业中,LoadRunner是一款广泛使用的性能测试工具,由Micro Focus公司开发,它允许测试人员模拟大量用户同时访问应用程序,以此来评估系统...记住,正确理解和运用DLL调用,将极大地提升你的测试效率和测试覆盖率。

    软件测试工具LoadRunner调用一个简单Dll例子

    LoadRunnerLoadrunner软件测试工具LoadRunner调用一个简单Dll例子LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对...

    Windows平台DLL开发及LoadRunner调用

    总结来说,这篇博客主要介绍了Windows环境下DLL的开发过程,包括导出函数的定义、DLL的编译生成,以及如何在LoadRunner性能测试脚本中加载和调用DLL,实现自定义功能。通过学习和实践这些知识,开发者可以更好地利用...

    Loadrunner 在linux系统下调用dll方法

    本文档主要介绍了如何在 Linux 系统中通过 LoadRunner 调用 DLL 文件的方法,并详细记录了整个安装与配置过程。 #### 二、LoadRunner 安装步骤详解 **1. 上传文件** - 使用 sftp 工具将 `...

    loadrunner通过动态链接库实现自定义时间戳

    3. **在LoadRunner中调用DLL**:在LoadRunner的VuGen(虚拟用户生成器)中,将DLL导入到项目中。这可以通过“资源”菜单 -> “添加” -> “库”来完成。确保库路径正确,并且库中的函数名符合LoadRunner的调用约定。...

    动态获取数据库中的数据作为loadrunner的参数替换GetData.dll

    在性能测试领域,LoadRunner是一款广泛使用的工具,用于模拟大量用户并发访问应用程序,以此来测试系统在高负载下的性能和稳定性。在这个场景中,我们关注的是如何“动态获取数据库中的数据作为LoadRunner的参数”,...

    LoadRunner高级应用.doc

    总的来说,LoadRunner的高级应用不仅仅是录制和回放脚本,而是利用C++编程和DLL调用来解决性能测试中的复杂问题,如加密通信的模拟。掌握这些技巧,可以帮助测试团队更有效地进行性能测试,发现潜在的系统瓶颈,确保...

    MySQ LoadRunner libraries下载

    2. **include目录下的文件**:这些文件通常包含头文件(.h),定义了LoadRunner脚本中调用的函数原型、数据结构和常量。当你在编写LR脚本时,需要包含这些头文件以便正确地使用MySQL相关的API。将这些头文件复制到...

    初始LoadRunner动态链接库

    5. **在LoadRunner中调用**:在Vuser脚本中使用`lr_load_dll()`加载DLL,然后通过`lr_call_dll_function()`调用DLL中的函数。 ### 注意事项 - 确保DLL与LoadRunner环境兼容,包括32位和64位版本的匹配。 - 正确...

    LoadRunner文章集锦(推荐)

    如何通过LoadRunner监控Linux和Unix操作系统的资源状况 LoadRunner函数介绍 LoadRunner函数介绍续 LoadRunner与Winsock协议[翻译] LoadRunner下DLL的调用 Mercury LoadRunner 8.1 使用前...

    如何使用LoadRunner调用外部DLL动态链接库

    希望大家在使用LoadRunner时不仅仅停在只是录制/播放角本,而全面提升角本的编程技术,解决复杂场景。  本次测试中碰到的问题是这样的,在消息的传送过程中遇到了DEC加密的过程,LoadRunner录制到的全是加密的消息...

    LoadRunner测试Tuxedo应用的两种方式

    2. **集成到LoadRunner**:在LoadRunner中引入这个DLL,并通过脚本调用DLL中的函数来模拟客户端行为。 3. **场景设计与执行**:如同第一种方法,也需要进行参数化处理和场景设计,然后执行测试场景。 #### 结束语 ...

Global site tag (gtag.js) - Google Analytics