Loadrunner之腳本篇——事務函數


1.事務的開始和結束名稱需要相同

lr_start_transaction(“transaction_name”);

…//事務處理

lr_end_transaction(“transaction_name”,LR_AUTO);

 

2.事務和子事務

在VuGen中可以通過事務來完成一組操作的響應時間監控,如果想監控某一個事務中某一步操作的響應時間,就要使用子事務來完成。當然也可以使用事務嵌套

lr_start_sub_transaction(“子事務名”, “父事務名”);

lr_end_sub_transaction(“子事務名”, 子事務狀態);

注意:子事務和父事務很像,但是父事務支持的很多函數在子事務中都無法實現,所以應酌情考慮。

 

例:做一個登錄的事務,同時把打開登錄頁面和登錄操作都做成一個事務,這樣就可以得到三個事務的時間:打開頁面和登錄操作及整個操作的時間。

Action()

{

    //開始登錄事務

    lr_start_transaction("login");

   

    //打開登錄界面

    lr_start_sub_transaction("loginpage", "login");   

    web_url("WebTours",

        "URL=http://127.0.0.1:1080/WebTours/",

        "Resource=0",

        "RecContentType=text/html",

        "Referer=",

        "Snapshot=t16.inf",

        "Mode=HTML",

        LAST);

    lr_end_sub_transaction("loginpage", LR_AUTO);

    lr_think_time(4);

 

    //提交登錄頁面的表單

    lr_start_sub_transaction("submit", "login");

    web_submit_form("login.pl",

        "Snapshot=t17.inf",

        ITEMDATA,

        "Name=username", "Value=jojo", ENDITEM,

        "Name=password", "Value=bean", ENDITEM,

        "Name=login.x", "Value=0", ENDITEM,

        "Name=login.y", "Value=0", ENDITEM,

        LAST);

    lr_end_sub_transaction("submit", LR_AUTO);

 

    lr_end_transaction("login", LR_AUTO);

}

 

運行結果:

Loadrunner <wbr>腳本優化-事務函數簡介

 

3.事務狀態

在默認情況下使用LR_AUTO來作為事務狀態,對於一個事務有以下4個狀態可以選擇。

1) LR_AUTO

指事務的狀態由系統自動根據默認規則來判斷,結果為PASS/FAIL/STOP

LR_AUTO也是根據服務器的返回狀態信息來決定事務是以LR_PASS狀態通過還是以LR_FAIL狀態結束,只要服務器返回頁面,那么事務就會認為請求成功發出去了,服務器看懂了請求也返回了內容,自然事務就是PASS狀態。

這樣由於事務的自動判斷,導致雖然操作失敗的,但是得到了一個響應時間,並且這個響應時間又沒正確反映出做這件事情的真正時間,最終影響測試結果。添加檢測函數有時候可以解決這個問題

 

例:判斷是否登錄成功(以lr自帶web站點為例)

Loadrunner <wbr>腳本優化-事務函數簡介

Action2()

{

    lr_start_transaction("login");

 

    //打開登錄界面

    web_url("WebTours",

        "URL=http://127.0.0.1:1080/WebTours/",

        "Resource=0",

        "RecContentType=text/html",

        "Referer=",

        "Snapshot=t16.inf",

        "Mode=HTML",

        LAST);

 

    lr_think_time(4);

 

    //注意函數的位置

    // jojo1為要查找的文本(實際文本如上圖,jojo,僅在登錄后才出現,這里為了演示故意找不存在的文本)

web_reg_find("Search=Body", "SaveCount=login_times", "Text=jojo1", LAST);

 

    //提交登錄頁面的表單

    web_submit_form("login.pl",

        "Snapshot=t17.inf",

        ITEMDATA,

        "Name=username", "Value=jojo", ENDITEM,

        "Name=password", "Value=bean", ENDITEM,

        "Name=login.x", "Value=0", ENDITEM,

        "Name=login.y", "Value=0", ENDITEM,

        LAST);

 

    lr_think_time(4);

   

    if(atoi(lr_eval_string("{login_times}")) >= 1) {//找到“jojo”,說明登錄成功

        lr_end_transaction("login", LR_PASS);}

    else{  //未找到,說明登錄失敗

    lr_end_transaction("login", LR_FAIL);} 

    return 0;

}

運行結果:

Loadrunner <wbr>腳本優化-事務函數簡介
 

2) LR_PASS

