玉民測(cè)試愛(ài)的你值得擁有l(wèi)oadrunner性能下dll調(diào)用_第1頁(yè)
玉民測(cè)試愛(ài)的你值得擁有l(wèi)oadrunner性能下dll調(diào)用_第2頁(yè)
玉民測(cè)試愛(ài)的你值得擁有l(wèi)oadrunner性能下dll調(diào)用_第3頁(yè)
玉民測(cè)試愛(ài)的你值得擁有l(wèi)oadrunner性能下dll調(diào)用_第4頁(yè)
玉民測(cè)試愛(ài)的你值得擁有l(wèi)oadrunner性能下dll調(diào)用_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、LoadRunner 下 DLL 的調(diào)用點(diǎn)擊數(shù):21 更新時(shí)間:2007 年 03 月 18 日作者:本站編輯來(lái)源:互聯(lián)網(wǎng)場(chǎng)景介紹最近在做類似于的通信工具的性能測(cè)試時(shí)發(fā)現(xiàn)了一些問(wèn)題,現(xiàn)總結(jié)出來(lái)與大家一下。希望大家在使用LoadRunner 時(shí)不僅僅停在只是錄制/,而全面的編程技術(shù),解決復(fù)雜場(chǎng)景。本次測(cè)試中碰到是這樣的,在消息的傳送過(guò)程中遇到了 DEC 加密的過(guò)程,LoadRunner 錄制到的全是加密的消息,比如我錄制了某一個(gè)用戶的登陸,發(fā)送消息,退出,但由于是加密的,只能單個(gè)用戶使用但如果并發(fā)多少個(gè)用戶就存在很多問(wèn)題,最直接的一個(gè)問(wèn)題就是用戶名是加密的,是加密的,當(dāng)然你可以說(shuō)讓程序那里注掉加

2、密的代碼進(jìn)行明碼的測(cè)試,當(dāng)然也是一種辦法。但程序組提出了要使用更真實(shí)的方法來(lái)模擬,這時(shí)就必需使用下面介紹的方法。一開(kāi)始是直接把 API 移植到 LoadRunner 中來(lái),不過(guò)由于加密算法異常復(fù)雜,有幾層循環(huán),而是解釋執(zhí)行的,進(jìn)行一次加密運(yùn)算可能需要好幾分鐘,當(dāng)然在里可以把本身運(yùn)行的時(shí)間去掉,但這樣做顯然沒(méi)有直接調(diào)用 DLL 來(lái)的效率高。由于程序組比較忙,所以無(wú)法提供 DLL 給測(cè)試,所以測(cè)試組完成了 DLL的編寫(xiě),并在LoadRunner 中調(diào)用成功,高效的完成了用戶信息加密,參數(shù)關(guān)聯(lián),成功的完成了測(cè)試。動(dòng)態(tài)庫(kù)的編寫(xiě)在 Visual C+6.0 開(kāi)發(fā)環(huán)境下,打開(kāi) FileNewProject

3、 選項(xiàng),可以選擇 Win32 Dynamic-Link Library 建立一個(gè)空的 DLL 工程。Win32 Dynamic-Link Library 方式創(chuàng)建-MFC DLL 動(dòng)態(tài)庫(kù)每一個(gè) DLL 必須有一個(gè)用C 編寫(xiě)的應(yīng)用程序一樣,必須有一個(gè)WAIN 函數(shù)一樣點(diǎn),這就象在-MFC DLL 中DllMain 是一個(gè)缺省的函數(shù),你不需要編寫(xiě)自己的 DLL函數(shù),用這個(gè)缺省的外的內(nèi)存或資源函數(shù)就能使動(dòng)態(tài)庫(kù)被調(diào)用時(shí)得到正確的初始化。如果應(yīng)用程序的 DLL 需要分時(shí),或者說(shuō)需要對(duì)每個(gè)進(jìn)程或線程初始化和清除操作時(shí),需要在相應(yīng)的 DLL 工程的.CPP 文件中對(duì) DllMain()函數(shù)按照下面的格式書(shū)寫(xiě)

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:參數(shù)中,hMoudle 是動(dòng)態(tài)庫(kù)被調(diào)用時(shí)所傳遞來(lái)的一個(gè)指向自己的句柄(實(shí)際上,它是指向_DGROUP 段的一個(gè)選擇符);

