• <menu id="w2i4a"></menu>
  • logo LoadRunner 系列教程
    文檔首頁>>LoadRunner 系列教程>>LoadRunner使用動態(tài)鏈接庫技術(shù)

    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ù)的庫。

    動態(tài)庫創(chuàng)建

    我們都知道,我們在編程時會調(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對于某些需求的測試感鞭長莫及時,這也是一種思路或方式。

    慧都2016年終促銷

    創(chuàng)建一個動態(tài)庫

    動態(tài)連接庫支持所有windows下的編程。 VBDephi、C#、C/C++等。我們這里用VC++進行演示。

    下面通過VC++ 6.0中文版來創(chuàng)建一個動態(tài)函數(shù)。

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

    動態(tài)庫創(chuàng)建

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

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

    點擊確定,系統(tǒng)會給我們創(chuàng)建兩個文件MyDLL.hMyDLL.cpp

    動態(tài)庫創(chuàng)建

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

    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

    >>下載最新版LoadRunner試用


    【年末回饋最后一波,全場六折起,豪禮升級,還送公開課入場券,趕緊搶!】

    活動時間:12月1日-12月31日

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();