LoadRunner使用動態(tài)鏈接庫技術(shù)
什么是動態(tài)庫?
動態(tài)庫一般又叫動態(tài)鏈接庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的庫,DLL不是可執(zhí)行文件。動態(tài)鏈接提供了一種方法,使進程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。函數(shù)的可執(zhí)行代碼位于一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接并與使用它們的進程分開存儲的函數(shù)。DLL 還有助于共享數(shù)據(jù)和資源。多個應(yīng)用程序可同時訪問內(nèi)存中單個DLL 副本的內(nèi)容。DLL 是一個包含可由多個程序同時使用的代碼和數(shù)據(jù)的庫。
我們都知道,我們在編程時會調(diào)外部庫函數(shù),因為程序的中許多代碼都是可以復(fù)用的,調(diào)用外部函數(shù)就大大的簡化了我們的工作量。代碼編寫完成后,需要編譯才能運行,在編譯的過程中,會把程序中調(diào)用的函數(shù)庫加載到內(nèi)存里。這就是靜態(tài)鏈接方式。
假如有一個函數(shù)庫,A程序要使用它,然后把函數(shù)庫的內(nèi)容全部加載自己的程序中。B程序也要使用這個函數(shù)庫,B程序也把函數(shù)庫的內(nèi)容也全都加載到自己的程序中;這樣同樣一個東西重復(fù)出現(xiàn)在多個程序中,就會造成是種內(nèi)存的浪費。所以,我們把被多個程序調(diào)用的函數(shù)放在一個公其的地方,就這一份。誰需要誰調(diào)用。這就是動態(tài)鏈接方式。
Loadrunner為什么要使用動態(tài)庫?
DLL最重要的一個特點就擴展應(yīng)用程序的特性。 再強大的工具也有不是萬能的,通過調(diào)用動態(tài)庫的方法極大地增強loadrunner的功能。當(dāng)你在用loadrunner對于某些需求的測試感鞭長莫及時,這也是一種思路或方式。
創(chuàng)建一個動態(tài)庫
動態(tài)連接庫支持所有windows下的編程。 VB、Dephi、C#、C/C++等。我們這里用VC++進行演示。
下面通過VC++ 6.0中文版來創(chuàng)建一個動態(tài)函數(shù)。
打開VC++ 6.0,新建一個工程,這里先擇工程類型為“Win32 Dynamic-link Library”,起一個工程名稱,并選擇好存方位置。
點擊“確定”按鈕,會詢問你希望創(chuàng)建什么類型的DLL?
我們選擇第三項“一個可以導(dǎo)出某些符號的DLL工程(D)”
點擊確定,系統(tǒng)會給我們創(chuàng)建兩個文件MyDLL.h和MyDLL.cpp
分別對兩個文件進行編寫代碼
MyDLL.h
extern "C" MYDLL_API int lr_demo(int,int);
因為我們的loadrunner 的VuGen是一個C語言的解釋器與編譯器,只支持純的C語言,不支持C++ ,所以,我們要在前面加“extern "C"”將函數(shù)轉(zhuǎn)義成純的C語言。
MyDLL.cpp
MYDLL_API int lr_demo(int x ,int y) { int sum; sum = x + y; return sum; }
選擇“工具”菜單---組建[MyDLL.dll] 或直接按F7程序進行編譯。
編譯完成后,提示沒有錯誤與警告,說明我們成功了!
--------------------Configuration: MyDLL - Win32 Debug-------------------- Compiling... MyDLL.cpp Linking... Creating library Debug/MyDLL.lib and object Debug/MyDLL.exp MyDLL.dll - 0 error(s), 0 warning(s)
在loadrunnre中調(diào)用動態(tài)庫
下面打開我們的loadrunner 的VuGen ,寫入下面代碼。
Vuser_init 部分
vuser_init() { int ret; ret=lr_load_dll("C:\\Users\\Administrator\\Desktop\\loadrunner\\MyDLL\\Debug\\MyDLL.dll"); //調(diào)用我們本地的函數(shù)文件,因為單斜杠(\)會被C語言轉(zhuǎn)義,所以要用兩個斜杠(\\)來表示路徑。 if(ret!=0) return -1; return 0; }
Action部分
Action() { int sum; sum=lr_demo(1,2); //lr_demo 與我們vc++中的函數(shù)名一致 lr_output_message("this sume is :%d\n",sum); //輸出運算結(jié)果 return 0; }
運行結(jié)果:
Starting iteration 1. Starting action Action. Action.c(8): this sume is :3 Ending action Action. Ending iteration 1.
從上面的代碼看出。我們的loadrunner中并沒有對數(shù)據(jù)進行計算,真正計算的代碼是調(diào)用DLL函數(shù)庫的代碼。這樣就大大增強了loadrunner的能力,而這種方式也使我們測試結(jié)果更加準(zhǔn)確。雖然上面代碼簡單。但這無疑是一種擴展思路。
本文轉(zhuǎn)自(cnblogs.com)
【年末回饋最后一波,全場六折起,豪禮升級,還送公開課入場券,趕緊搶!】
活動時間:12月1日-12月31日