由于过分陷入一个视角的具体实现细节中,可能让自己迷失了真正的方向。
第一项修炼:自我超越(Personal Mastery)
第二项修炼:改善心智模式(Improving Mental Models)
第三项修炼:建立并同愿景(Building Shared Vision)
第四项修炼:团体学习(Team,Learing)
LoadRunner 调用dll
上一篇 /
下一篇 2006-12-05 11:25:12
场景介绍 最近在做类似于QQ的通信工具的性能测试时发现了一些问题,现总结出来与大家分享一下。希望大家在使用LoadRunner时不仅仅停在只是录制/播放角本,而全面提升角本的编程技术,解决复杂场景。51Testing软件测试网)VRA7?3J5@:Vo 本次测试中碰到的问题是这样的,在消息的传送过程中遇到了DEC加密的过程,LoadRunner录制到的全是加密的消息,比如我录制了某一个用户的登陆,发送消息,退出,但由于是加密的,只能单个用户使用,但如果我想并发多少个用户就存在很多问题,最直接的一个问题就是用户名是加密的,密码是加密的,当然你可以说让程序那里注掉加密的代码进行明码的测试,当然也是一种办法。但程序组提出了要使用更真实的方法来模拟,这时就必需使用下面介绍的方法。 ULQj6XUx?(Sc@W0 一开始是直接把API移植到LoadRunner中来,不过由于加密算法异常复杂,有几层循环,而角本是解释执行的,进行一次加密运算可能需要好几分钟,当然在角本里可以把角本本身运行的时间去掉,但这样做显然没有直接调用DLL来的效率高。由于程序组比较忙,所以无法提供DLL给测试,所以测试完成了DLL的编写,并在LoadRunner中调用成功,高效的完成了用户信息加密,参数关联,成功的完成了测试。51Testing软件测试网e9o-w)l.e E;RNI;n 动态链接库的编写 'Z9Y;@-z)z$[0 在Visual C++6.0开发环境下,打开FileNewProject选项,可以选择Win32 Dynamic-Link Library建立一个空的DLL工程。 ,`W'd5L
yC0 1.Win32 Dynamic-Link Library方式创建Non-MFC DLL动态链接库51Testing软件测试网+rs Tul
rBL 51Testing软件测试网5HZ{Xg+P]A 每一个DLL必须有一个入口点,这就象我们用C编写的应用程序一样,必须有一个WINMAIN函数一样。在Non-MFC DLL中DllMain是一个缺省的入口函数,你不需要编写自己的DLL入口函数,用这个缺省的入口函数就能使动态链接库被调用时得到正确的初始化。如果应用程序的DLL需要分配额外的内存或资源时,或者说需要对每个进程或线程初始化和清除操作时,需要在相应的DLL工程的.CPP文件中对DllMain()函数按照下面的格式书写。 p;imA|
pm\0
v:nIovzT0BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
D#K{;j(p]Z0{ p
^C^1Is0switch( ul_reason_for_call )51Testing软件测试网PG2@){~ u%_ { ;]k/T5rJw9_Riq0case DLL_PROCESS_ATTACH: 4Pni,R2^z"d@0 break; 3G6_%D.u:Kj0case DLL_THREAD_ATTACH: H CG(|v^0 break;51Testing软件测试网PsT8j2mQ.M7N case DLL_THREAD_DETACH:51Testing软件测试网|Gg7q2DHD break;
~QVpe3hOU0case DLL_PROCESS_DETACH: D%R)xz)SrF0p0 break; jL.K@A l0default:51Testing软件测试网&C8q;a GZ-t#xMU break; D:y%o,d^upo0} AGMQXP;J(L0return TRUE; /NX4Q U-cfD Xo0} 9cY+h7CZF9p0 |
F3gHMh,]{0 参数中,hMoudle是动态库被调用时所传递来的一个指向自己的句柄(实际上,它是指向_DGROUP段的一个选择符);ul_reason_for_call是一个说明动态库被调原因的标志,当进程或线程装入或卸载动态链接库的时候,操作系统调用入口函数,并说明动态链接库被调用的原因,它所有的可能值为:DLL_PROCESS_ATTACH:进程被调用、DLL_THREAD_ATTACH:线程被调用、DLL_PROCESS_DETACH:进程被停止、DLL_THREAD_DETACH:线程被停止;lpReserved为保留参数。到此为止,DLL的入口函数已经写了,剩下部分的实现也不难,你可以在DLL工程中加入你所想要输出的函数或变量了。 1F;fLW3fWV,`?M0 v_{7@UoH
F0 我们已经知道DLL是包含若干个函数的库文件,应用程序使用DLL中的函数之前,应该先导出这些函数,以便供给应用程序使用。要导出这些函数有两种方法,一是在定义函数时使用导出关键字_declspec(dllexport),另外一种方法是在创建DLL文件时使用模块定义文件.Def。需要读者注意的是在使用第一种方法的时候,不能使用DEF文件。下面通过两个例子来说明如何使用这两种方法创建DLL文件。51Testing软件测试网p8Ny3[V@X 51Testing软件测试网c$^#I9g!G|8j 1)使用导出函数关键字_declspec(dllexport)创建MyDll.dll,该动态链接库中有两个函数,分别用来实现得到两个数的最大和最小数。在MyDll.h和MyDLL.cpp文件中分别输入如下原代码:51Testing软件测试网OGVXM1b%UTK 51Testing软件测试网 P:BPQ|A2]3h
a |