玉民测试爱的你值得拥有loadrunner性能下dll调用_第1页
玉民测试爱的你值得拥有loadrunner性能下dll调用_第2页
玉民测试爱的你值得拥有loadrunner性能下dll调用_第3页
玉民测试爱的你值得拥有loadrunner性能下dll调用_第4页
玉民测试爱的你值得拥有loadrunner性能下dll调用_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LoadRunner 下 DLL 的调用点击数:21 更新时间:2007 年 03 月 18 日作者:本站编辑来源:互联网场景介绍最近在做类似于的通信工具的性能测试时发现了一些问题,现总结出来与大家一下。希望大家在使用LoadRunner 时不仅仅停在只是录制/,而全面的编程技术,解决复杂场景。本次测试中碰到是这样的,在消息的传送过程中遇到了 DEC 加密的过程,LoadRunner 录制到的全是加密的消息,比如我录制了某一个用户的登陆,发送消息,退出,但由于是加密的,只能单个用户使用但如果并发多少个用户就存在很多问题,最直接的一个问题就是用户名是加密的,是加密的,当然你可以说让程序那里注掉加

2、密的代码进行明码的测试,当然也是一种办法。但程序组提出了要使用更真实的方法来模拟,这时就必需使用下面介绍的方法。一开始是直接把 API 移植到 LoadRunner 中来,不过由于加密算法异常复杂,有几层循环,而是解释执行的,进行一次加密运算可能需要好几分钟,当然在里可以把本身运行的时间去掉,但这样做显然没有直接调用 DLL 来的效率高。由于程序组比较忙,所以无法提供 DLL 给测试,所以测试组完成了 DLL的编写,并在LoadRunner 中调用成功,高效的完成了用户信息加密,参数关联,成功的完成了测试。动态库的编写在 Visual C+6.0 开发环境下,打开 FileNewProject

3、 选项,可以选择 Win32 Dynamic-Link Library 建立一个空的 DLL 工程。Win32 Dynamic-Link Library 方式创建-MFC DLL 动态库每一个 DLL 必须有一个用C 编写的应用程序一样,必须有一个WAIN 函数一样点,这就象在-MFC DLL 中DllMain 是一个缺省的函数,你不需要编写自己的 DLL函数,用这个缺省的外的内存或资源函数就能使动态库被调用时得到正确的初始化。如果应用程序的 DLL 需要分时,或者说需要对每个进程或线程初始化和清除操作时,需要在相应的 DLL 工程的.CPP 文件中对 DllMain()函数按照下面的格式书写

4、。BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpswitch( ul_reason_for_call )case DLL_PRObreak;S_ATTACH:case DLL_THREAD_ATTACH:break;case DLL_THREAD_DETACH:break;case DLL_PRO break;default: break;return TRUE;S_DETACH:参数中,hMoudle 是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP 段的一个选择符);

5、ul_reason_for_call 是一个说明动态库被调原因的标志,当进程或线程装入或卸载动态库的时候,操作系统调用函数,并说明动态 库被调用的原因,它所有的可能值为: DLL_PRODLL_PROS_ATTACH:进 程 被 调 用 、 DLL_THREAD_ATTACH:线 程 被 调 用 、S_DETACH: 进程被停止、DLL_THREAD_DETACH: 线程被停止;lp为保留参数到此为止,DLL 的函数或变量了。函数已经写了,剩下部分的实现也不难,你可以在 DLL 工程中加入你所想要输出的已经知道 DLL 是包含若干个函数的库文件,应用程序使用 DLL 中的函数之前,应该先导出这

6、些函数以便供给应用程序使用。要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外法是在创建 DLL 文件时使用模块定义文件.Def。需要读者注意的是在使用第法的时候,不能使用 DEF 文件。下面通过两个例子来说明如何使用这两种方法创建 DLL 文件。1)使用导出函数关键字_declspec(dllexport)创建 MyDll.dll,该动态库中有两个函数,分别用来实现得到两个数的最大和最小数。在MyDll.h 和MyDLL.cpp 文件中分别输入如下原代码:/MyDLL hextern C _declspec(dllexport)desini

7、t(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 #includeMyDll h/这里我用了比较

8、大小的函数代替了我要实现的函数desinit(a,b)if(a=b)return a; elsereturn b;desdone(a,b)if(a=b)return b; elsereturn a;该动态库编译成功后,打开 MyDll 工程中的 debug 目录,可以看到 MyDll.dll、MyDll.lib 两个文件。LIB 文件中包含 DLL 文件名和 DLL 文件中的函数名等,该LIB 文件只是对应该 DLL 文件的映像文件,与 DLL 文件中,LIB 文件的长度要小的多,在进行隐式DLL 时要用到它。读者可能已经注意到在MyDll h 中有关键字extern C,它可以使其他编程语言

9、你编写的 DLL 中的函数。LoadRunner 调用动态库上面完成动态库开发后,下面就介绍动态库如何被LoadRunner 进行调用,其实也是很简单的。在LoadRunner 中的 DLL 调用有局部调用与全局调用,下面介绍局部调用。首先 编译的 DLL 放在路径下面,这里是 MyDll.dll,MyDll.lib. 然后在 Action 中使用lr_load_dll(MYDll.dll),此函数可以把 DLL 加载进来,让你调用 DLL 里面的函数,而 DLL 中的运算是编译级的,所以效率极高,代码样例如下:#include lrs h Action()/nRet = 6; char sr

10、ckey129;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/datdirectory);在里面修改如例: WinSock ExtPriorityType=protocol WINNT_EXT_LIBS=wsrun32.dll W