5、ul_reason_for_call 是一個(gè)說(shuō)明動(dòng)態(tài)庫(kù)被調(diào)原因的標(biāo)志,當(dāng)進(jìn)程或線程裝入或卸載動(dòng)態(tài)庫(kù)的時(shí)候,操作系統(tǒng)調(diào)用函數(shù),并說(shuō)明動(dòng)態(tài) 庫(kù)被調(diào)用的原因,它所有的可能值為: DLL_PRODLL_PROS_ATTACH:進(jìn) 程 被 調(diào) 用 、 DLL_THREAD_ATTACH:線 程 被 調(diào) 用 、S_DETACH: 進(jìn)程被停止、DLL_THREAD_DETACH: 線程被停止;lp為保留參數(shù)到此為止,DLL 的函數(shù)或變量了。函數(shù)已經(jīng)寫(xiě)了,剩下部分的實(shí)現(xiàn)也不難,你可以在 DLL 工程中加入你所想要輸出的已經(jīng)知道 DLL 是包含若干個(gè)函數(shù)的庫(kù)文件,應(yīng)用程序使用 DLL 中的函數(shù)之前,應(yīng)該先導(dǎo)出這

6、些函數(shù)以便供給應(yīng)用程序使用。要導(dǎo)出這些函數(shù)有兩種方法,一是在定義函數(shù)時(shí)使用導(dǎo)出關(guān)鍵字_declspec(dllexport),另外法是在創(chuàng)建 DLL 文件時(shí)使用模塊定義文件.Def。需要讀者注意的是在使用第法的時(shí)候,不能使用 DEF 文件。下面通過(guò)兩個(gè)例子來(lái)說(shuō)明如何使用這兩種方法創(chuàng)建 DLL 文件。1)使用導(dǎo)出函數(shù)關(guān)鍵字_declspec(dllexport)創(chuàng)建 MyDll.dll,該動(dòng)態(tài)庫(kù)中有兩個(gè)函數(shù),分別用來(lái)實(shí)現(xiàn)得到兩個(gè)數(shù)的最大和最小數(shù)。在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、大小的函數(shù)代替了我要實(shí)現(xiàn)的函數(shù)desinit(a,b)if(a=b)return a; elsereturn b;desdone(a,b)if(a=b)return b; elsereturn a;該動(dòng)態(tài)庫(kù)編譯成功后,打開(kāi) MyDll 工程中的 debug 目錄,可以看到 MyDll.dll、MyDll.lib 兩個(gè)文件。LIB 文件中包含 DLL 文件名和 DLL 文件中的函數(shù)名等,該LIB 文件只是對(duì)應(yīng)該 DLL 文件的映像文件,與 DLL 文件中,LIB 文件的長(zhǎng)度要小的多,在進(jìn)行隱式DLL 時(shí)要用到它。讀者可能已經(jīng)注意到在MyDll h 中有關(guān)鍵字extern C,它可以使其他編程語(yǔ)言

