LoadRunner使用動(dòng)態(tài)鏈接庫技術(shù)
什么是動(dòng)態(tài)庫?
動(dòng)態(tài)庫一般又叫動(dòng)態(tài)鏈接庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL是一個(gè)包含可由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫,DLL不是可執(zhí)行文件。動(dòng)態(tài)鏈接提供了一種方法,使進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù)。函數(shù)的可執(zhí)行代碼位于一個(gè) DLL 中,該 DLL 包含一個(gè)或多個(gè)已被編譯、鏈接并與使用它們的進(jìn)程分開存儲(chǔ)的函數(shù)。DLL 還有助于共享數(shù)據(jù)和資源。多個(gè)應(yīng)用程序可同時(shí)訪問內(nèi)存中單個(gè)DLL 副本的內(nèi)容。DLL 是一個(gè)包含可由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫。
我們都知道,我們?cè)诰幊虝r(shí)會(huì)調(diào)外部庫函數(shù),因?yàn)槌绦虻闹性S多代碼都是可以復(fù)用的,調(diào)用外部函數(shù)就大大的簡(jiǎn)化了我們的工作量。代碼編寫完成后,需要編譯才能運(yùn)行,在編譯的過程中,會(huì)把程序中調(diào)用的函數(shù)庫加載到內(nèi)存里。這就是靜態(tài)鏈接方式。
假如有一個(gè)函數(shù)庫,A程序要使用它,然后把函數(shù)庫的內(nèi)容全部加載自己的程序中。B程序也要使用這個(gè)函數(shù)庫,B程序也把函數(shù)庫的內(nèi)容也全都加載到自己的程序中;這樣同樣一個(gè)東西重復(fù)出現(xiàn)在多個(gè)程序中,就會(huì)造成是種內(nèi)存的浪費(fèi)。所以,我們把被多個(gè)程序調(diào)用的函數(shù)放在一個(gè)公其的地方,就這一份。誰需要誰調(diào)用。這就是動(dòng)態(tài)鏈接方式。
Loadrunner為什么要使用動(dòng)態(tài)庫?
DLL最重要的一個(gè)特點(diǎn)就擴(kuò)展應(yīng)用程序的特性。 再強(qiáng)大的工具也有不是萬能的,通過調(diào)用動(dòng)態(tài)庫的方法極大地增強(qiáng)loadrunner的功能。當(dāng)你在用loadrunner對(duì)于某些需求的測(cè)試感鞭長(zhǎng)莫及時(shí),這也是一種思路或方式。
創(chuàng)建一個(gè)動(dòng)態(tài)庫
動(dòng)態(tài)連接庫支持所有windows下的編程。 VB、Dephi、C#、C/C++等。我們這里用VC++進(jìn)行演示。
下面通過VC++ 6.0中文版來創(chuàng)建一個(gè)動(dòng)態(tài)函數(shù)。
打開VC++ 6.0,新建一個(gè)工程,這里先擇工程類型為“Win32 Dynamic-link Library”,起一個(gè)工程名稱,并選擇好存方位置。
點(diǎn)擊“確定”按鈕,會(huì)詢問你希望創(chuàng)建什么類型的DLL?
我們選擇第三項(xiàng)“一個(gè)可以導(dǎo)出某些符號(hào)的DLL工程(D)”
點(diǎn)擊確定,系統(tǒng)會(huì)給我們創(chuàng)建兩個(gè)文件MyDLL.h和MyDLL.cpp
分別對(duì)兩個(gè)文件進(jìn)行編寫代碼
MyDLL.h
extern "C" MYDLL_API int lr_demo(int,int);
因?yàn)槲覀兊?span style="font-family:times new roman">loadrunner 的VuGen是一個(gè)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程序進(jìn)行編譯。
編譯完成后,提示沒有錯(cuò)誤與警告,說明我們成功了!
--------------------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)用動(dòng)態(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ù)文件,因?yàn)閱涡备埽╘)會(huì)被C語言轉(zhuǎn)義,所以要用兩個(gè)斜杠(\\)來表示路徑。 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); //輸出運(yùn)算結(jié)果 return 0; }
運(yùn)行結(jié)果:
Starting iteration 1. Starting action Action. Action.c(8): this sume is :3 Ending action Action. Ending iteration 1.
從上面的代碼看出。我們的loadrunner中并沒有對(duì)數(shù)據(jù)進(jìn)行計(jì)算,真正計(jì)算的代碼是調(diào)用DLL函數(shù)庫的代碼。這樣就大大增強(qiáng)了loadrunner的能力,而這種方式也使我們測(cè)試結(jié)果更加準(zhǔn)確。雖然上面代碼簡(jiǎn)單。但這無疑是一種擴(kuò)展思路。
本文轉(zhuǎn)自()
【年末回饋?zhàn)詈笠徊ǎ珗?chǎng)六折起,豪禮升級(jí),還送公開課入場(chǎng)券,趕緊搶!】
活動(dòng)時(shí)間:12月1日-12月31日