QTP中部分方法說明
1、ChildObjects方法,用來獲取某個父對象下面的所有子對象
? ? ?set CO=Window("Form1").ChildObjects() ? ?參數(shù)為空,獲取所有子對象
? ? ?可在ChildObjects方法中使用Description對象,選擇性的獲取子對象
2、寫入Result
? ? ?Report.ReportEvent micPass/micDone.....
Description對象
來源網(wǎng)址:http://www.51testing.com/?uid-331265-action-viewspace-itemid-240166
Description對象
1、使用Description對象,首先要創(chuàng)建:Set MyDescription = Description.Creat()
title="計算器"
Window("regexpwndtitle:="& title).Move 908,234
用Description對象:
Set MD=Description.Create()
title="計算器"
MD("regexpwndtitle").Value=title
Window(MD).Activate
2、測試對象的屬性描述都包裝在了Description對象中,用Description對象的實例來代表一個測試對象的屬性描述。
3、屬性描述信息的字符串默認(rèn)會被當(dāng)成正則表達(dá)式處理,需要使用“\”轉(zhuǎn)義,或者設(shè)置Description對象的RegularExpression屬性為False:?
? ? ? ? ? ? ? ? ? ? MD("RegularExpression").Value = False
4、一旦父對象使用描述性編程,則后續(xù)子對象也需要通過描述出現(xiàn)
QTP描述性編程
QTP有兩種描述性編程的開發(fā)方式:一種是直接描述的方式,另一種是使用Description對象的方式。
QTP把描述性編程中所有“描述”控件屬性的值當(dāng)成正則表達(dá)式來處理,因此如果輸入的描述包含某些特殊字符,如“*、?”等在正則表達(dá)式中有意義的字符,需要在字符前加上“\”。
一旦父對象使用描述性編程,則后續(xù)子對象也需要通過描述出現(xiàn)。
直接描述編程的說明
Window("regexpwndtitle:=計算器").Move 908,234
wait(2)
Window("regexpwndtitle:=計算器").Move 345,234
title="計算器"
wait(2)
Window("regexpwndtitle:="& title).Move 908,234
1、直接描述方式的語法格式:
TestObject("PropertyName1:=PropertyValue1","PropertyName2:=PropertyValue2"....)
注意:屬性和屬性值之間用“:=”分隔開
2、如果在測試對象層次結(jié)構(gòu)的某一點開始使用了描述性編程,則該測試對象層次結(jié)構(gòu)下的后續(xù)測試對象都要使用描述性編程的方式來描述對象。一旦父對象使用描述性編程,則后續(xù)子對象也需要通過描述出現(xiàn)。
3、使用描述性編程后,對象庫中沒有存對象。
4、使用描述性編程時,可以先使用Object Spy查看對象屬性后,再添加屬性及屬性值,以防屬性添加錯誤。
5、使用描述性編程時,可以把描述賦值給變量,以增加代碼可讀性,如
set i = Window("regexpwndtitle:=計算器")
i.Move 908,234
6、使用With簡化代碼
With?Window("regexpwndtitle:=計算器")
? ? ? ? .Activate
? ? ? ? .move 908,234
End With
Recovery Scenario的使用
創(chuàng)建Recovery Scenario并關(guān)聯(lián)到某個測試腳本,在QTP遇到非預(yù)期的事件或錯誤時,Recovery Scenario會被相應(yīng)的時間觸發(fā)執(zhí)行,恢復(fù)腳本的執(zhí)行控制權(quán)。
使用向?qū)?chuàng)建Recovery Scenario:Resources--Recovery Scenario Manager
關(guān)聯(lián):File--Settings--Recovery
Setting對象的使用
使用Setting來進(jìn)行設(shè)置:Setting("DefaultTimeout")= 30000 (毫秒) 與在File--Test Setting--Run中設(shè)置Object synchronization timeout效果一樣。
獲取DefaultTImeout也是使用Setting對象:DT=Setting("DefaultTimeout")
通過Setting可以修改File--Setting和Tools--Options中的值,但實際并沒有改變這兩項中的值,只在當(dāng)前的QTP會話中有效。
有Exists,Add,Remove方法和Item屬性
例:判斷名為“a”的Item屬性是否存在,創(chuàng)建及移除
With Setting
???? If not .Exists("a") then
????????? .add "a",2
???? else .item("a")=.item("a")+1
???? End if
???? msgbox .item("a")
???? .Remove("a")
???? msgbox .item("a")
End With
說明:Setting的Item屬性在整個測試項目的各次運行之間有效,即下一次腳本運行能保持上次運行的值。即第一次運行以上腳本msgbox .item("a")值為2,第二次為3.
QTP內(nèi)置函數(shù)
1、print
2、msgbox:會暫停腳本的執(zhí)行,直達(dá)消息窗口被關(guān)閉才會繼續(xù)執(zhí)行后續(xù)的測試腳本
3、wait
4、ExecuteFile執(zhí)行VBScript腳本,腳本文件中的函數(shù)可以被直接調(diào)用。
ExxcuteFile “VBScript的路徑及名稱”
虛擬對象管理
定義虛擬對象(Virtual Object)可以讓QTP學(xué)會i認(rèn)識某些不能識別的控件,并且將這些控件映射到某類標(biāo)準(zhǔn)對象,從而可以對這些對象進(jìn)行錄制和運行測試。
定義虛擬對象:Tools--Virtual Objects--New Virtual Object,根據(jù)坐標(biāo)來確定虛擬對象的范圍
管理虛擬對象:Tools--Virtual Object--Virtual Object Manager
QTP的Utility對象使用
可從Insert--Step Generator,選擇Category為Utility Objects后,Object中查看到Utility的對象。
1、使用PathFinder對象查找文件
在Tools--Options--Folders中添加QTP用于搜索文件的目錄,PathFinder.Locate("需要查找的文件名")
2、使用Reporter對象寫入測試結(jié)果
Reporter.ReportEvent micDone(micPass,micFail,micWarning)
3、Environment對象的使用
通過Environment對象可以讀取和設(shè)置環(huán)境變量。環(huán)境變量包括Built-In和User-defined兩種類型。Built-In是內(nèi)建的環(huán)境變量,只能讀??;User-defined是用戶自定義的環(huán)境變量,可以設(shè)置和讀取。
如讀取內(nèi)建環(huán)境變量:OS=Environment.Value("OS")
設(shè)置用戶自定義環(huán)境變量:Environment.Value("User")=10
導(dǎo)入外部文件:Environment.LoadFileFrom("路徑")
讀取當(dāng)前導(dǎo)入的環(huán)境變量文件名:filename=Environment。ExternalFimeName
隨機(jī)數(shù)參數(shù)化
GetItemsCount:返回下拉框的Item數(shù)目
如:ItemCount = Window("Flight Reservation").WinComboBox("Fly From").GetItemsCount
SelectItem =RandomNumber(0,ItemCount)
Window("Flight Reservation").WinComboBox("Fly From").Select SelectItem
Data Table參數(shù)化
Global Data Table
例:Windows("FlightReserver").WinComboBox("Fly From").SelectDataTable("p_From",dtGlobalSheet)
需要將Global DataTable中第一列更名為“p_From”。
第一個For循環(huán):File中數(shù)據(jù);
第二個for循環(huán):Action中次數(shù)
假設(shè)Local Data Table中共有n行數(shù)據(jù)
For(i=1;i++;i< File--Settings--Run中次數(shù)) ?如Run all rows代表n次,若Run from row to row 不是從第一行開始,則i不是從1開始Run from row 1 to row 4,代表3次
{
For(j=1;j++;j< Action Call Properties中的次數(shù))如Run from row 1 to row 4,代表3次,若Run from row to row 不是從第一行開始
? ? ? ?運行第i行數(shù)據(jù); ? ?
}
File--Settings--RunAction Call PropertiesResult
Run one iteration onlyRun one iteration onlyOne iteration運行數(shù)據(jù)表中第一行
Run all rows數(shù)據(jù)表中共有n行,運行數(shù)據(jù)表中第一行n遍
Run from row to rowfrom row to row中隔多少,就運行數(shù)據(jù)表中第一行多少遍
Run all rowsRun one iteration only迭代數(shù)據(jù)表中所有行
Run all rows數(shù)據(jù)表中有n行,第一行運行n遍,第二行運行n次,一次到第n行運行n遍
Run from row to row數(shù)據(jù)表中有n行,若Run from row 1 to row 3,則第一行運行3次,第二行運行3次,依次類推到第n行運行3次
Run from row to rowRun one iteration onlyFile中選擇的行迭代
Run all rows若File中選定行為1-2,數(shù)據(jù)表中共有n行,則row1運行n次,row2運行n次
Run from row to row若File中選定行為1-2,Action中選定行為1-3,則第一行運行3次,第一行運行3次
Action Data Table
說明:1、File--Settings—Run中是把Local DataTable作為一個整體,Run all rows時,取Local DataTable中的行數(shù)n,將整個Local DataTable中數(shù)據(jù)迭代n次,即共n*n次。
2、其中一個設(shè)置為Run one iteration only時,迭代根據(jù)另一個的字面上意思進(jìn)行,如Run all rows,就是迭代數(shù)據(jù)表中所有行。
第一個For循環(huán):File中次數(shù);
第二個for循環(huán):Action中數(shù)據(jù)
假設(shè)Local Data Table中共有n行數(shù)據(jù)
For(i=1;i++;i< File--Settings--Run中次數(shù)) ?如Run all rows代表n次,Run from row 1 to row 4,代表3次
{
For(j=1;j++;j< Action Call Properties中的次數(shù))如Run from row 1 to row 4,代表3次,若Run from row to row 不是從第一行開始,則j不是從1開始
? ? ? ?運行第j行數(shù)據(jù); ? ?
}
File--Settings--RunAction Call PropertiesResult
Run one iteration onlyRun one iteration onlyOne iteration運行數(shù)據(jù)表中第一行
Run all rows迭代數(shù)據(jù)表中所有行
Run from row to rowfrom row to row,根據(jù)設(shè)置運行第m行至第n行
Run all rowsRun one iteration only迭代數(shù)據(jù)表中所有行
Run all rows數(shù)據(jù)表中有n行,運行n*n次,依次運行n次數(shù)據(jù)表中的所有行
Run from row to row數(shù)據(jù)表中有n行,若Run from row 1 to row 3,則依次row1-3運行n次
Run from row to rowRun one iteration onlyFile中選擇的行迭代
Run all rows若File中選定行為1-2,則將所有行迭代兩次
Run from row to row若File中選定行為1-2,將Action Call Properties選定的行迭代2次
運行測試腳本的說明
1、運行整個測試腳本:按F5或Run按鈕;
2、運行部分測試腳本:
運行當(dāng)前的Action:Automation--Run Current Action;
從當(dāng)前選中的測試腳本開始運行:選中一行腳本,右擊選擇Run From Step或Automation--Run From Step;
運行到當(dāng)前選中的測試腳本:選中一行腳本,右擊選擇Run To Step;
3、批量運行測試腳本
QTP自帶工具Test Batch Runner,可以添加多個測試腳本,然后順序執(zhí)行,但是需要在QTP中進(jìn)行設(shè)置:Tools--Options--Run,勾選Allow other HP products to run tests and components。
執(zhí)行的結(jié)果保存位置:
? ? ? 涉及到單個test run result保存的位置,如果2個都是temp的,那么batch執(zhí)行完后,只能看到最后一個test的結(jié)果,在temp中的Result總是保存最近的一個,最近的會覆蓋之前的Results。
? ? ?如果單個test是經(jīng)過保存的,則batch完后result在各自的result目錄里<test folder>\res*\report。用automation-results就可以看到。
? ? 當(dāng)中途stop一次,再run的時候提示:...aborded,需要重啟Test Batch Runner。
? ? 多個test的順序只要添加一次就會被記住,當(dāng)a被刪除后,再添加它,位置不變。要想改變,需要重啟Test Batch Runner。
添加新的Action及關(guān)聯(lián)對象庫
Action就是動作,1個Action可以錄制很多動作,也可以是一個動作。可以單獨使用,也可以被調(diào)用復(fù)用。
增加Action:Insert-->Call to new Action?
View-->Test flow能查看到各個Action,并可右擊Action進(jìn)行相應(yīng)的操作。
關(guān)聯(lián)Action的對象庫:1、錄制新腳本產(chǎn)生新的測試對象庫;2、關(guān)聯(lián)前一個的Action所到處的對象庫文件,不能對對象庫進(jìn)行修改(在Object Repository中可導(dǎo)出對象庫,打開新Action的Object Repository--Tools--Associate Repositories)
QTP識別對象原理
QTP通過將對象的屬性記錄在對象庫中,在運行時比較運行時對象與測試對象的屬性來進(jìn)行識別
Object Spy:查看對象的屬性和方法
Object Identification:設(shè)置識別對象的屬性
Object Repository:存儲測試對象的屬性
對象識別的四種模式
來源網(wǎng)址:http://www.51testing.com/?uid-331265-action-viewspace-itemid-240166
對象識別(Object Identification)有四種模式:
1:強(qiáng)制屬性識別(mandatory properties):必須匹配的屬性
2:輔助屬性識別(assistive properties):當(dāng)強(qiáng)制屬性無法識別對象時,使用輔助屬性識別
3:智能識別(Smart Identification):在回放的時候進(jìn)行,前提是勾選了智能識別。其主要原理為:先選擇某個基本屬性進(jìn)行比較,若對象多于一個,再繼續(xù)添加屬性篩選;若添加的對象屬性造成無對象匹配,則淘汰該屬性,應(yīng)用該方法直至找到唯一對象并對該對象。
4:順序標(biāo)識符(ordinal identifier):在錄制時記錄下來;在回放時會先進(jìn)行智能識別,在標(biāo)識符識別,前提是勾選了智能識別。
Index ? ? 表示對象在程序代碼中的出現(xiàn)順序,這個順序是相對于其它具有相同屬性的對象而言的。
Location ?表示對象在窗口、Frame或?qū)υ捒蛑谐霈F(xiàn)的順序,這個順序是相對于其它具有相同屬性的對象而言的。
CreationTime(僅適用于Browser對象) 表示Browser對象打開的順序,這相順序是相對于其它已打開的具有相同屬性的對象而言的。
說明:因為強(qiáng)制屬性是會記錄其中的每個屬性,如果強(qiáng)制屬性添加太多,影響性能;輔助屬性中從上至下,只要有一個屬性匹配即可。QTP在錄制腳本時,如果通過主屬性與輔助屬性已能夠唯一識別對象,則不會獲取對象的ordinal identifier順序值。
識別順序如下:
mandatory properties->assistive properties -->Smart Identification ->ordinal identifier
可在Toole-->Object Identification中進(jìn)行相關(guān)屬性的設(shè)置
錄制方法-Record and Run Setting
打開Record and Run Settings窗口:創(chuàng)建新test,第一次點擊Record按鈕;或者Automation--Record and Run Settings
Web標(biāo)簽:
Record and run test on any open brower:錄制和運行在任何打開的QTP所支持的瀏覽器(必須先打開QTP,再打開瀏覽器,否則會錄制不到信息,【而且只能錄制一個瀏覽器中的多個標(biāo)簽頁信息】有待考證),也可以設(shè)置忽略一些特殊的URL,在Tools--Options--Web中設(shè)置;
Open the following address when a record or run session begins :打開一個新的瀏覽器來錄制和運行測試,需要輸入要打開的網(wǎng)址,選擇哪個瀏覽器來打開,前提是安裝了其他QTP版本支持的瀏覽器。 ? ? ? ? ? ? ?Do not record and run on browsers that are already open :選中此項后先于QTP打開的瀏覽器不會錄制腳本以及不用時候Obiect Spy。
Windows Application標(biāo)簽:
Record and run only on :只選中這項,而不選擇其下的其他選項,而且Application detail中沒有添加,則表示不錄制基于Windows的應(yīng)用程序。
說明:這兩個標(biāo)簽頁并且的關(guān)系,如在Web端選擇了打開www.baidu.com,在Application中選擇錄制任何程序,應(yīng)用后,開始錄制,則QTP會打開網(wǎng)頁www.baidu.com,同時可錄像任何的Windows?Application。