Windows平臺自動化測試工具基於的一些技術簡介(筆記)

iteye_21202發表於2013-05-12

GUI: 使用者圖形介面。

1. Windows API

FindWindow, EnumWindows可用於查詢到視窗控制程式碼。

GetWindowText, GetWindowRect, GetWindowLong可用於獲取視窗屬性。

SetWindowText, GetWindowText可用於操作控制元件上顯示的文字。

SetForegroundWindow用於設定頂層視窗。

GetForegroundWindow用於獲取當前的頂層視窗。

GetActiveWindow

SetActiveWindow

...

優點:對標準Windows的控制元件支援還不錯,較底層。

缺點:底層意味著複雜,需要多層的封裝,開發效率低下,對Windows API的完全依賴。對非標準(自定義)控制元件,較難實現自動化,就算實現了程式碼不穩定,維護和分析結果的成本也很高。

2. MSAA——Microsoft Active Accessibility

IAccessible,本身是一個Com元件,最主要的是其介面提供的方法可以獲取控制元件更詳細的資訊,也可以通過一些方法對控制元件進行簡單的操作。

優點:使用者只需跟IAccessible打交道,通過這個介面能獲得的控制元件資訊相對豐富,基本操作也不需要通過Windows Message的方式來實現。另外一個較大優點是自定義控制元件的支援。開發自定義控制元件時可以實現IAccessible的介面,並且通過這個介面,把一些屬性的操作暴露出來,測試人員就可以將這個控制元件當做標準控制元件,並用MSAA來自動化。

缺點:並非為自動化測試設計,獲取到的控制元件資訊比Windows API多,但仍對自動化測試不夠,僅支援一個基本操作,其它的仍需Windows Message。

3. UIAutomation

從架構上說UIA針對標準控制元件時通過UI Automation Proxy呼叫了MSAA Server,基本覆蓋了MSAA功能。

UI Spy是UIA的一個小工具。

與MSAA比較:

1)Tree.broken Exception,維護成本提高

2)只能用.Net語言來寫,執行在.Net託管堆中->效能差異

3)MSAA支援程式內操作

UIA未定義支援,使用可能有效能問題

4)自定義控制元件支援好

4. Window Automation API 3.0

是對UIA和MSAA的升級。

Windows 7對自動化測試的支援將會更好。可用Managed Code和Unmanaged Code,基本解決上面UIA的問題。

Managed Code(託管程式碼) vs Unmanaged Code(非託管程式碼):

在公共語言執行庫環境的外部,由作業系統直接執行的程式碼稱為非託管程式碼,它必須提供自己的垃圾回收、型別檢查、安全支援等服務,它與託管程式碼不同,後者從公共語言執行庫中獲得這些服務,而非託管程式碼是在執行庫之外執行的程式碼。例如Com元件、Active X介面、和Win32 API這些都是非託管程式碼的示例。

自動化測試的實質是為了快速、高效地發現和預防迴歸缺陷,並非發現新缺陷(Test Monkey除外)。旨在解決成本問題。

UIAutomation無法產生滑鼠、鍵盤事件->可用Win API

UI Spy使用:

焦點跟蹤、懸停,注意run as Admin,可獲得以下內容:

1)UI項和UI自動化屬性值

2)控制元件模式實現

3)UI自動化事件資訊

4)導航和鍵盤焦點

注意IE 8以上版本IE開啟會有兩個程式,大的為主程式,用於正在瀏覽的網頁,小的是輔助程式,用於網頁錯誤時恢復並reopen。

從UI 測試自動化的角度來看,意味著所測試的應用程式被稱為伺服器,測試工具被視為客戶端。

UIAutomationClient.dll庫實際上就是UI自動化客戶端使用的測試自動化庫。

UIAutomationTypes.dll庫包含UIAutomationClient.dll和其它自動化伺服器庫使用的各種型別的定義。

UIAutomationClientSideProvider.dll包含一組與構建時不支援自動化的控制元件配件配合使用的程式碼,這些控制元件可能包括舊式控制元件和自定義的.NET控制元件。

UIAutomationProvider.dll庫是一組介面定義,可供建立自定義UI控制元件和希望控制元件被UI自動化庫訪問的開發人員使用。

TreeScope是個列舉型別:

Element, Children, Descendants, Parent, Ancestors, Subtree(包含搜尋的根和全部子代)

System.Windows.Automation.AndCondition代表一個與條件

System.Windows.Automation.NotCondition

System.Windows.Automation.OrCondition

System.Windows.Automation.PropertyCondition測試屬性是否具有指定的值

相關文章