天天看點

LR中檢查點函數簡析

通常腳本錄制完後需要手動添加些腳本來來確定預期的操作确實進行了正确的響應(如在操作之後後驗證顯示的一段文本或者圖檔)。這些檢查可以使用正規表達式。

常用檢查點函數:

web_find 函數在 HTML 頁中搜尋指定的文本字元串

web_reg_find 函數注冊一個請求,以在下一個操作函數(如 web_url)檢索到的網頁上搜尋一個文本字元串

web_global_verification屬于注冊函數,注冊一個在web頁面中搜尋文本字元串的請求,與web_reg_find隻在下一個Action函數中執行搜尋不同的是它在之後所有的Action類函數中執行搜尋的。Web_find函數使用時,使用在查找頁面後面“插入”。

參數“其右側”、“其左側”是針對要查找的文本而言。

如,Web Tours site,要查找Tours,“其右側”應該為“Web”,“其左側”應該為“site”。

而web_reg_find()就不能通過它的傳回值來作為事務的判斷條件,因為web_reg_find()的傳回值0和1表示web_reg_find()是否注冊成功(web_reg_find是注冊類型函數,它本身并不執行),并不代表查找的内容是否存在,也就是說無論查找的文本内容是否存在,都傳回0,(和web_find的傳回值意義就不同了)。

我想問的是有什麼方法用web_reg_find()來作為事務的判斷條件?

利用web_reg_find建立的參數SaveCount ,作為判斷條件就可以了

web_find()(幫助不太推薦使用web_find而是推薦使用web_reg_find)要寫在請求後,也就是要現在事務内了。這樣通過事務統計出來的響應時間就(包括了web_find()這個函數的執行時間)不真實了。而web_reg_find()是寫在請求前面的。如果能用web_reg_find()來作為事務結束條件,那就是最好的.

事務時間等于Duration-Wasted Time,web_reg_find執行的時間Loadrunner會自動減掉的Web虛拟使用者腳本中不會錄制到檢查點,需要手動添加或者使用VuGen的使用者接口來添加函數代碼。最常用的檢查點函數是web_reg_find。這個注冊函數會查找腳本中下一個操作如web_url後産生的一段文本。它是從傳回的緩沖區掃描而不是在接收的頁面中查找。這是比web_find更高效的一個函數。

可以使用下面的代碼來驗證文本出現的次數:

web_reg_find("Text=ABC", "SaveCount=abc_count", LAST);

web_url("Step", "URL=...", LAST);

if (strcmp(lr_eval_string("{abc_count}"), "0") == 0)

lr_output_message("not found");

else

lr_output_message("{abc_count} found");

如果想儲存并且顯示找到的文本,可以使用web_reg_save_param界定左右邊界把找到的資訊儲存到參數中。如下:

char *str1,*str2;

str1="desired text";

// Register the left and right beacons sought:

web_reg_save_param("param","LB/ic=xxx","RB=xxx");

// Do the monitored deed:

web_url("some url","URL=www.xxx.com",LAST);

// Compare:

str2=lr_eval_string("{param}");

if(strcmp(str1,str2)==0) {

lr_output_message("param found");

}else{

lr_output_message("Value found is %s",str2);

}

zibeike注:1)這裡想跟大家說下注冊函數,在web/http協定的腳本中,注冊函數均以web_reg為字首,這種注冊型的函數都是從緩沖區掃描或者獲得資料,是以需要提前聲明即需要在能獲得該查找資訊的函數之前添加這些注冊函數。例如,web_url()請求了一個頁面,我需要驗證該頁面中是否有某個特定的文本,那需要在web_url()函數之前加上web_reg_find,類似的還有關聯的函數web_reg_save_para是一樣的,需要放到能獲得想要的資料的請求的函數之前。但如果想檢視這些函數最終儲存的結果,如想列印關聯函數web_reg_save_para中儲存的參數内容,列印的操作就需要放到請求的函數之後了。2)web_find和web_reg_find的差別:前面的是查找頁面顯示的資料,是以需要放在請求頁面的函數之後,而且查找的資訊是顯示的web頁面上的資訊。後者是注冊型函數,需要放到請求的頁面之前,而且查找的内容是伺服器傳回的緩沖資料中查找,是以查找内容應該看html源代碼的内容。基于HTML錄制方式的代碼,可以使用web_image_check對HTML頁面中包含的圖檔進行驗證。并且需要注意的是隻有在Runtime Settings > Internet Protocol Preferences 選擇了"Enable Image and text check" 檢查點才有效。

web_reg_find使用技巧:

當在此函數中,查找的text=“中文”時,LR硬是報錯,換成英文字型便成功。後來,查了好久,發覺是Record-Options 中我勾選了support charset中的UTF-8,可能是錄制過程中LR捕捉到的是中文,而回放過程中此函數在HTML原檔案中查找到的卻是亂碼?總而言之,把此選項去除之後,重新錄制腳本,回放能夠成功了!另.快速定位此函數應插入的位置。切換到樹狀清單,找到帶URL字元串的腳本,點開檢視其快照,如果有圖形顯示,基本可以在此插入檢查點了,為了進一步确認可以點右鍵,選擇看其源代碼。

1. 将腳本切換到樹結構,在page view頁面上找到你要check的文本内容, 并執行滑鼠郵件,選擇copy selection.

2. 将腳本切換回代碼界面, 在光标閃爍的上行,添加如下的代碼:

備注:光标閃爍的上行: 若光标閃爍行為第10行,那光标閃爍的上行為第9行。

添加的代碼根據你檢查的方式不同而不同, 你可以選擇其中之一即可。

代碼一:

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, 并且停止執行下去。反之,則一直執行下去

繼續閱讀