指事務是以PASS狀態通過的,說明改事務正確地完成了,並且記錄下對應的時間,這個時間就是指做這件事情所需要消耗的時間。

 

3) LR_FAIL

LR_FAIL是指事務以FAIL狀態結束,該事務是一個失敗的事務,沒有完成事務中腳本應該達到的效果,得到的時間不是正確操作的時間,這個時間在后期的統計中將被獨立統計。

 

4) LR_STOP

LR_STOP將事務以STOP狀態停止。

 

說明:

事務的PASS和FAIL狀態會在場景的對應計數器中記錄,包括通過的次數和事務的響應時間,方便后期分析改事務的吞吐量以及響應時間的變化情況

 

4.事務相關的函數

//獲得對應事務達到該函數運行位置時持續的時間,返回double類型

lr_get_transaction_duration(“事務名”);

 

//獲得對應事務達到該函數運行位置時的wasted時間,返回double類型。

lr_get_transaction_wasted_time(“事務名”);

 

//為一個事務添加wasted時間,無返回值

lr_wasted_time(毫秒)

 

 

//將一個事務暫停,該函數后的操作都不會被記錄事務時間

lr_stop_transaction(“事務名”);

 

Action2()

{

    double duration  = 0;

    double wastedtime = 0;

 

    lr_start_transaction("login");

    //打開登錄界面

    web_url("WebTours",

        "URL=http://127.0.0.1:1080/WebTours/",

        "Resource=0",

        "RecContentType=text/html",

        "Referer=",

        "Snapshot=t16.inf",

        "Mode=HTML",

        LAST);

 

    lr_think_time(4);

 

    //事務達到該函數運行位置時持續的時間

    duration = lr_get_transaction_duration("login");

    lr_output_message("duration %f", duration);

 

    //事務達到該函數運行位置時浪費的時間

    wastedtime = lr_get_transaction_wasted_time("login");

    lr_output_message("wastedtime %f", wastedtime);

 

    //為事務添加一個浪費時間 5s//該浪費時間無法直接通過lr_get_transaction_wasted_time獲得

    lr_wasted_time(5);

    wastedtime = lr_get_transaction_wasted_time("login");

  lr_output_message("wastedtime %f", wastedtime);

 

    //暫停事務

    lr_stop_transaction("login");

 

    //注意函數的位置

    web_reg_find("Search=Body", "SaveCount=login_times", "Text=jojo", LAST);

 

    //提交登錄頁面的表單

    web_submit_form("login.pl",

        "Snapshot=t17.inf",

        ITEMDATA,

        "Name=username", "Value=jojo", ENDITEM,

        "Name=password", "Value=bean", ENDITEM,

        "Name=login.x", "Value=0", ENDITEM,

        "Name=login.y", "Value=0", ENDITEM,

        LAST);

 

    lr_think_time(4);

 

    //事務達到該函數運行位置時浪費的時間

    wastedtime = lr_get_transaction_wasted_time("login");

    lr_output_message("wastedtime %f", wastedtime);

 

    if(atoi(lr_eval_string("{login_times}")) >= 1)

        lr_end_transaction("login", LR_PASS);

    else

        lr_end_transaction("login", LR_FAIL);

  

    return 0;

}

Loadrunner <wbr>腳本優化-事務函數簡介

 

注意:通過代碼stop事務后可以重新通過lr_start_transaction函數恢復被暫停的事務

 

5.包含“資源下載”的事務處理

一般情況都可以十分簡單地獲得請求的響應時間,但是對於下載操作來說就並不是那么方便了,這個時候需要利用一個web_get_int_property()函數來解決。

Action()

{

int i;

lr_start_transaction(“download”);

web_url(“LoadRunner”,”RUL=http://127.0.0.1/loadrunner.iso”,LAST); //下載操作請求

i=web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

if(i>5000) //當下載的文件大小大於5000個字節時認為下載成功,否則失敗。

lr_end_transaction(“download”,LR_PASS);

else

lr_end_transaction(“download”,LR_FAIL);

}

一般來說,對於下載操作的性能測試集中在需要多少時間彈出下載對話框,而后面的內容其實屬於網絡帶寬的問題了,另一個方面現在很少使用IE進行直接下載,而采用迅雷一類的p2p下載工具,所以很少考慮具體下載文件操作對網絡和服務器讀寫操作的影響。


免責聲明!

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



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