1. 程式人生 > >LoadRunner檢查點使用小結

LoadRunner檢查點使用小結

LR中檢查點有兩種:圖片和文字。

常用檢查點函式如下:

1)web_find()函式用於從 HTML 頁中搜索指定的文字字串;

2)web_reg_find()函式註冊一個請求,以在下一個操作函式(如 web_url)檢索到的HTML網頁上搜索指定的文字字串;

3)web_image_check()函式用於從HTML頁面中查詢指定的圖片;

4)web_global_verfication()屬於註冊函式,註冊一個在web頁面中搜索文字字串的請求,與web_reg_find只在下一個Action函式中執行搜尋不同的是它在之後所有的Action類函式中執行搜尋指定的文字字串;

下面分別介紹以上函式的用法:

1、web_find()函式引數舉例:

web_find("web_find","RighOf=a","LeftOf=b","What=name",LAST);

引數解釋:"web_find"定義該查詢函式的名稱;“LeftOf”和“RighOf=”用來定義查詢字元的左右邊界;“What=”定義查詢內容;

例如上述引數舉例中的意思就是在頁面中查詢左邊界為b,右邊界為a,內容為name的資訊;

使用該函式注意事項:該函式是在查詢頁面中的內容,所以要放在要查詢的內容的後面;該函式只能在基於HTML模式錄製的指令碼中進行查詢

注意事項:使用該函式時,要在Vuser->Run-Tme Settings中更改下設定

勾選Enable Image and text check

系統預設是不勾選該選項的。

2、web_reg_find()函式引數舉例:

web_reg_find("Search=Body","SaveCount=ddd","Test=aaa",LAST);

引數解釋: Search用來定義查詢範圍,SaveCount定義查詢計數變數名稱,該引數可以記錄在快取中查詢內容出現的次數,可以使用該值,來判斷要查詢的內容是否被找到;

例如上述引數舉例中的意思就是Body中查詢內容為aaa的資訊,並將出現次數記錄在變數ddd中;

【程式碼一:web_reg_find("Text=Payment Details",LAST);

程式碼思路:1.“Payment Details” 為你要檢查的文字;

2. 指令碼執行到此處,若在頁面上找到了這幾個字串,那指令碼繼續執行下去;若沒有找到,指令碼將在此報錯並且結束。】

【程式碼二:web_reg_find("Text=Payment Details", "SaveCount=para_count", LAST); //check 的函式

web_submit_form("reservations.pl_2", //要check的頁面的錄製時的程式碼

"Snapshot=t22.inf",

ITEMDATA,

"Name=outboundFlight", "Value=003;0;06/23/2007", ENDITEM,

"Name=reserveFlights.x", "Value=61", ENDITEM,

"Name=reserveFlights.y", "Value=2", ENDITEM,

LAST);

if (atoi(lr_eval_string("{para_count}"))>0) //驗證是否找到了頁面上的要檢查的字串

lr_output_message("we find the string!");

else

lr_output_message("sorry,don't find the string!");

程式碼思路:1.“Payment Details” 為你要檢查的文字;

2. 指令碼執行到此處,不管頁面上是否存在你要檢查的字串,指令碼都不會報錯,而是執行下去。

3. 此段程式碼將找到的你要檢查的字串的個數,存為一個引數。 然後在頁面程式碼的後面,通過檢查這個引數的值是否大於0,來判斷是否找到了你所要檢查的字串。】

【程式碼三:

A. web_reg_find("Text=Payment Detdils", "Fail=NotFound",LAST);或

B. web_reg_find("Text=Payment Detdils", "Fail=Found",LAST);

程式碼思路:

1.“Payment Details” 為你要檢查的文字;

2. 若是A程式碼:指令碼執行到此處,若沒有找到check的字串,指令碼將FAIL, 並且停止執行下去。反之,則一直執行下去。

3. 若是B程式碼:指令碼執行到此處,若找到check的字串,指令碼將FAIL, 並且停止執行下去。反之,則一直執行下去】

使用該函式注意事項:該函式是在快取中查詢相應的內容,所以要放在查詢內容之前;通常情況下寫在如下六個函式之前:Web_castom_request(); web_image(); web_link(); web_submit_data(); web_submit_form(); web_url();

