天天看點

LR:檢查點

VuGen确定腳本運作成功的判斷條件。在錄制編寫腳本後,通常就會進行回放,如果回放通過沒有出現錯誤,就認為腳本是正确的。究竟VuGen怎麼區分腳本是否回放正确呢?細心的朋友會發現,基本上所有腳本回放錯誤都是因為404錯誤,也就是頁面無法找到,而隻要頁面傳回了,VuGen都不會提示任何錯誤。例如前面登入Web Tours網站的腳本,由于沒有做關聯操作而導緻登入失敗,但是腳本還是執行成功了,在Test Results中顯示為PASS狀态。

VuGen判斷腳本是否執行成功是根據伺服器傳回的狀态來确定的,如果伺服器傳回的HTTP狀态為200 OK,那麼VuGen就認為腳本正确地運作了,并且是運作通過的。在絕大多數系統出錯時會傳回錯誤頁面嗎?不會,一般系統都會傳回一個消息提示框,來提升使用者感受。例如:“網站忙,請稍候”。其實這個時候網站已經無法正确響應使用者請求了,但是VuGen腳本無法識别,會錯誤地認為網站還能正确通路,導緻分析錯誤。是以這時需要一種檢查點函數幫助驗證請求發送出去後,伺服器的傳回是不是期望的内容,如果不是,那麼就說明伺服器無法提供正常的服務了。

檢查點函數和關聯函數比較相似,同樣也是一個注冊型函數web_reg_find()。該函數能夠對伺服器傳回的内容進行檢查。

例如:Web Tours的注冊操作,在注冊成功後,伺服器會傳回以下内容:

Thank you, test1, for registering and welcome to the Web Tours family. We hope we can meet all your current and future travel needs. If you have any questions, feel free to ask our support staff. Click below when you're ready to plan your dream trip...

這裡帶下畫線的是注冊使用者名,隻要伺服器傳回以上的内容那麼就說明注冊成功了,否則就是注冊失敗,腳本回放失敗。先錄制一個注冊使用者的腳本,如下所示:

Action()

{

 web_url("WebTours",

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

  "TargetFrame=",

  "Resource=0",

  "RecContentType=text/html",

  "Referer=",

  "Snapshot=t1.inf",

  "Mode=HTML",

  LAST);

 web_url("sign up now",   "URL=http://127.0.0.1:1080/WebTours/login.pl? username=&password=&getInfo=true",

  "TargetFrame=body",

  "Resource=0",

  "RecContentType=text/html",

  "Referer=http://127.0.0.1:1080/WebTours/home.html",

  "Snapshot=t2.inf",

  "Mode=HTML",

  LAST);

 web_submit_data("login.pl",

  "Action=http://127.0.0.1:1080/WebTours/login.pl",

  "Method=POST",

  "TargetFrame=info",

  "RecContentType=text/html",    "Referer=http://127.0.0.1:1080/ WebTours/login.pl?username=&password=&getInfo=true",

  "Snapshot=t3.inf",

  "Mode=HTML",

  ITEMDATA,

  "Name=username", "Value=test2", ENDITEM,

  "Name=password", "Value=test2", ENDITEM,

  "Name=passwordConfirm", "Value=test2", ENDITEM,

  "Name=firstName", "Value=", ENDITEM,

  "Name=lastName", "Value=", ENDITEM,

  "Name=address1", "Value=", ENDITEM,

  "Name=address2", "Value=", ENDITEM,

  "Name=register.x", "Value=34", ENDITEM,

  "Name=register.y", "Value=9", ENDITEM,

  LAST);

return 0;

}

回放這個腳本,檢視Test Results中顯示的結果是運作通過,但是如果認真看一下最後一步的截圖,就會發現回放的腳本根本就沒有執行成功,因為test2使用者已經存在了,回放不會注冊任何新的使用者,但是VuGen不會判斷注冊失敗的錯誤,這裡必須通過檢查點函數來解決。

現在在web_submit_data()函數前添加檢查點函數(注冊型函數一定要寫在請求前)。打開Insert菜單下的New step選項,找到web_reg_find()函數并進行添加,如圖1所示:

LR:檢查點

我們在進行性能測試而不是功能測試,雖然檢查點也可以很好地實作功能測試,但在大多數時候并不需要太在意功能點是否全部正确,隻要確定基本業務操作正确即可(如果希望測試系統在高負載情況下的功能是否正常可以在運作場景中調用QTP實作,具體内容參考第4.4節)。3.8.1  文本檢查點

web_reg_find()文本檢查點函數提供了一種對伺服器傳回内容進行查詢的功能,和關聯的不同之處在于檢查點函數隻能傳回檢索到内容的次數。

Ÿ Search for specific Text

需要查詢的标準文本,該功能和Word中的查找功能十分相似。在伺服器傳回的内容中查找特定的字元串,内容支援參數化,并且支援和關聯相同的通配符和識别方式。

在這裡輸入需要查找的字元串即可,檢查點函數将會找出伺服器傳回中是否存在需要查找的内容。

Ÿ Search for Text by start and end of string

