標籤:
基於GUI的自動化測試主要是圍繞著介面的控制項元素來進行的,例如文字框、列表框、控制按鈕等等,軟體使用者通常都是通過這些控制項與程式互動,因此,編輯測試指令碼的第一步就是識別測試對象。
1、測試對象、運行時對象的區分以及物件程式庫概念
首先區分UFT中測試對象和運行時對象概念。
測試對象:Test Object,TO,是UFT定義的一些類,用它們來代表被測應用的各種對象; TO屬性: 擷取對象的屬性,可以理解為靜態屬性,在運行時的輸入東西與它無關。測試對象的屬性是UFT為了識別在測試執行過程中的運行時對象而保留在物件程式庫中的屬性。 GetToProperty/GetToProperties和SetToProperty則分別用於讀取和修改To的屬性值 |
運行時對象:Runtime Object,RO,是實際的被測應用對象,是測試執行過程中,TO用來關聯的對象; RO屬性: 是變的(使用者名稱框輸入不同的值,這個Ro屬性取出來就是不一樣) GetRoProperty方法用於取得運行時對象(實際對象)的某個屬性的值。 |
簡單以登入操作中AgentName對象來說,to屬性和運行時輸入的東西無關,而ro屬性是實際中被測應用對象,在測試執行過程中,會看到對應屬性的變化:
UFT物件程式庫:UFT中,使用物件程式庫對對象進行管理。記錄的對象和這些對象的屬性,都儲存在物件程式庫中。而物件程式庫也可以設定為共用物件程式庫,供多個Action調用。當發現物件程式庫中缺少某個對象時,可以使用對象抓取工具,單個抓取對象添加到物件程式庫中。
2、物件程式庫工具的一些操作
1)對象辨識器:Tools-----Object Identification
2)對象嗅探器:Tools----Object Spy
開啟如下的嗅探器視窗,點擊方框中的按鈕,移動手型的游標,可以看到中顯示當前游標下的空間屬性
3)物件程式庫:Resources-----Object Repository
注意這裡儲存的除了測試對象,還有其他的物件類型,如下面的檢查點。同樣在物件程式庫中,我們可以點擊工具列中的按鈕,添加對象到物件程式庫中;也可以高亮某個測試對象;,也可以使用對象嗅探器捕獲測試對象;也可以關聯其他的測試對象;
4)物件程式庫管理:Resources----Object Repository Manager
這裡實際上共用物件程式庫。在該對話方塊中,我們可以建立一個共用物件程式庫、將物件程式庫跟Action關聯、添加對象到共用物件程式庫中、儲存一個共用物件程式庫、修改共用物件程式庫中的對象等。下面是建立一個共用的測試對象:
3、練習
錄製一個Flight程式登入的指令碼。指令碼要求:
- 使用Systemutil.Run開啟程式
- 建立三個Action,分別是Login,NewOrder,Logout。在三個Action中分別錄製對應的操作
- 儲存NewOrder的本機物件庫為NewOrder.tsr
- 刪除NewOrder的本機物件庫
- 將NewOrder的Action使用共用物件程式庫(引用已儲存的NewOrder.tsr),設定為共用物件程式庫的路徑為相對路徑
- 使用自訂檢查點,檢查Price*Ticket的價格是否等於Total,並用If語句寫出判斷成功或是失敗後的Reporter.ReportEvent報告語句
- 點擊關閉,結束錄製
補充知識點:
1)可以使用Systemutil.run加上程式路徑,使UFT自動開啟被測程式
2)在錄製指令碼的過程中,可以點擊“錄製工具條”中的建立Action按鈕,將三個部分的操作放在三個Action中
3)UFT的VBscript指令碼中,使用Const聲明定義常量,使用Dim聲明定義變數
4)報告語句,如果程式正確,則可以書寫為Reporter.ReportEvent micPass,"結果正確","總價格正確";如果程式不正確,可以使用Reporter.ReportEvent micFail,"結果錯誤","總價格計算錯誤";
結果:
NewOrder中代碼:
'建立訂單Window("Flight Reservation").ActiveX("MaskEdBox").Type "121216"Window("Flight Reservation").WinComboBox("Fly From:").Select "Denver"Window("Flight Reservation").WinComboBox("Fly To:").Select "London"Window("Flight Reservation").WinButton("FLIGHT").ClickWindow("Flight Reservation").Dialog("Flights Table").WinButton("OK").ClickWindow("Flight Reservation").WinEdit("Name:").Set "jojo"Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0,1Dim tiknum,price,totaltiknum=2Window("Flight Reservation").WinEdit("Tickets:").Set tiknumWindow("Flight Reservation").WinRadioButton("First").SetWindow("Flight Reservation").WinButton("Insert Order").ClickDim pricestr,totalstrpricestr=mid(window("Flight Reservation").WinEdit("Price:").GetROProperty("text"),2)price=CDBl(pricestr)totalstr=mid(window("Flight Reservation").WinEdit("Total:").GetROProperty("text"),2)total=CDBl(totalstr)If (price*tiknum)=total Then Reporter.ReportEvent micPass,"結果正確","總價格正確"Else Reporter.ReportEvent micFail,"結果錯誤","總價格計算錯誤"End if
3-UFT對象管理