使用技巧:在該函式的引數中有個“SaveCount”,該引數可以記錄在快取中查詢內容出現的次數,我們可以使用該值,來判斷要查詢的內容是否被找到,下面舉個例子來說明:(引用LR的幫助中的例子)

// Run the Web Tours sample

web_url("MercuryWebTours",

"URL=http://localhost/MercuryWebTours/",

"Resource=0",

"RecContentType=text/html",

"Referer=",

"Snapshot=t1.inf",

"Mode=HTML",

LAST);

// Set up check for successful login by looking for "Welcome"

web_reg_find("Text=Welcome",

"SaveCount=Welcome_Count",

LAST);

// Now log in

web_submit_form("login.pl",

"Snapshot=t2.inf",

ITEMDATA,

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

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

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

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

LAST);

// Check result

if (atoi(lr_eval_string("{Welcome_Count}")) > 0){ //判斷如果Welcome字串出現次數大於0

    lr_output_message("Log on successful."); }//在日誌中輸出Log on successful

else{ //如果出現次數小於等於

lr_error_message("Log on failed"); //在日誌中輸出Log on failed

return(0); }

我覺得這個方法非常有用,我們可以舉一反三,應用到我們實際的專案

注:在錄製過程中新增的檢查點,用到的函式是web_reg_find(),且引數只有“Text=”

3、web_image_check()函式引數說明:

web_image_check("web_image_check","Alt=","Src=",LAST);

引數解釋:“Alt”和“Src”的值直接取該圖片在網頁原始碼中相應引數的值;

注意事項:使用該函式時,要在Vuser->Run-Tme Settings中勾選Enable Image and text check,具體操作請看web_find()中的注意事項。

經過測試,該函式用到查詢內容前面或後面,都不影響查詢結果。

舉例說明(指令碼)

該指令碼記錄的是登陸系統後退出的操作,在指令碼中用到atoi()函式和lr_eval_string(”{SaveCount定義的變數}”)兩個函式結合使用,判斷查詢內容出現的次數是否大於0,若大於0,則輸入登入成功的資訊。

vuser_init()

{

    web_url("xjcost",

    "URL=http://gczj-server8:9205/xjcost/",

    "Resource=0",

    "RecContentType=text/html",

    "Referer=",

    "Snapshot=t1.inf",

    "Mode=HTML",

    EXTRARES,

    "Url=jsp/images/index/index.swf", ENDITEM,

    "Url=jsp/images/index/xxfb2.gif", ENDITEM,

     "Url=jsp/images/index/ywpt2.gif", ENDITEM,

     LAST);

     web_url("userAction.struts",

     "URL=http://gczj-server8:9205/xjcost/userAction.struts?actionType=reLogin",

     "Resource=0",

     "RecContentType=text/html",

     "Referer=",

    "Snapshot=t2.inf",

     "Mode=HTML",

     LAST);

    return 0;

}

Action()

{

    lr_start_transaction("Log_on");

    lr_rendezvous("Log_on");

     web_add_cookie("userAccount=admin; DOMAIN=gczj-server8");

    web_reg_find("Text=歡迎您",

    "SaveCount=歡迎您_Count",

     LAST);

    web_image_check("web_image_check",

    "Src=/xjcost/jsp/images/index1/edit_01.gif",

     LAST);

    web_submit_data("userLogin.struts",

    "Action=http://gczj-server8:9205/xjcost/userLogin.struts?actionType=userLogin",

    "Method=POST",

    "RecContentType=text/html",

    "Referer=http://gczj-server8:9205/xjcost/userAction.struts?actionType=reLogin",

    "Snapshot=t3.inf",

    "Mode=HTML",

     ITEMDATA,

    "Name=userAccount", "Value=admin",     ENDITEM,

    "Name=pwd", "Value=1111", ENDITEM,

    EXTRARES,

    "Url=jsp/images/index1/edit_01a.gif", "Referer=http://gczj-server8:9205/xjcost/userLogin.struts?actionType=userLogin",     ENDITEM,

    LAST);

    web_find("web_find",

    "What=歡迎您",

    LAST);

    lr_end_transaction("Log_on",LR_AUTO);

    //檢查是否登入成功

     //如果“歡迎您”這個字元出現次數大於0,輸出“Log on successfully!”

    if(atoi(lr_eval_string("{歡迎您_Count}"))>0)

     lr_output_message("Log on successfully!");

     else

    lr_error_message("Log on failed!");

    return 0;

    return 0;

}

