成都創(chuàng)新互聯(lián)成立與2013年,先為嘉蔭等服務(wù)建站,嘉蔭等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為嘉蔭企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
通過前面系列有關(guān)QuickTest博文的介紹及操作,已經(jīng)對QuickTest有了一定的了解,本篇博文就通過實例圖文并茂的對QuickTest下的對象進行深入的了解與剖析。
1. QuickTest工作原理
通過前面陸續(xù)blog文章中有關(guān)QuickTest文章中的學(xué)習(xí),了解到 QuickTest 對錄制的測試對象進行分類,例如,標準 Windows 對話框 (Dialog)、Web 按鈕 (WebButton) 等。 QuickTest存儲對象與對象屬性的倉庫叫對象庫(Repository)。QuickTest錄制被測應(yīng)用程序時,錄制過程中所涉及到的對象均被添加到QuickTest對象庫中。
QuickTest錄制對象時,QuickTest會嘗試記錄對象的屬性與屬性值,并存放于對象庫中。對于每一個測試對象,QuickTest 對象庫中都有一組屬性及屬性值列表與之相對應(yīng)。在對象屬性列表中, QuickTest將選取一些屬性,選取的這些屬性組合必須能夠唯一描述(標示)該測試對象。QuickTest測試腳本回放過程中,根據(jù)對象庫中記錄的對像的屬性(或多個屬性列表組合),與回放過程中被測應(yīng)用程序中的對象進行對比。如找到相匹配的對象,則再按錄制過程的錄制的操作,使被測應(yīng)用程序中相匹配的對象執(zhí)行某些操作,如Set或Click等。
2. 初識測試對象
QuickTest測試對象庫是對象與對象屬性的集合,QuickTest 用對象與對象屬性來表示應(yīng)用程序中的對象。QuickTest記錄下來的每一個測試對象,均包括以下兩項內(nèi)容:
一個可以唯一標識該對象的屬性列表。
QuickTest錄制時對該對象所執(zhí)行的操作方法(動作)。
學(xué)習(xí)QuickTest測試對象還需要區(qū)別兩個重要概念:測試對象與運行時對象。
測試對象(Identification Properties):QuickTest 錄制過程中所錄制被測應(yīng)用程序中的對象稱為測試對象。QuickTest 使用測試對象標示被測應(yīng)用程序中對象,并存儲該對象屬性及屬性值,這些屬性幫助于QuickTest在運行(回放)會話期間標識和檢查被測應(yīng)用程序中的對象。
運行時對象(Native Properties):應(yīng)用程序運行(回放)會話過程中,實際運行的對象。
當添加一個對象到對象庫時,QuickTest 將進行以下幾步操作:
錄制QuickTest 對象,并創(chuàng)建相應(yīng)的測試對象與被測應(yīng)用程序中的對象相對應(yīng)。
讀取應(yīng)用程序中對象屬性的當前值,然后將屬性和屬性值列表與測試對象一起存儲到對象庫中。
確定測試對象名稱(一般使用測試對象某個重要屬性的值)。
QuickTest 將錄制過程中對測試對象執(zhí)行操作記錄在測試腳本中。
以QuickTest自帶的Flight訂票系統(tǒng)為例,測試場景如下:
表測試場景1
| 操作 | 數(shù)據(jù) | 期望結(jié)果 |
場景1 | 1. 輸入用戶名 2. 輸入密碼 3. 點擊OK | 正確的數(shù)據(jù) 用戶名/密碼 mercury/mercury | 正確登錄系統(tǒng) |
如圖所示,在錄制場景1過程中,當點擊Agent Name輸入域并輸入Mercury時,QuickTest將操作對象標示為WinEdit測試對象,同時將該對象的屬性和屬性值存放于對象庫中,在測試對象屬性列表中選取一個屬性值(Agent Name)作為WinEdit測試對象的名稱。QuickTest還將錄制過程中對 WinEdit對象執(zhí)行的Set方法記錄在測試腳本中。在關(guān)鍵字視圖右擊Agent Name對象,選擇“Object Properties…”,打開該對象屬性對話框。
對象屬性
如圖所示,場景1錄制完成后,在專家視圖中顯示的腳本。
專家視圖
回放測試腳本時,QuickTest 通過錄制過程中對象庫中對測試對象的描述(一組用于唯一標識該測試對象的屬性和屬性值)來標識應(yīng)用程序中的對象。測試對象及其屬性和屬性值的列表存儲在對象庫中。場景1錄制的測試腳本回放過程中,QuickTest 在對象庫中查找到WinEdit對象。QuickTest在被調(diào)用的應(yīng)用程序中查找與對象庫中WinEdit 對象相一致的對象,該對象為WinEdit,且屬性及屬性值包括:nativeclass=Edit,attached text=Agent Name。找到相匹配的對象后,該對象執(zhí)行Set操作方法。
注: 在某些情況下,即使對象的一些屬性值發(fā)生了變化,QuickTest 也能夠利用智能標識機制來標識對象。但是,如果知道某特定對象的屬性值發(fā)生了變化,應(yīng)嘗試糾正測試對象屬性或?qū)傩灾?,以?nbsp;QuickTest 可以根據(jù)其基本對象描述來標識該對象。 |
3. QuickTest對象庫
通常在QuickTest開展自動化過程中,都是將測試對象都是保存在對象庫中。QuickTest對象庫分為本地對象庫與共享對象庫。要選擇在哪里保存對象呢?先看不同測試場景之間的對比。
表測試場景1
| 操作 | 數(shù)據(jù) | 期望結(jié)果 |
場景1 | 1. 輸入用戶名 2. 輸入密碼 3. 點擊OK | 正確的數(shù)據(jù) 用戶名/密碼 mercury/mercury | 正確登錄系統(tǒng) |
表測試場景2
| 操作 | 數(shù)據(jù) | 期望結(jié)果 |
場景2 | 1. 輸入用戶名 2. 點擊OK | 正確的數(shù)據(jù) 用戶名 mercury | 提示請輸入密碼的錯誤信息 |
觀察場景2的錄制與前面錄制的場景1,有什么相同之處?又有什么異同之處?
相同之處即兩個場景它們都對對象AgentName、OK對象進行了操作,并且都在對象庫里記錄這兩個對象。不同之處是場景1由于錄制過程中對Password也進行了操作,因此對象庫中還存儲了 Password對象。我們此時是否應(yīng)該進行一些思考?讀者是否也在思考同樣的問題。既然AgentName、OK對象在兩個場景中都存在,是否可以將場景1中的兩個對象讓場景2調(diào)用使用呢?答案是肯定的。這也就是接下要講到的本地對象庫與共享對象庫。
本地對象庫:每個測試場景(Action)都有自己的對象庫,該對象庫則稱為本地對象庫。因此以往錄制的腳本使用的是什么對象庫呢?本地對象庫。
共享對象庫:通俗講即多個測試場景(Action)共用的一個對象庫。結(jié)合前面所學(xué)習(xí)的Action,就是多個Aciton公用一個對象庫,該對象庫稱為共享對象庫。
那本地對象庫與共享對象庫除了定義上的區(qū)別外,是否還存在其他方面的異同呢?
本地對象庫:是與Action相關(guān)聯(lián),本地對象庫主要以文件ObjectRepository.bdb與Resource.mtr存儲數(shù)據(jù)。每創(chuàng)建一個新的Action時會自動創(chuàng)建相應(yīng)的本地對象庫,同時創(chuàng)建生成這些文件。
共享對象庫:與本地對象庫的區(qū)別是,多個Action可以共用一個對象庫 —— 共享對象庫。共享對象庫可以以Tsr后綴名結(jié)尾。在復(fù)雜業(yè)務(wù)系統(tǒng)的測試框架中,建議使用共享對象庫。同樣,如因為業(yè)務(wù)復(fù)雜,對對象庫管理不合理,會造成對象庫冗余,后期維護工作復(fù)雜,Action運行速度慢等缺點。
因此,當設(shè)計和創(chuàng)建測試腳本時,首先必須考慮如何管理錄制過程中的測試對象。是使用本地對象庫,還是使用共享對象庫。那何時使用本地對象庫?何時使用共享對象庫呢?
針對以下情況建議使用本地對象庫:
創(chuàng)建單一操作測試腳本時。
不需要頻繁修改對象屬性時。
針對以下情況建議使用共享對象庫:
使用關(guān)鍵字驅(qū)動測試技術(shù)。
包含(創(chuàng)建)多個測試腳本、接口或?qū)ο笤O(shè)置的多個測試時。
需要經(jīng)常維護測試對象的屬性或有規(guī)律的更新測試對象屬性。
注: 本篇博文中剩下小節(jié)如未做特殊說明,則均是針對本地對象庫進行講解。 本篇博文附表1列出了對象庫窗口和對象庫管理器對于對象庫管理的不同的功能與特性。 |
3.1 對象庫窗口
“對象庫”窗口顯示錄制腳本過程中的所錄制的對象與對象的屬性。在整個測試過程中所錄制的對象在“對象庫”中以樹形結(jié)構(gòu)展示。在“對象庫”中可以使用對象屬性對話框查看或修改庫中任何測試對象的屬性,或者將新建對象添加到庫中。本博文仍然以錄制好的飛機訂票系統(tǒng)為例,對“對象庫”窗口進行講解。
“對象庫”窗口
如圖所示為錄制飛機訂票系統(tǒng)(Flight)完成后形成的對象庫。點擊QuickTest測試工具欄中對象庫圖標或點擊菜單欄【Resource】—【Object Repository….】打開當前測試腳本的對象庫。
對象庫
對象庫窗口左側(cè)為測試腳本錄制過程中所捕捉的對象(對象按樹狀展示)。
對象庫窗口右側(cè)頂部(Object Properties)顯示了某對象屬性的相關(guān)信息:
名稱(Name):QuickTest 分配給測試對象的名稱。
類(Class):對象所屬的類。
對象庫(Repository):對象庫類型(本地庫或共享庫)。
對象庫窗口右側(cè)下部(Test Object details)顯示了某對象的詳細屬性及屬性值。
描述屬性(Description properties):Description屬性及屬性值用于標識運行會話過程中的對象。在此可以添加和刪除維護測試對象的描述屬性。
QuickTest使用描述屬性來確定測試對象。如QuickTest回放過程中不能夠識別對象,可以通過添加、修改描述屬性或刪除描述屬性,以達到能夠識別回放時被測應(yīng)用程序中的對象。
順序識別碼(Ordinal identifier):順序識別碼以數(shù)值形式體現(xiàn),通過維護順序識別碼順序與位置可以區(qū)別與被測應(yīng)用程序中的其他相同對象(相同對象指多個對象的屬性及屬性值均相同)。
附加信息(Additional details):在測試腳本回放過程中,如果對象庫中對測試對象的屬性描述不能夠唯一確定被測應(yīng)用程序中的對象,可啟用智能識別。通過將智能識別設(shè)置為True或False來指定是否啟用QuickTest強制智能識別。
注: 本節(jié)只對對象庫中現(xiàn)有對象的“對象屬性”進行講解。而未存儲在對象庫中,對象的“對象屬性”則在后續(xù)的文章進行講解 |
如圖所示,為本篇博文錄制飛機訂票系統(tǒng)(Flight)(測試場景1)的對象庫中,選擇Agent Name對象后的對象屬性框(Object Properties)。對象屬性的各個組成部分已在對象庫窗口中進行詳細解釋,在此不再復(fù)述。
對象屬性
4. 編輯與修改對象屬性
隨著被測對象(應(yīng)用程序或網(wǎng)站)的變化,最初錄制測試腳本中的對象可能在新發(fā)布的Build中已發(fā)生了變化。如果不對對象庫中相應(yīng)的測試對象做出更改,則測試腳本回放時肯定會失敗。因此,當測試對象在新發(fā)布的Build中已發(fā)生了變化,則需要對對象庫中相應(yīng)測試對象的屬性或?qū)傩灾颠M行維護。
假如,錄制完測試場景1(飛機訂票系統(tǒng)(Flight))測試腳本后,又發(fā)布了新的Bulid,而新版本中Agent Name對象的“attached text”屬性的屬性值發(fā)生了變化,由“Agent Name”變?yōu)榱恕癗ame””。由于其對象屬性值的變化,測試腳本回放時停止在“Agent Name”操作步驟處,彈出錯誤提示信息并停止運行測試腳本。
出現(xiàn)錯誤提示信息后,又該如何處理呢?通用的方法是維護對象庫中的對象屬性。
1. 如圖所示,打開測試場景1的對象庫。在對象庫窗口對象樹中選擇“Agent Name”對象。在對象庫窗口右側(cè),描述屬性(Description properties)中“attached text”屬性值區(qū)域單擊鼠標左鍵,此時其屬性值區(qū)域變?yōu)榭删庉嫚顟B(tài)。將“attached text”屬性值由“Agent Name”更改為“Name”。然后回放修改對象屬性后的測試腳本,此時看到可以觀察到測試腳本成功回放。
修改對象屬性
2. 如圖所示,除了使用步驟1的方式來維護對象屬性外,還可通過查找替換來更改對象的屬性。如將步驟1中“attached text”屬性值由“Name”再修改為原來的“Agent Name”。點擊對象庫窗口工具欄中的查找\替換圖標,彈出查找\替換窗口,填寫相應(yīng)查找對象的屬性及屬性值及替換后相應(yīng)屬性的屬性值,點擊替換,則可以觀察到“attached text”屬性值由“Name”被修改為原來的“Agent Name”。
查找/替換對象屬性
注: 如果希望搜索時查找與輸入的單詞完全匹配,請選擇“Match whole word”。 如果希望搜索時區(qū)分大小寫字母,請選擇“Match case”。 |
有些時候,測試腳本回放失敗,并不是最初錄制測試腳本中的對象在新發(fā)布的Build中發(fā)生了變化引起的。而是由于以前對象庫中對該對象的屬性描述,再新發(fā)布的被測應(yīng)用程序中無法唯一確定被測對象。此種情況,需要添加對該對象的屬性描述。 如下舉例說明。
1. 如圖所示,測試腳本在新發(fā)布的Bulid中回放失敗,而失敗的原因是某對象的現(xiàn)有屬性,不足以在新的bulid中確定或標示該對象??梢酝ㄟ^添加對象屬性來維護測試對象。在對象屬性窗口,點擊彈出對象的其他屬性,為選定對象添加其他的屬性及屬性值。添加完畢,調(diào)試測試腳本,可看到測試腳本成功回放。
添加屬性
5. 添加對象到對象庫
假如需要對測試腳本驗證的思路進行調(diào)整。博文中使用的場景1與場景2,對測試場景的錄制順序進行調(diào)整,先錄制了測試場景2。場景1錄制過程中,只是比場景2多了對Password對象的操作。那能否不錄制場景1,而在場景2的基礎(chǔ)上做些操作,從而滿足場景1的需要呢?學(xué)習(xí)了本節(jié)添加對象知識后,則可以實現(xiàn)由場景2變?yōu)閳鼍?的需求。
假設(shè)某場景驗證內(nèi)容為打開飛機訂票系統(tǒng)登錄框,輸入用戶名、密碼,點擊取消而不是確定,目的是為驗證是否能正常退出。那如何對已有的測試腳本進行調(diào)整呢?是否需要重新錄制腳本呢?可以通過添加對象到對象庫,并且在關(guān)鍵字視圖中調(diào)整關(guān)鍵字順序來實現(xiàn)。
添加對象有多種途徑,主要有如下兩種方式:
利用“Active Screen”添加對象。
利用對象庫添加對象。
1. 如圖所示,在“Active Screen”窗口中在“Cancel”所在位置右鍵單擊,在右鍵列表中點擊“View/Add Object”。
添加對象
2. 如圖所示,第一步點擊“View/Add Object”后彈出“Object Selection”對話框?!癘bject Selection”對話框中選擇添加的對象(Cancel)。
選擇對象
3. 如圖所示,“Object Selection”對話框中點擊【ok】打開“Object Properties”窗口。
對象屬性
4. 如圖所示,點擊【Add to Repository】按鈕,可以看到【Add to Repository】變?yōu)榱恕綱iew in Repository】。
對象屬性
5. 如圖所示,點擊【View in Repository】進入對象庫,在對象庫中,可以觀察到對象庫中左側(cè)對象樹中,多了“Cancel”對象。
對象庫
6. 如圖所示,在關(guān)鍵字視圖中,選中“OK”操作對象所在行,可以看到“OK”關(guān)鍵字右側(cè)出現(xiàn)了下拉箭頭,在下拉對象列表中選中“Cancel”對象。
更改操作對象
7. 如圖所示,將“OK”對象替換為了“Cancel”對象后。回放測試腳本,回放過程中可以觀察到飛機訂票系統(tǒng),輸入用戶名、密碼,點擊取消而不是確定。
關(guān)鍵字視圖
6. 刪除對象
對象庫中除了可以編輯、修改、添加對象外,當然也能完成簡單的刪除對象操作。
相對于添加對象,刪除對象,就較容易理解。博文一直使用的測試場景1與測試場景2,場景1相比于場景2,僅僅多錄制了Password對象及對該對象的操作。如果不錄制場景2,是否能夠?qū)崿F(xiàn)由場景1變?yōu)閳鼍?呢?答案是肯定的,在場景1中刪除Password對象,并在關(guān)鍵字視圖中調(diào)整場景1的測試腳本,即可實現(xiàn)由場景1變?yōu)閳鼍?。
1. 如圖所示,打開場景1對象庫,在對象庫中左側(cè)對象樹中選中Password對象。
選擇對象
2. 如圖所示,右擊Password對象,選擇Delete,刪除Password測試對象。
刪除對象
3. 如圖所示,打開場景1關(guān)鍵字視圖,在關(guān)鍵字視圖中,刪除Password對象所在的操作行。
添加操作對象
4. 將場景1另存為場景2的測試腳本,此時,已完成由場景1至場景2的變化。省去了場景2錄制的時間,提高了測試工作效率。
7. 附表1