【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践
生活随笔
收集整理的這篇文章主要介紹了
【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在界面自動化測試領域里存在許多流行的自動化測試工具,例如目前比較受歡迎的開源自動化工具Selenium、Katalon;HP旗下知名的商業軟件Unified Functional Testing(更名前叫QTP);隸屬于IBM以數據驅動測試的RTF(Rational Functional Tester)等等,這些“明星”測試工具在網上有大量學習資料,可以很容易地查找到,這里就不多介紹了。今天想要給大家介紹一款較少被人們熟知而又比較實用的自動化測試工具——微軟UIAutomation。
在UIAutomation的體系結構中,UIAutomationProvider.dll和UIAutomationTypes.dll主要負責的是服務端,UIAutomationClient.dll和UIAutomationTypes.dll主要負責的是客戶端,UIAutomationCore.dll作為UI自動化的核心部分,主要負責服務端和客戶端的交互,而UIAutomationClientSideProvides.dll主要為客戶端程序提供自動化支持。
Inspect工具啟動后,界面呈現主要有兩部分,其中左面的樹狀圖顯示了各個控件或窗體的父子關系,可以看到其根節點顯示為“桌面窗格”;將鼠標直接移動到樹狀圖中的每個元素上,即可以在右面的框架中看到相應元素的屬性,比如有Name(元素內容的名稱)、AutomationId(唯一的標識元素、將其與同級區分)、ControlType(控件的類型)等等。Inspect工具的頂部是功能欄區域,界面顯示如圖3所示。(圖3 Inspect功能欄)
其中的功能是定位到當前元素;的功能是復制當前元素的所有屬性;的功能是顯示/隱藏數結構;這些按鈕從左到右的作用依次是:找到父節點、找到第一個子節點、前一個兄弟節點、下一個兄弟節點、最后一個子節點,我們可以根據這些按鈕來尋找相對應位置的元素。在實際的測試過程中,我們可以直接將光標移動到要定位的元素,Inspect右側窗口就可以直接顯示對應元素的所有屬性,具體情況如圖4所示。(圖4 測試過程中元素屬性獲取)
在顯示的所有屬性中,我們主要用到ClassName、AutomationId/Name、Ancestors(父級信息)屬性,有時會根據不同系統的需求,還需要獲取ControlType屬性。當獲取到的ClassName中含有數字時,可以用ControlType屬性替換ClassName屬性。我們把全部元素的主要屬性存儲在execl文件中,這樣就完成了對象元素自動化定位信息的積累。完成對象定位之后,就可以通過C#等語言編寫自動化測試腳本,驅動界面對象完成界面自動化測試,如下圖5所示:(圖5 編寫自動化測試腳本)
通過上述方式編寫自動化測試腳本,比較靈活。對于經驗豐富的編程人員來說,入門比較快。但是它無法規避界面自動化測試領域普遍存在的入門門檻高、資產積累代價高、環境切換易失效、人員切換易失效、對象變更修復代價高、測試邏輯變更修復代價高等行業痛點問題。針對這些痛點問題,中國農業銀行研發中心定義了一套基于自然語言的、簡單易懂的、滿足行業最高標準的自動化測試描述語言——“商語言”,使得普通業務背景的測試人員可以快速寫出高可維護的自動化測試案例,自動轉化為QTP/UIAutomation/Selenium腳本執行。具體技術方案,后續另行撰文介紹。
一、微軟UIAutomation簡介
UIAutomation是由微軟開發的界面自動化測試工具,是.NET Framework的組件之一,可進行C/S類應用的界面自動化測試。此自動化庫一開始就是為可訪問性和UI測試自動化任務而專門設計的,使用UI自動化庫來測試運行支持.NET Framework的操作系統,例如Windows XP、Windows Vista、Windows 7、Windows Server 2003和Windows Server 2008等操作系統主機上的Win32應用程序、.NET Windows窗體應用程序和WPF應用程序。在UIAutomation中,所有的窗體、控件都表現為一個AutomationElement,AutomationElement中包含此控件或窗體的屬性,在實現自動化的過程中,通過其相關屬性進行對控件自動化操作。所有顯示在桌面上的UI,實際上是一個UIAutomation樹,它有一個根節點,表示的是當前桌面。通過根節點,可以通過窗體或控件的Process Id、Process Names或者Windows Name找到相應的子AutomationElement,例如Dialog、Button、TextBox、CheckBox等標準控件,通過控件所對應的Pattern進行相關的操作。UIAutomation樹不是一個固定的結構,它其中的一部分是在需要時構建的,并且可以在添加、移動或刪除元素時進行更改。UIAutomation的體系結構如圖1所示:(圖1 UIAutomation的體系結構)在UIAutomation的體系結構中,UIAutomationProvider.dll和UIAutomationTypes.dll主要負責的是服務端,UIAutomationClient.dll和UIAutomationTypes.dll主要負責的是客戶端,UIAutomationCore.dll作為UI自動化的核心部分,主要負責服務端和客戶端的交互,而UIAutomationClientSideProvides.dll主要為客戶端程序提供自動化支持。
二、UIAutomation實踐
通過調研,發現目前支持UIAutomation的UI元素識別工具主要有兩種:UISpy和Inspect。經過實際使用對比,發現UISpy有時候無法獲取部分窗體或控件元素,而Inspect可以比較全面地識別窗體和控件元素,所以推薦使用Inspect作為識別UI元素的工具。Inspect工具大小不到1Mb,無需安裝,可以在網上很容易搜到。下載完畢之后,啟動Inspect工具,具體的界面如下圖2所示。(圖2 Inspect主界面)Inspect工具啟動后,界面呈現主要有兩部分,其中左面的樹狀圖顯示了各個控件或窗體的父子關系,可以看到其根節點顯示為“桌面窗格”;將鼠標直接移動到樹狀圖中的每個元素上,即可以在右面的框架中看到相應元素的屬性,比如有Name(元素內容的名稱)、AutomationId(唯一的標識元素、將其與同級區分)、ControlType(控件的類型)等等。Inspect工具的頂部是功能欄區域,界面顯示如圖3所示。(圖3 Inspect功能欄)
其中的功能是定位到當前元素;的功能是復制當前元素的所有屬性;的功能是顯示/隱藏數結構;這些按鈕從左到右的作用依次是:找到父節點、找到第一個子節點、前一個兄弟節點、下一個兄弟節點、最后一個子節點,我們可以根據這些按鈕來尋找相對應位置的元素。在實際的測試過程中,我們可以直接將光標移動到要定位的元素,Inspect右側窗口就可以直接顯示對應元素的所有屬性,具體情況如圖4所示。(圖4 測試過程中元素屬性獲取)
在顯示的所有屬性中,我們主要用到ClassName、AutomationId/Name、Ancestors(父級信息)屬性,有時會根據不同系統的需求,還需要獲取ControlType屬性。當獲取到的ClassName中含有數字時,可以用ControlType屬性替換ClassName屬性。我們把全部元素的主要屬性存儲在execl文件中,這樣就完成了對象元素自動化定位信息的積累。完成對象定位之后,就可以通過C#等語言編寫自動化測試腳本,驅動界面對象完成界面自動化測試,如下圖5所示:(圖5 編寫自動化測試腳本)
通過上述方式編寫自動化測試腳本,比較靈活。對于經驗豐富的編程人員來說,入門比較快。但是它無法規避界面自動化測試領域普遍存在的入門門檻高、資產積累代價高、環境切換易失效、人員切換易失效、對象變更修復代價高、測試邏輯變更修復代價高等行業痛點問題。針對這些痛點問題,中國農業銀行研發中心定義了一套基于自然語言的、簡單易懂的、滿足行業最高標準的自動化測試描述語言——“商語言”,使得普通業務背景的測試人員可以快速寫出高可維護的自動化測試案例,自動轉化為QTP/UIAutomation/Selenium腳本執行。具體技術方案,后續另行撰文介紹。
【作者簡介】王喚宇
中國農業銀行研發中心系統支持部 測試工程師 主要從事自動化測試以及自動化測試技術研究的相關工作。積極樂觀,勤奮好學,生命不息,奮斗不止。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【DevOps进行时】C/S端界面自动化测试:微软UIAutomation实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C】KoobooJson在asp.ne
- 下一篇: 代码编辑器横评:为什么 VS Code