11、IN95_EXT_LIBS=wsrun32.dll LINUX_EXT_LIBS=liblrs.soSOLARIS_EXT_LIBS=liblrs.soHPUX_EXT_LIBS=liblrs.sl AIX_EXT_LIBS=liblrs.so LibCfgFunc=winsock_exten_conf UtilityExt=lrun_api ExtMessageQueue=0 ExtCmdLineOverwrite=-WinInet No ExtCmdLineConc=-UsingWinInet NoWINNT_DLLS=user_dll1.dll, user_dll2.dll, ./最后一

12、行是加载你需要的DLL这样你就可以在 LR 中随意的调用程序员写的 API 函数,进行一些复杂的数据加密,准备的一些操作,进行复杂的测试。同时如果你觉的有大量高复杂的运算也可以放在 DLL 中进行封装,以提高效率LoadRunner 下 DLL 的调用点击数:21 更新时间:2007 年 03 月 18 日作者:本站编辑来源:互联网场景介绍最近在做类似于的通信工具的性能测试时发现了一些问题,现总结出来与大家一下。希望大家在使用LoadRunner 时不仅仅停在只是录制/,而全面的编程技术,解决复杂场景。本次测试中碰到是这样的,在消息的传送过程中遇到了 DEC 加密的过程,LoadRunner

13、录制到的全是加密的消息,比如我录制了某一个用户的登陆,发送消息,退出,但由于是加密的,只能单个用户使用但如果并发多少个用户就存在很多问题,最直接的一个问题就是用户名是加密的,是加密的,当然你可以说让程序那里注掉加密的代码进行明码的测试,当然也是一种办法。但程序组提出了要使用更真实的方法来模拟,这时就必需使用下面介绍的方法。一开始是直接把 API 移植到 LoadRunner 中来,不过由于加密算法异常复杂,有几层循环,而是解释执行的,进行一次加密运算可能需要好几分钟,当然在里可以把本身运行的时间去掉,但这样做显然没有直接调用 DLL 来的效率高。由于程序组比较忙,所以无法提供 DLL 给测试,

14、所以测试组完成了 DLL的编写,并在LoadRunner 中调用成功,高效的完成了用户信息加密,参数关联,成功的完成了测试。动态库的编写在 Visual C+6.0 开发环境下,打开 FileNewProject 选项,可以选择 Win32 Dynamic-Link Library 建立一个空的 DLL 工程。Win32 Dynamic-Link Library 方式创建-MFC DLL 动态库每一个 DLL 必须有一个点,这就象用C 编写的应用程序一样,必须有一个WAIN 函数一样在-MFC DLL 中DllMain 是一个缺省的函数,你不需要编写自己的 DLL函数,用这个缺省的函数就能使动

15、态库被调用时得到正确的初始化。如果应用程序的 DLL 需要分外的内存或资源时,或者说需要对每个进程或线程初始化和清除操作时,需要在相应的 DLL 工程的.CPP 文件中对 DllMain()函数按照下面的格式书写。BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpswitch( ul_reason_for_call )case DLL_PRObreak;S_ATTACH:case DLL_THREAD_ATTACH:break;case DLL_THREAD_DETACH:break;case DLL_

16、PRO break;default: break;return TRUE;S_DETACH:参数中,hMoudle 是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP 段的一个选择符);ul_reason_for_call 是一个说明动态库被调原因的标志,当进程或线程装入或卸载动态库的时候,操作系统调用函数,并说明动态 库被调用的原因,它所有的可能值为: DLL_PRODLL_PROS_ATTACH:进 程 被 调 用 、 DLL_THREAD_ATTACH:线 程 被 调 用 、S_DETACH: 进程被停止、DLL_THREAD_DETACH: 线程被停止;lp为

17、保留参数到此为止,DLL 的函数或变量了。函数已经写了,剩下部分的实现也不难,你可以在 DLL 工程中加入你所想要输出的已经知道 DLL 是包含若干个函数的库文件,应用程序使用 DLL 中的函数之前,应该先导出这些函数以便供给应用程序使用。要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外法是在创建 DLL 文件时使用模块定义文件.Def。需要读者注意的是在使用第法的时候,不能使用 DEF 文件。下面通过两个例子来说明如何使用这两种方法创建 DLL 文件。1)使用导出函数关键字_declspec(dllexport)创建 MyDll.dll,

18、该动态库中有两个函数,分别用来实现得到两个数的最大和最小数。在MyDll.h 和MyDLL.cpp 文件中分别输入如下原代码:/MyDLL hextern C _declspec(dllexport)desinit(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

19、); extern C _declspec(dllexport) void dedes(char *block, char *subkey);/MyDll.cpp #includeMyDll h/这里我用了比较大小的函数代替了我要实现的函数desinit(a,b)if(a=b)return a; elsereturn b;desdone(a,b)if(a=b)return b; elsereturn a;该动态库编译成功后,打开 MyDll 工程中的 debug 目录,可以看到 MyDll.dll、MyDll.lib 两个文件。LIB 文件中包含 DLL 文件名和 DLL 文件中的函数名等,该

20、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()/nRet = 6; char srckey129;memset(srckey, a,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论