軟件測試工具中QTP中使用描述性編程
軟件測試工具中QTP中使用描述性編程 Mercury QuickTest 企業級 自動化測試 工具! 目前已經被惠普收購,正式名字為HP QuickTest Professional software ,最新的版本為HP QuickTest Professional 10.0. HP QuickTest Professional 提供符合所有主要 應用軟件
軟件測試工具中QTP中使用描述性編程
Mercury QuickTest 企業級自動化測試工具!
目前已經被惠普收購,正式名字為HP QuickTest Professional software ,最新的版本為HP QuickTest Professional 10.0.
HP QuickTest Professional 提供符合所有主要應用軟件環境的功能測試和回歸測試的自動化。采用關鍵字驅動的理念已簡化測試用例的創建和維護。它讓用戶可以直接錄制屏幕上的操作流程,自動生成功能測試或者回歸測試用例。專業的測試者也可以通過提供的內置腳本和調試環境來取得對測試和對象屬性的完全控制。
在QTP中使用描述性編程是一個提高QTP腳本利用率的很好的方式。
通常QTP是通過對象庫來識別不同的對象,而描述性編程是QTP另外一種能夠識別對象的途徑,它不依賴于對象庫,通過增加一些對象的描述來識別對象的。
說明:本例子是以Flight飛機訂票系統的登陸界面為測試頁面進行描述的。
步驟一:錄制腳本
Dialog("Login").WinEdit("Agent Name:").Set "Holly"
Dialog("Login").WinEdit("Password:").SetSecure "46ef0dc7efe5834c73673898279af1204fea51a7"
Dialog("Login").WinButton("Cancel").Click
共錄制3步操作,輸入Agent Name, Password, 點擊Cancel按鈕
步驟二:初級描述性編程
Dialog("Regexpwndtitle:=Login").WinEdit("Attached text:=Agent Name:").Set "Holly"
Dialog("Regexpwndtitle:=Login").WinEdit("Attached text:=Password:").Set "Mercury"
Dialog("Regexpwndtitle:=Login").WinButton("Class Name:=WinButton", "text:=Cancel").Click
在這里要注意有三點:
1)如果需要兩個以上特性來描述一個對象,需要使用逗號(,)對描述性語言進行分割
2)使用:=來連接屬性和屬性值,并且:=兩邊不能有空格
3)使用SPY查看對象的屬性名和屬性值(Tools -> Object Spy)
步驟三:描述性編程提高
Dim descEditLogin
Set descEditLogin = Description.Create()
descEditLogin("Class Name").Value = "Dialog"
descEditLogin("Regexpwndtitle").Value = "Login"
Dialog(descEditLogin).WinEdit("Attached text:=Agent Name:").Set "Holly"
Dialog(descEditLogin).WinEdit("Attached text:=Password:").Set "Mercury"
Dialog(descEditLogin).WinButton("Class Name:=WinButton", "text:=Cancel").Click
在這里需要注意有兩點:
1)把經常使用到的對象定義為一個對象變量,方便以后調用,減少代碼工作量和錯誤
2)使用SPY獲取對象的屬性和屬性值
步驟四:使用自定義的環境變量
在File>>Settings>>Environment中選擇user-defined,增加一個變量
dlgLogin = “Login”
這樣腳本可以被修改為:
Dim descEditLogin
Set descEditLogin = Description.Create()
descEditLogin("Class Name").Value = "Dialog"
descEditLogin("Regexpwndtitle").Value = Environment.Value("dlgLogin")
Dialog(descEditLogin).WinEdit("Attached text:=Agent Name:").Set "Holly"
Dialog(descEditLogin).WinEdit("Attached text:=Password:").Set "Mercury"
Dialog(descEditLogin).WinButton("Class Name:=WinButton", "text:=Cancel").Click
當然,參數化的方式很多,這邊介紹的是使用環境變量
步驟五:從XML文件導入環境變量
dlgLogin
Login
可以使用手工導入,也可以使用LoadFromFile自動導入
總結:優點是當對象的一些屬性變更后,腳本更容易維護。比如說對于一個通用對象,比如save, reset, cancel等按鈕,一個頁面有3個,30個頁面就有90個對象,假如save變成保存,reset變成重置,cancel變成取消,那么對象庫就會產生很大的變動。而使用了描述性編程只需要在導入的XML文件中修改一個值就可以了。當然描述性編程的作用遠遠不止這些,這次只是拋磚引玉,希望大家共同進步。在QTP中使用描述性編程是一個提高QTP腳本利用率的很好的方式。通常QTP是通過對象庫來識別不同的對象,而描述性編程是QTP另外一種能夠識別對象的途徑,它不依賴于對象庫,通過增加一些對象的描述來識別對象的。
說明:本例子是以Flight飛機訂票系統的登陸界面為測試頁面進行描述的。
步驟一:錄制腳本
Dialog("Login").WinEdit("Agent Name:").Set...
QTP的工作原理有點類似人類社會的某些場景.比如一個朋友委托你帶東西給A,如果你認識A,這表明A的容貌特征以及一些聯系已經在你腦海有了印象,那么你只要找到了A的住所,那么這個任務就很容易完成了,如果你根本就不認識A,則這個任務就很難完成了. 那在QTP中有沒有一種方法,無須在對象庫中記錄任何關于某個對象的信息,就可以完成對該對象的操作呢,有.那就是描述性編程,其工作原理就象上面這個例子.
在QTP中,有一按鈕對象,對它的操作如下:Dialog("Login").WinButton("OK").Click但是如果我們在對象庫中刪除這個對象后,執行這句話就會出錯,提示找不到對象,在這個時候,我們就可以通過描述性編程給他指定對象及其他的一些屬性,修改如下Dialog("Login").WinButton("text:=OK").Click
上面腳本中,通過WinButton("text:=OK")明確告訴QTP去尋找文本屬性為OK的按鈕,于是QTP正確識別到該對象,順利的執行了腳本.這種不需要在對象庫中存儲對象的信息,就可以執行對象操作的方法,就是QTP中比較高級的用法:描述性編程(descrīptive progamming).描述性編程和傳統的QTP腳本的區別是:他把需要識別的對象的屬性從對象庫中轉移到了腳本里面,通過在腳本里面的特殊語法格式.來告訴QTP識別對象的方法.描述性編程更加靈活,因為他不需要經過錄制這個步驟,可以直接通過編程的方式操作任何一個你想操作的對象,只要你在
測試腳本代碼里提供給QTP識別該對象的足夠信息
描述性編程的語法格式如下:
micClasas("property1:=value1","property2:=value2")
micClass標志某個對象的類別,括號里面通過jproperty:=value的形式告訴QTP識別該對象的必要屬性.我們繼續修改一下測試腳本:Dialog("Login").WinButton("text:=OK").Click修改后:Dialog("Login").WinButton("nativeclass:=Button","text:=OK").Click.F5執行,結果運行順利.這次修改,我們使用了一個通用的對象類WinObject,而把按鈕當作一個基本屬性nativeclass:=Button,同樣可以完成對該按鈕的操作
由上面的敘述我們可以看出來,描述性編程沒有嚴格的要求,只要遵循一個原則:在代碼中告訴QTP足夠他識別該對象的屬性,QTP就可以不通過對象庫,而是通過描述性編程的方式完成對指定對象的操作.所以描述性編程沒有什么神秘的,他無非是把原來存儲在對象庫中的信息提到代碼中來了而已.
原文轉自:http://www.anti-gravitydesign.com