LoadRunner使用動態鏈接庫技術


 

什么是動態庫?

  動態庫一般又叫動態鏈接庫英文為DLL,是Dynamic Link Library 的縮寫形式,DLL是一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接並與使用它們的進程分開存儲的函數。DLL 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個DLL 副本的內容。DLL 是一個包含可由多個程序同時使用的代碼和數據的庫。

 

  我們都知道,我們在編程時會調外部庫函數,因為程序的中許多代碼都是可以復用的,調用外部函數就大大的簡化了我們的工作量。代碼編寫完成后,需要編譯才能運行,在編譯的過程中,會把程序中調用的函數庫加載到內存里。這就是靜態鏈接方式。

  假如有一個函數庫,A程序要使用它,然后把函數庫的內容全部加載自己的程序中。B程序也要使用這個函數庫,B程序也把函數庫的內容也全都加載到自己的程序中;這樣同樣一個東西重復出現在多個程序中,就會造成是種內存的浪費。所以,我們把被多個程序調用的函數放在一個公其的地方,就這一份。誰需要誰調用。這就是動態鏈接方式。

 

Loadrunner為什么要使用動態庫? 

  DLL最重要的一個特點就擴展應用程序的特性。 再強大的工具也有不是萬能的,通過調用動態庫的方法極大地增強loadrunner的功能。當你在用loadrunner對於某些需求的測試感鞭長莫及時,這也是一種思路或方式。

 

使用動態庫方法                                                                       

 

創建一個動態庫

  動態連接庫支持所有windows下的編程。 VBDephiC#C/C++等。我們這里用VC++進行演示。

下面通過VC++ 6.0中文版來創建一個動態函數。

打開VC++ 6.0,新建一個工程,這里先擇工程類型為“Win32 Dynamic-link Library”,起一個工程名稱,並選擇好存方位置。

 

 

點擊“確定”按鈕,會詢問你希望創建什么類型的DLL

我們選擇第三項一個可以導出某些符號的DLL工程(D

點擊確定,系統會給我們創建兩個文件MyDLL.hMyDLL.cpp

 

分別對兩個文件進行編寫代碼

MyDLL.h

extern "C" MYDLL_API int lr_demo(int,int);

因為我們的loadrunner VuGen是一個C語言的解釋器與編譯器,只支持純的C語言,不支持C++ ,所以,我們要在前面加“extern "C"”將函數轉義成純的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中調用動態庫

  下面打開我們的loadrunner VuGen ,寫入下面代碼。

Vuser_init 部分

vuser_init()
{

    int ret;

    ret=lr_load_dll("C:\\Users\\Administrator\\Desktop\\loadrunner\\MyDLL\\Debug\\MyDLL.dll");   //調用我們本地的函數文件,因為單斜杠(\)會被C語言轉義,所以要用兩個斜杠(\\)來表示路徑。

    if(ret!=0) return -1;

    return 0;
}

 Action部分

Action()
{

    int sum;

    sum=lr_demo(1,2);   //lr_demo 與我們vc++中的函數名一致

    lr_output_message("this sume is :%d\n",sum);  //輸出運算結果

    return 0;
}

運行結果:

Starting iteration 1.
Starting action Action.
Action.c(8): this sume is :3
Ending action Action.
Ending iteration 1. 

 

  從上面的代碼看出。我們的loadrunner中並沒有對數據進行計算,真正計算的代碼是調用DLL函數庫的代碼。這樣就大大增強了loadrunner的能力,而這種方式也使我們測試結果更加准確。雖然上面代碼簡單。但這無疑是一種擴展思路。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM