1.9.2. 論對象識別機制
QTP工具在管理對象庫方面是成功的,對象管理的結構很清晰,也很簡單,對于開發人員來講易于管理和使用,例如:對象的關聯方法、對象的定義、對象的識別處理機制。個人覺得這些都是QTP工具上的亮點。以前,網上論壇常有人在爭論描述性識別對象方法和對象庫識別對象方法的優劣之分,其實,在我看來,二者本無優劣之分,僅有在特定的情況下,那種方法更適用,更方便腳本的開發。此處,我總結下我的看法:
1) 描述性對象識別方法:使用簡單、體現直觀、易于理解、處理靈活,在小規模項目和簡單的對象識別上可以考慮使用,但是前提是對象在后期不會變更,否則隨之帶來的是大量的維護任務。
2) 對象庫識別方法,科學管理、識別機制更強大、適用于大型的自動化項目開發,多人協作模式,以及項目對象頻繁變更的場景下。一般是推薦使用對象庫來管理識別對象,更有利于整個項目的管理。
上述二者之關系,好比一個是摩托車(描述性方法),一個是轎車(對象庫管理),都可以用來處理對象識別,因為他們都是用發動機引擎,不過發動機的引擎規格不同,決定了它們的性能不同。摩托車固然靈活輕巧,容易駕駛上手,但是安全性不足,上了高速容易出事故,拋頭顱,灑熱血!而轎車呢,成本高,得先考駕照吧,即掌握使用方法,然而,相比摩托車,其速度更快、安全性更高(安全氣囊)、行程更遠。
另外,引用上述比喻,轎車也非萬能,跑高速路上很優秀,但是走山路呢?這里想說明一個問題,對于產品的web對象可識別度不高、開發人員無法給與支持配合的情況下,對象庫的使用也容易出現不靈光的現象,畢竟QTP對象庫提供的識別技術有限。解決辦法?請挽起袖子自己造輪子吧!這也是定義對象庫文件【XXX_Object.vbs】的目的之一,對于識別難的對象(包括識別不到和識別速度慢),可以采用DOM方法封裝函數對象的方式處理。這個方法目前在多個項目中被使用,效果比較好,因為這樣即利用了對象庫的優點,也提高了對象識別的靈活度。
1.9.3. 公共對象庫的管理方法
對于新手,往往對對象庫管理比較不感冒,使用過程也常頭疼,覺得寫個腳本中間還隔著個對象庫,不論編寫或維護腳本都比較麻煩。但是隨著學習的深入以及經驗的積累,對于QTP對象庫會更為準確的認識。
本人在這三年來積累的一些相關認識記錄下來供大家參考:
1) 使用對象庫,必須先掌握對象識別機制,否則一定管理不好對象庫。例如測試對象中的Web控件類別、每一類對象常用到幾種定位屬性、對象識別的優先順序和策略等。
2) 對象庫的目錄樹需要合理規劃,正常情況下可以按照頁面的功能排布來劃分,如果存在特殊的對象,如上傳彈窗,頁面彈窗等,也可以根據對象的類別獨立出來管理。良好的對象庫目錄樹分類有助于腳本的編寫和對象庫的維護。
3) 對象命名的方式也需要統一準確,避免和其他模塊的對象名稱相混淆。對于集合類的對象需要做出特征標示,標示該對象屬于集合對象、可以通過定義屬性來定義對象。其次,良好的命名風格,可以使對象在目錄樹中分門別類清晰排布,如果隨意命名,對象顯示會呈現散亂不易管理。
4) 對象添加到對象庫后,需要對特征屬性進行重新確認并編輯,因為QTP默認識別到的對象屬性不一定是最優方案,需要根據項目的對象特點采用最為穩定的特征屬性。另外,對于使用定位屬性(Index、Location、CreateTime)這類的對象,一定要慎重!多考慮在不同場景下,對象的定位是否準確。
5) 對象庫中的定位屬性,并不是越多越好,也不是越少也好,而是應該從穩定和識別速度上來取舍。
6) 通過對象庫工具添加對象不一定能定位到屬性,此時,可以使用FireBug這類工具來查看對象代碼,通過分析代碼抓取有效的特征值。
7) 靈活運用對象定位屬性值的正則匹配方法,對于某些特征值,雖然不固定,但是有一定的規律,此時可以使用正則表達式來匹配,往往會有驚喜!
1.10. 設計腳本批量執行
1.10.1. 概念說明:
腳本批量執行就是根據給定對配置,調用執行工具對多個腳本進行遍歷執行,并將執行對結果保存到指定對位置以供分析。
1.10.2. 批量執行方法
原文轉自:http://www.uml.org.cn/Test/201304163.asp