文本檢查點函數也同樣提供了根據左右邊界進行查找的功能,選項參考關聯函數。

Ÿ Search in

設定在伺服器傳回的哪部分資料中進行查詢。這裡提供了All、Headers、Body三個選項,和關聯函數相同,Headers是指HTTP傳回的標頭部分;而Body是指傳回HTTP的正文部分,一般來說需要檢查的内容都存放在Body中。

Ÿ Save count

這是文本檢查點很特别的功能,它将記錄查找内容的出現次數并且存放到一個參數中,這裡可以填寫一個參數名稱來存放計數結果。

Ÿ Fail if

設定在什麼情況下文本檢查點函數錯誤,提供了兩個選項:Found、NotFound。如果選擇Found也就是說如果在伺服器傳回中存在需要檢查的對象,那麼文本檢查點函數出錯;選擇NotFound則相反,如果沒有找到對應的内容,那麼文本檢查點函數出錯。

檢查點函數的錯誤會導緻整個腳本運作結果的失敗,通過這個功能可以友善地定位腳本運作中的邏輯錯誤。

接着來完成注冊使用者的腳本,實作腳本每次運作必須完成使用者的注冊,否則腳本運作失敗。在腳本中添加檢查點函數。在Search for specific Text中輸入以下内容:for registering and welcome to the Web Tours family,然後設定Search in為Body、Save count為regcheck、Fail if為Not Found,如圖2所示:

LR:檢查點

确定後,得到檢查點函數:

 web_reg_find("Fail=NotFound",

  "Search=Body",

  "SaveCount=regcheck",

  "Text=for registering and welcome to the Web Tours family",

  LAST);

現在再回放一下腳本看看效果,會得到以下錯誤資訊:

Action.c(36): Error -26366: "Text=for registering and welcome to the Web Tours family" not found for web_reg_find   [MsgId: MERR-26366]

Action.c(36): web_submit_data("login.pl") highest severity level was "ERROR", 2630 body bytes, 226 header bytes   [MsgId: MMSG-26388]

在伺服器的傳回中沒有發現我們想要搜尋的東西,是以腳本回放錯誤,整個Test Results是以FAIL結束的。接着修改一下注冊的使用者資訊,看看檢查點函數是否能查詢得到相關資訊。修改使用者名後,再次運作腳本。

Action.c(36): Registered web_reg_find successful for "Text=for registering and welcome to the Web Tours family" (count=1)   [MsgId: MMSG-26364]

Action.c(36): web_submit_data("login.pl") was successful, 1020 body bytes, 343 header bytes   [MsgId: MMSG-26386]

可以看到web_reg_find()函數成功地查詢到了需要的内容,并且提示count=1,說明找到了1次該内容,腳本成功運作,Test Results狀态為PASS。

如果打開了參數存取值日志選項,可以看到regcheck參數的值,如果沒有查詢到那麼regcheck的值為0,反之regcheck存放count對應的記錄條數。檢查點函數有效地對腳本運作進行了監控,確定了腳本操作的正确性。另外一方面也可以通過它來進行一些邏輯分支的判斷和頁面的内容檢查工作。

3.8.2  自動檢查點

有些時候我們需要確定每個請求中都包含一個檢查資訊,然而手動添加檢查點函數非常麻煩,這個時候可以使用自動檢查點規則,通過建立一個新的規則,可以在回放時對所有的傳回内容進行檢查工作。

打開Run-time Settings/ContentCheck,如圖3所示:

LR:檢查點

在這裡單擊New Application按鈕來添加一個應用,然後在這個應用下添加對應的規則,單擊New Rule按鈕。這裡可以在Search for Text中填寫需要檢查的内容,也可以在下面的Search by prefix and suffix中填寫需要檢查的邊界,大小寫需要區分的話将Match case選中,最後确定該規則在什麼情況下失敗。

如果希望腳本檢查每個頁面是否包含logo.gif這個圖檔,那麼可以在這裡添加一個圖檔檢查規則。在Search for Text 中填寫images/logo.gif,設定Fail if為Not Found,如圖4所示:

LR:檢查點

運作腳本時,如果有頁面傳回的代碼中沒有包含images/logo.gif時,就能看到以下錯誤:

Action.c(3): Error -26370: ContentCheck Rule "Rule_2" in Application "discuz" triggered. Text "images/logo.gif" not matched   [MsgId: MERR-26370]

Action.c(3): web_url("mainpage") highest severity level was "ERROR", 114808 body bytes, 4592 header bytes   [MsgId: MMSG-26388]

如果傳回的代碼中包含images/logo.gif則不會有任何提示出現。通過自動檢查點,可以輕松地對頁面中固定出現的内容進行校驗工作。也可以通過web_global_verification()函數實作全局檢查點功能。

3.8.3  圖檔檢查點

通過web_image_check()函數可以檢查頁面上的圖檔。例如:

web_image_check(“函數标題”,”ALT=圖檔說明”,LAST);

圖檔檢查點函數必須在Run-time Settings中打開Preferences下的Enable Image and text check才有效。

繼續閱讀