版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一周学习计划参考范本
- -物流年终工作总结
- 初中教师工作总结-15篇
- 收银员的年度工作总结
- 历史教师年度考核工作总结
- 财务类实习报告模板锦集9篇
- 野生金银花人工驯化繁育中心建设可行性研究报告
- 冀教版三起四年级英语上册Unit 4 Lesson 22课件正式版
- 《市场经济运作原理》课件
- 《电机总复习习题全》课件
- 义务教育语文课程标准(2022)测试题带答案(20套)
- GB/T 23794-2023企业信用评价指标
- 电缆桥架施工方案
- 吊车吊装专项施工方案
- 小学生大队委竞选笔试题库
- 烤烟种植心得体会
- YY/T 0471.6-2004接触性创面敷料试验方法 第6部分:气味控制
- 工程征地移民实物指标调查工作程序
- 医学英语 皮肤系统Skin#
- 胶囊内镜的临床与应用
- 第四单元综合性学习《少年正是读书时》课件(共26张PPT) 部编版语文七年级上册
评论
0/150
提交评论