9、你編寫(xiě)的 DLL 中的函數(shù)。LoadRunner 調(diào)用動(dòng)態(tài)庫(kù)上面完成動(dòng)態(tài)庫(kù)開(kāi)發(fā)后,下面就介紹動(dòng)態(tài)庫(kù)如何被LoadRunner 進(jìn)行調(diào)用,其實(shí)也是很簡(jiǎn)單的。在LoadRunner 中的 DLL 調(diào)用有局部調(diào)用與全局調(diào)用,下面介紹局部調(diào)用。首先 編譯的 DLL 放在路徑下面,這里是 MyDll.dll,MyDll.lib. 然后在 Action 中使用lr_load_dll(MYDll.dll),此函數(shù)可以把 DLL 加載進(jìn)來(lái),讓你調(diào)用 DLL 里面的函數(shù),而 DLL 中的運(yùn)算是編譯級(jí)的,所以效率極高,代碼樣例如下:#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(比較的結(jié)果為%d,nRet); return 0;運(yùn)行結(jié)果比較的結(jié)果為 8全局的動(dòng)態(tài)庫(kù)的調(diào)用則需要修改 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 中隨意的調(diào)用程序員寫(xiě)的 API 函數(shù),進(jìn)行一些復(fù)雜的數(shù)據(jù)加密,準(zhǔn)備的一些操作,進(jìn)行復(fù)雜的測(cè)試。同時(shí)如果你覺(jué)的有大量高復(fù)雜的運(yùn)算也可以放在 DLL 中進(jìn)行封裝,以提高效率LoadRunner 下 DLL 的調(diào)用點(diǎn)擊數(shù):21 更新時(shí)間:2007 年 03 月 18 日作者:本站編輯來(lái)源:互聯(lián)網(wǎng)場(chǎng)景介紹最近在做類似于的通信工具的性能測(cè)試時(shí)發(fā)現(xiàn)了一些問(wèn)題,現(xiàn)總結(jié)出來(lái)與大家一下。希望大家在使用LoadRunner 時(shí)不僅僅停在只是錄制/,而全面的編程技術(shù),解決復(fù)雜場(chǎng)景。本次測(cè)試中碰到是這樣的,在消息的傳送過(guò)程中遇到了 DEC 加密的過(guò)程,LoadRunner

13、錄制到的全是加密的消息,比如我錄制了某一個(gè)用戶的登陸,發(fā)送消息,退出,但由于是加密的,只能單個(gè)用戶使用但如果并發(fā)多少個(gè)用戶就存在很多問(wèn)題,最直接的一個(gè)問(wèn)題就是用戶名是加密的,是加密的,當(dāng)然你可以說(shuō)讓程序那里注掉加密的代碼進(jìn)行明碼的測(cè)試,當(dāng)然也是一種辦法。但程序組提出了要使用更真實(shí)的方法來(lái)模擬,這時(shí)就必需使用下面介紹的方法。一開(kāi)始是直接把 API 移植到 LoadRunner 中來(lái),不過(guò)由于加密算法異常復(fù)雜,有幾層循環(huán),而是解釋執(zhí)行的,進(jìn)行一次加密運(yùn)算可能需要好幾分鐘,當(dāng)然在里可以把本身運(yùn)行的時(shí)間去掉,但這樣做顯然沒(méi)有直接調(diào)用 DLL 來(lái)的效率高。由于程序組比較忙,所以無(wú)法提供 DLL 給測(cè)試,

14、所以測(cè)試組完成了 DLL的編寫(xiě),并在LoadRunner 中調(diào)用成功,高效的完成了用戶信息加密,參數(shù)關(guān)聯(lián),成功的完成了測(cè)試。動(dòng)態(tài)庫(kù)的編寫(xiě)在 Visual C+6.0 開(kāi)發(fā)環(huán)境下,打開(kāi) FileNewProject 選項(xiàng),可以選擇 Win32 Dynamic-Link Library 建立一個(gè)空的 DLL 工程。Win32 Dynamic-Link Library 方式創(chuàng)建-MFC DLL 動(dòng)態(tài)庫(kù)每一個(gè) DLL 必須有一個(gè)點(diǎn),這就象用C 編寫(xiě)的應(yīng)用程序一樣,必須有一個(gè)WAIN 函數(shù)一樣在-MFC DLL 中DllMain 是一個(gè)缺省的函數(shù),你不需要編寫(xiě)自己的 DLL函數(shù),用這個(gè)缺省的函數(shù)就能使動(dòng)

