軟件測試工具QTP-對Check Point的較為深入理解
Mercury QuickTest 企業級自動化測試工具! 目前已經被惠普收購,正式名字為HP QuickTest Professional software ,最新的版本為HP QuickTest Professional 10.0. HP QuickTest Professional 提供符合所有主要應用軟件環境的功能測試和回歸測試的自動化。采用關鍵字驅動的理念已簡化測試用例的創建和維護。它讓用戶可以直接錄制屏幕上的操作流程,自動生成功能測試或者回歸測試用例。專業的測試者也可以通過提供的內置腳本和調試環境來取得對測試和對象屬性的完全控制。
1. 定義:
將特定屬性的當前數據與期望數據進行比較的檢查點,用于判定被測試程序功能是否正確
Check Point可以分兩類:QTP內置驗證點和自定義驗證點
2. QTP內置驗證點實現原理及優缺點
A.錄制時,根據用戶設置的驗證內容,記錄數據作為基線數據
B.回放時,QTP捕獲對象運行時的數據,與腳本中的基線數據進行比較
C.如果基線數據和運行數據相同,結果為PASS,反之為Failed.
D.優點是 操作簡單方便
E.缺點是 QTP默認的檢查的屬性有時不符合自己的要求,如希望得到檢查的屬性沒有在里面, 而默認的屬性不需要檢查等。
3. QTP內置驗證點結果的應用
A.錄制的驗證點在沒有進行調整前,僅僅是給出了檢查結果是通過還是錯誤的
B.實際的測試過程中,可以根據驗證點的結果進行不同的操作
If Window("Flight Reservation").WinEdit("Name:").Check(CheckPoint("Name:")) = True then
msgbox "oh, suclearcase/" target="_blank" >ccess!"
Else
msgbox "oh, failure!"
End If
4. 自定義驗證點的應用及優缺點
A.使用條件語句對實際值和期望值進行對比,然后用Reporter對象報告結果
'檢查Ticket Number
If CStr(dbTicketNumber) = CStr(DataTable("oTicketNumber", dtLocalSheet)) Then
Reporter.ReportEvent micPass, "打開訂單- TicketNumber", "期望結果是:" & dbTicketNumber & ", 界面顯示實際結果是:" & DataTable("oTicketNumber", dtLocalSheet)
Else
Reporter.ReportEvent micPass, "打開訂單- TicketNumber", "期望結果是:" & dbTicketNumber & ", 界面顯示實際結果是:" & DataTable("oTicketNumber", dtLocalSheet)
End If
B.優點是 非常靈活,前者實現的所有檢查都可以用此方法來實現;
C.缺點是 代碼量大,對測試人員的要求高。
5. 對Check Point的深入理解
A.個人認為在比較簡單的和有Active Screen的情況下可以使用QTP內置的Check Point,在比較復雜的情況下可以通過編程和使用Reporter來完成.
B.在使用check方法時,必須先在Keyword View或者Active Screen中新建CheckPoint。否則無法對該對象進行check,系統報錯說無法在對象倉庫中找到此對象。如果插入檢查點,系統會自動把相關的對象添加到對象庫中。
我認為檢查點并不是一個實實在在的對象。因為你可以對同一個對象設置不同的檢查點,可以把它的某個屬性既設定成True,也可以設定為False。而對象庫中的對象的屬性值是必須依賴于對象的實際屬性值的。如果隨意更改有可能無法識別。還有就是可以針對同一個對象設定多個檢查點。在測試窗口中可以看到這兩個檢查點的名稱是區分開來的。所以我認為檢查點并不是實際存在的對象,而是一些類似映射的東西。
盡管檢查點并不是對象庫中的實在的對象,但是它必須對應到對象庫中的某個實實在在的對象,好像它的一個映像一樣,而且在實際的操作過程中,QTP還是把它作為一個對象來處理的。因為我們無法像其他對象一樣把“檢查點對象”添加到對象庫中,而QTP又認為它是個對象,所以我們無法在專家視圖中直接添加檢查點腳本。但是我們可以采用編成描述的方式來實現檢查點的功能。CheckPoint 是一個依賴于Object Repository(對象庫)中的某個對象的“虛擬對象”。其具體含義是:如果它所依賴的QTP 對象庫中的對象沒有了,那么此CheckPoint 也就不存在了;這個“虛擬對象”的屬性是從它所依賴的對象的屬性中“抽取”出來的,它具有它所依賴的對象的一個或幾個屬性,但不能增加它所依賴的對象沒有的任何屬性。
CheckPoint 是一個“虛擬對象”的重要原因是:每個Object都能在Object Repository找到它的Name、Class Properties,而CheckPoint 在Object Repository中就根本不存在。選擇腳本中的某個對象后,在Object Property 的對話框里面有個Respository按鈕,點擊它后,你會看到此對象在Object Respository 的Name、Class 和 Properties。選擇一個CheckPoint后,在CheckPoint Properties 的對話框里沒有 Respository 按鈕,在Object Respository中也找不到此CheckPoint的Name、Class 和 Properties(因為它在對象庫中根本就不存在?。?。
原文轉自:http://www.anti-gravitydesign.com