總結一下Loadrunner中的檢查點函數,主要介紹兩個函數:web_find()和web_reg_find();這兩個函數均用於內容的查找,但兩者也有本質的區別,具體介紹如下:
一、web_find()函數
該函數的作用是“從HTML頁面中查找指定的文本字符串”常用參數及含義如下:
1 web_find("web_find", //定義該查找函數的名稱 2 "RightOf=a", //定義查找字符的右邊界 3 "LeftOf=b", //定義查找字符的左邊界 4 "What=name", //定義查找內容 5 LAST);
使用該函數注意以下事項:
1、位置
該函數在請求的頁面內容完全顯示出來以后,在頁面中進行查找,所以只能寫在打開頁面的動作之后
2、錄制模式
該函數只能在基於HTML模式錄制的腳本中進行查找
3、必須啟用內容檢查選項
打開LoadRunner的Virtual User Generator組件,選擇Vuser->runtime setting->Preferences里面,把Enable image and text check選中,啟用檢查點,否則將不執行該查找函數;
4、在VB和JAVA語法中不支持該函數
5、被查找的文本內容中間不要有空格,否則運行后有錯誤
該函數有以下缺點:
1、 執行效率較低
2、 不返回查找結果情況,如想在執行該函數后根據查找結果做進一步操作時,沒有返回值可以依據
例如:
在頁面中查找“登錄成功”的字符串,如果找到該字符串在日志中輸出“登錄成功”,如果找不到該字符串,則在日志中輸出“登錄失敗”,此時使用該函數沒有依據來做此判斷,但使用web_reg_find()函數,使用它其中的SaveCount可以進行判斷,具體方法我們下面介紹。
二、web_reg_find()函數
該函數的作用是“在緩存中查找相應的內容”,常用參數及含義如下:
1 web_reg_find("Search=Body", //定義查找范圍 2 "SaveCount=ddd", //定義查找計數變量名稱 3 "Text=aaaa", //定義查找內容 4 LAST);
使用該函數注意以下事項:
1、位置
該函數寫在要查找內容的請求之前,通常情況下寫在如下六個函數之前:
1 web_castom_request(); 2 web_image(); 3 web_link(); 4 web_submit_data(); 5 web_submit_form(); 6 web_url()
2、使用技巧
在該函數的參數中有個“SaveCount”,該參數可以記錄在緩存中查找內容出現的次數,我們可以使用該值,來判斷要查找的內容是否被找到,下面舉個例子來說明:(引用LR的幫助中的例子)
1 // Run the Web Tours sample 2 web_url("MercuryWebTours", 3 "URL=http://localhost/MercuryWebTours/", 4 "Resource=0", 5 "RecContentType=text/html", 6 "Referer=", 7 "Snapshot=t1.inf", 8 "Mode=HTML", 9 LAST); 10 // Set up check for successful login by looking for "Welcome" 11 web_reg_find("Text=Welcome", 12 "SaveCount=Welcome_Count", 13 LAST); 14 // Now log in 15 web_submit_form("login.pl", 16 "Snapshot=t2.inf", 17 ITEMDATA, 18 "Name=username", "Value=jojo", ENDITEM, 19 "Name=password", "Value=bean", ENDITEM, 20 "Name=login.x", "Value=35", ENDITEM, 21 "Name=login.y", "Value=14", ENDITEM, 22 LAST); 23 // Check result 24 if (atoi(lr_eval_string("{Welcome_Count}")) > 0){ //判斷如果Welcome字符串出現次數大於0 25 lr_output_message("Log on successful."); }//在日志中輸出Log on successful 26 else{ //如果出現次數小於等於 27 lr_error_message("Log on failed"); //在日志中輸出Log on failed 28 return(0);
我覺得這個方法非常有用,我們可以舉一反三,應用到我們實際的項目中
三、插入檢查點函數的方法
1、手工寫入,在需要插入函數的位置手工寫入該函數
2、光標停留在要插入函數的位置,在INSERT菜單中,選擇new step,在列表中選擇或查找要插入的函數,根據提示填寫必要的參數
3、在tree view模式下,在樹狀菜單中選中要插入函數的位置,右鍵,選擇insert after或insert before,根據提示填寫必要的參數
四、總結
1、這兩個函數類型不同,web_find是普通函數,web_reg_find是注冊函數;
2、這兩種函數在運行機制不同,當客戶端向服務器發出一個請求的時候,服務器進行響應;當響應的數據在緩存中的時候,注冊函數可以在緩存中查找所要查找的內容;而普通函數(例如:web_find)需要等我們請求的顯示頁面完全顯示出來后,從這個顯示頁面中進行查找制定的字符串內容
3、web_find使用時必須開啟內容檢查選項,而web_reg_find則沒有此限制
4、web_find只能只用在基於HTML模式錄制的腳本中,而web_reg_find沒有此限制
5、web_find是在返回的頁面中進行內容查找,web_reg_find是在緩存中進行查找
6、web_find在執行效率上不如web_reg_find
附錄
web_find
語法:
int web_find (const char *StepName, <Attributes and Specifications list>, char *searchstring, LAST );
參數:
1、StepName:步驟名稱,在Tree視圖中出現。
2、Attributes and Specifications list:
支持的屬性有:
Frame:在多Frame的情況下,定義要查找Frame的范圍。
Expect:定義在什么情況下函數檢查成功:找到了指定的搜索標准或者沒有找到。例如說,可以檢查指定的錯誤信息是否出現在web頁面中。合法的值有2個:found和notfound。默認值是“found”。
Matchcase:指定搜索是否區分大小寫。
Repeat:指定當第一次發現要查找的字符串時,搜索是否繼續。當一個web頁面中包含多個被查找的字符串時,此參數是非常有用的。合法的值有2個:yes,no。默認值是“yes”。
Report:指定在什么情況下,VuGen在執行日志中顯示此函數的檢查結果。合法的值有:success,failure,always。默認值是“always”。
Onfailure:此參數決定在函數檢查失敗后,Vuser是否中斷。參數值是abort。如果指定了Onfailure=abort,當函數檢查失敗時,不論在運行時設置中的error-handling是什么,腳本都會中斷。
如果沒有指定Onfailure=abort,那么運行時設置中error-handling將會起作用。
支持的特性有:RightOf, LeftOf (不支持7.x及更高版本)。
RightOf:要查找的字符串右邊的內容。
LeftOf:要查找的字符串左邊的內容。
3、Searchstring:需要查找的字符串,格式為“What=stringxyz”。此搜索不區分大小寫。
4、LAST:屬性列表結束符。
返回值
整型。 成功時返回LR_PASS(0),失敗時返回LR_FAIL (1)。
說明
此函數的作用是在HTML頁面中查找指定的字符串。
此函數只能在基於HTML錄制的腳本中使用。當指定的HTML請求全部完成以后,開始執行搜索過程,比web_reg_find要慢。
web_find函數在C語言的腳本中已經被web_reg_find所替代,web_reg_find運行速度比較快,而且在HTML-based和URL-based的錄制方式中都可以使用。在C語言腳本中,web_find是向后兼容的。Java和Visual Basic腳本中不再支持它。
運行在HTTP模式下的WAP用戶和運行在WSP回放模式下的WAP用戶都不支持此函數。
web_reg_find
語法:
int web_reg_find (const char *attribute_list, LAST);
參數:
1、attribute_list:
通過Name=Value對來傳遞參數。例如“Text=string”。Text,TextPfx,TextSfx三個必須有一個出現。其他的屬性是可選的。
a) Text:要搜索的字符串,字符串必須非空,以NULL結尾。可以使用text flags自定義搜索字符串。
b) TextPfx:要搜索的字符串的直接前綴。
c) TextSfx:要搜索的字符串的直接后綴。
d) Search:搜索的范圍。可選的值是:Headers 、Body(在請求體中搜索)、Noresource (僅僅在HTML請求體中搜索,不包括頭和資源)、ALL (在請求體、頭和資源中搜索),默認值是“BODY”。
e) SaveCount:匹配的個數。
f) Fail:設置函數檢查在什么狀態下失敗。
g) ID:日志文件中標識此函數的一個字符串。
h) RelFrameId:相關聯的FrameId。注意:此參數在GUI級別的腳本中不受支持。
2、LAST:屬性列表結束的標記符。
返回值
整型。成功時返回LR_PASS(0),失敗時返回LR_FAIL(1)。
說明
web_reg_find屬於注冊函數,注冊一個在web頁面中搜索文本字符串的請求,在接下來的Action(例如:web_url)類函數中執行搜索。
通過查找期望的字符是否存在來驗證是否返回了期望的頁面。例如,通過查找“Welcome”來檢查主頁是否完全打開了。也可以查找“Error”檢查瀏覽器是否發生錯誤。還可以使用此函數注冊一個請求來統計特定字符串出現的次數。
如果檢查失敗,在接下來的Action類的函數中會報告錯誤。此函數僅僅注冊請求,並不執行。函數的返回值只表明注冊是否成功,並不表示檢查的結果。
此函數不僅能夠查找text,還能查找到圍繞着text的strings。不要同時指定text和前綴后綴。
Fail,處理選項,可以是“Found或“NotFound”。默認是“NotFound”。
“Fail=Found” 指示當對應的字符找到時,函數檢查失敗。例如,查找單詞“Error”,如果找到了,說名web請求沒有成功,你想把函數檢查設置為失敗。
“Fail=NotFound”指示當對應的字符找不到時,函數檢查失敗。如果查找的是web請求成功時出現的字符串時,需要使用NotFound。
SaveCount參數指示保存到參數中的匹配的字符串的個數。使用這個屬性,需要指定“SaveCount=param”。檢查操作被執行后,param 的值是null結尾的數字類型的值。
如果指定了SaveCount,且沒有使用Fail參數,檢查不會失敗,無論需要查找的字符串是否找到。通過檢查SaveCount的值確定字符串是否被找到。如果param是0,說明沒有找到對應的字符串。
如果同時指定了SaveCount和Fail,指定的錯誤處理選項和SaveCount協同工作。 handling option specified works together with the SaveCount. Thus,如果指定了SaveCount且指定了“Fail=NotFound” ,但是字符串被找到,SaveCount被賦值為字符串出現的次數,檢查成功。如果字符串找不到,SaveCount被賦值為0,檢查失敗(注意,參數的0值只在運行時設置中Continue on error 選中時才有意義)。
此函數在HTML-based和URL-based的腳本中都可以使用。此函數是在所請求內容到達之前注冊搜索請求的,所以當所請求內容一到達后就會執行搜索,產生的腳本比較高效。