15、態(tài)庫(kù)被調(diào)用時(shí)得到正確的初始化。如果應(yīng)用程序的 DLL 需要分外的內(nèi)存或資源時(shí),或者說(shuō)需要對(duì)每個(gè)進(jìn)程或線程初始化和清除操作時(shí),需要在相應(yīng)的 DLL 工程的.CPP 文件中對(duì) DllMain()函數(shù)按照下面的格式書(shū)寫(xiě)。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:參數(shù)中,hMoudle 是動(dòng)態(tài)庫(kù)被調(diào)用時(shí)所傳遞來(lái)的一個(gè)指向自己的句柄(實(shí)際上,它是指向_DGROUP 段的一個(gè)選擇符);ul_reason_for_call 是一個(gè)說(shuō)明動(dòng)態(tài)庫(kù)被調(diào)原因的標(biāo)志,當(dāng)進(jìn)程或線程裝入或卸載動(dòng)態(tài)庫(kù)的時(shí)候,操作系統(tǒng)調(diào)用函數(shù),并說(shuō)明動(dòng)態(tài) 庫(kù)被調(diào)用的原因,它所有的可能值為: DLL_PRODLL_PROS_ATTACH:進(jìn) 程 被 調(diào) 用 、 DLL_THREAD_ATTACH:線 程 被 調(diào) 用 、S_DETACH: 進(jìn)程被停止、DLL_THREAD_DETACH: 線程被停止;lp為

17、保留參數(shù)到此為止,DLL 的函數(shù)或變量了。函數(shù)已經(jīng)寫(xiě)了,剩下部分的實(shí)現(xiàn)也不難,你可以在 DLL 工程中加入你所想要輸出的已經(jīng)知道 DLL 是包含若干個(gè)函數(shù)的庫(kù)文件,應(yīng)用程序使用 DLL 中的函數(shù)之前,應(yīng)該先導(dǎo)出這些函數(shù)以便供給應(yīng)用程序使用。要導(dǎo)出這些函數(shù)有兩種方法,一是在定義函數(shù)時(shí)使用導(dǎo)出關(guān)鍵字_declspec(dllexport),另外法是在創(chuàng)建 DLL 文件時(shí)使用模塊定義文件.Def。需要讀者注意的是在使用第法的時(shí)候,不能使用 DEF 文件。下面通過(guò)兩個(gè)例子來(lái)說(shuō)明如何使用這兩種方法創(chuàng)建 DLL 文件。1)使用導(dǎo)出函數(shù)關(guān)鍵字_declspec(dllexport)創(chuàng)建 MyDll.dll,

18、該動(dòng)態(tài)庫(kù)中有兩個(gè)函數(shù),分別用來(lái)實(shí)現(xiàn)得到兩個(gè)數(shù)的最大和最小數(shù)。在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/這里我用了比較大小的函數(shù)代替了我要實(shí)現(xiàn)的函數(shù)desinit(a,b)if(a=b)return a; elsereturn b;desdone(a,b)if(a=b)return b; elsereturn a;該動(dòng)態(tài)庫(kù)編譯成功后,打開(kāi) MyDll 工程中的 debug 目錄,可以看到 MyDll.dll、MyDll.lib 兩個(gè)文件。LIB 文件中包含 DLL 文件名和 DLL 文件中的函數(shù)名等,該

20、LIB 文件只是對(duì)應(yīng)該 DLL 文件的映像文件,與 DLL 文件中,LIB 文件的長(zhǎng)度要小的多,在進(jìn)行隱式DLL 時(shí)要用到它。讀者可能已經(jīng)注意到在MyDll h 中有關(guān)鍵字extern C,它可以使其他編程語(yǔ)言你編寫(xiě)的 DLL 中的函數(shù)。LoadRunner 調(diào)用動(dòng)態(tài)庫(kù)上面完成動(dòng)態(tài)庫(kù)開(kāi)發(fā)后,下面就介紹動(dòng)態(tài)庫(kù)如何被LoadRunner 進(jìn)行調(diào)用,其實(shí)也是很簡(jiǎn)單的。在LoadRunner 中的 DLL 調(diào)用有局部調(diào)用與全局調(diào)用,下面介紹局部調(diào)用。首先 編譯的 DLL 放在路徑下面,這里是 MyDll.dll,MyDll.lib. 然后在 Action 中使用lr_load_dll(MYDll.dll),此函數(shù)可以把 DLL 加載進(jìn)來(lái),讓你調(diào)用 DLL 里面的函數(shù),而 DLL 中的運(yùn)算是編譯級(jí)的,所以效率極高,代碼樣例如下:#include lrs h Action()/nRet = 6; char srckey129;memset(srckey, a,

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論