//atoi()函式的作用是將一個ASCII字串轉換為整型

//lr_eval_string()函式作用是取得引數值,將字串變數中的引數值替換為當前的引數值並將這個字串返回

vuser_end()

{

    lr_think_time(4);

    web_url("userAction.struts_2",

    "URL=http://gczj-server8:9205/xjcost/userAction.struts?actionType=reLogin",

    "Resource=0",

    "RecContentType=text/html",

    "Referer=",

    "Snapshot=t4.inf",

"Mode=HTML",

    LAST);

    return 0;

}

Global.h:

#ifndef _GLOBALS_H

#define _GLOBALS_H

//--------------------------------------------------------------------

// Include Files

#include "lrun.h"

#include "web_api.h"

#include "lrw_custom_body.h"

//--------------------------------------------------------------------

// Global Variables

#endif // _GLOBALS_H

Replay Log常見資訊說明

1、web_find()和web_image_check()函式的日誌資訊(這兩個日誌資訊實際上是一樣的,只是輸出的函式名和引數不同)

1)資訊1Action.c(22): Verification checks not enabled. web_image_check is skipped. See the 'Run-time settings/Preferences/Checks'

[MsgId: MMSG-27197]

Action.c(22): web_image_check was successful

[MsgId: MMSG-26392]

出現該資訊,說明沒有勾選Enable Image and text check

2)資訊2Action.c(22): "web_image_check" succeeded (1 occurrence(s) found. Alt="", Src="/xjcost/jsp/images/index1/edit_01.gif")

[MsgId: MMSG-27192]

Action.c(22): web_image_check was successful

[MsgId: MMSG-26392]

出現該資訊,說明檢查點設定成功,且已經查詢到資訊

3)資訊3Action.c(22): Error -27191: "web_image_check" failed (0 occurrence(s) found. Alt="", Src="/xjcost/jsp/images/index1/edit_1.gif")

[MsgId: MERR-27191]

Action.c(22): web_image_check highest severity level was "ERROR"

[MsgId: MMSG-26391]

出現該資訊,說明要查詢的內容沒有找到。這時依次嘗試以下操作:

(1)檢查引數的資訊是否寫錯;

(2)如果是web_find(),檢查函式的位置是否在要查詢內容的後面;

(3)如果是web_image_check(),檢視該圖片的原始碼,看其是否是這個頁面上的圖片,很可能是圖片選擇錯誤,即所選圖片不屬於該頁面。

2、web_reg_find()函式的日誌資訊

1)資訊1Action.c(15): Registering web_reg_find was successful

[MsgId: MMSG-26390]

出現該資訊,說明內容已查詢到

2)資訊2Action.c(27): Error -26366: "Text=ABC" not found for web_reg_find

[MsgId: MERR-26366]

Action.c(27): web_submit_data("userLogin.struts") highest severity level was "ERROR", 18364 body bytes, 918 header bytes, 13 chunking overhead bytes

[MsgId: MMSG-26387]

該資訊在replay log頁面是紅色顯示的,說明沒有找到內容,出現此情況嘗試以下兩個操作:

(1)引數的資訊是否正確;

(2)檢視該函式是否在查詢內容的前面。

插入函式的方法:

1、 手工寫入,在需要插入函式的位置手工寫入該函式;

2、 游標停留在要插入函式的位置,在INSERT選單中,選擇new step,在列表中選擇或查詢要插入的函式,根據提示填寫必要的引數;

3、 在tree view模式下,在樹狀選單中選中要插入函式的位置,右鍵,選擇insert after或insert before,根據提示填寫必要的引數;

總結:

1、 這兩個函式函式型別不同,WEB_FIND是普通函式,WEB_REG_FIND是註冊函式;

2、 WEB_FIND使用時必須開啟內容檢查選項,而WEB_REG_FIND則不沒有此限制;

3、 WEB_FIND只能用在基於HTML模式錄製的指令碼中,而WEB_REG_FIND沒有此限制;

4、 WEB_FIND是在返回的頁面中進行內容查詢,WEB_REG_FIND是在快取中進行查詢;

5、 WEB_FIND在執行效率上不如WEB_REG_FIND;