作者:萌萌
說到UI自動化測試,大多數人第一反應就是移動端UI測試;但是隨著產品的不斷迭代和發展,我們的業務往往會不再局限於移動端,而是向PC端+web端+移動端(甚至是不同pc上的不同模擬器端)全方位發展。
因此,本篇文章,小編帶領大家認識幾種基於windows系統的UI自動化框架(appium/AirTest/pywinauto),並分析其各自的優劣。
Appium
相信只要了解過一點UI自動化測試的朋友,一定不會對Appium感到陌生。作為移動端UI自動化界的元老和王者,appium幾乎是所有UI自動化測試和UI自動化框架嵌套的首選。那麼這位老牌選手在Windows UI自動化測試上表現如何呢?
官網文檔說明:http://appium.io/docs/en/drivers/windows/
基於屬性定位進行腳本編寫,通過埠連接WebDriverAgent驅動微軟自身的WinAppDriver,對於本機App進行佔用和操作。
【部署環境】依賴於Microsoft WinAppDriver
需要windows電腦開啟開發者模式
支持系統版本
appium-Desktop 或 命令行安裝appium,在執行腳本時需要運行appium-server。
鍵盤操作插件等:
【支持控制項屬性】【優點】對於從移動端跨端測試的朋友,語法和操作熟練。
支持多種語言,Java, C#, Python等主流語言均能支持。
可以利用程式語言特性,集成第三方庫,易於進行其他功能的拓展。
【缺點】基於移動端ui測試改造,可能因此對於QT應用的的ID識別較差;accecibility_id 理論上支持 autoid定位,但是由於qt的id過長所以支持能力很差,無法找到對應控制項。
鍵盤輸入方面,存在清除文本框內內容失效的問題;無論是appium原生文本輸入還是pywin32的鍵盤模塊輔助輸入,文本框超長文本依然存在清除不乾淨的問題。
支持windows平臺版本過新:對於windows端的版本僅支持10以上,因此不支持win7,win8,winXp,等低端機的兼容性測試。
官網介紹較少,並沒有很多的相關文檔可以查閱,上手速度較慢。
對於多個活動窗口的應用或進程支持較差:例如,有些測試app需要通過守護線程啟動app以記錄運行日誌,而appium默認監測的就是埠對應窗口。
Airtest
AirtestProject是由網易遊戲推出的一款自動化測試框架,項目構成如下:
Airtest:是一個跨平臺的、基於圖像識別的UI自動化測試框架,適用於遊戲和App,支持平臺有Windows、Android和iOS。
Poco:是一款基於UI控制項識別的自動化測試框架,目前支持Unity3D/cocos2dx-*/Android原生app/iOS原生app/微信小程序,也可以在其他引擎中自行接入poco-sdk來使用。(暫不支持windows app)
官方文檔說明:https://airtest.doc.io.netease.com/tutorial/7_Windows_automated_testing/
【簡單原理】基於錄製和圖像識別進行腳本編寫,通過埠連接指定windows窗口並進行定位和執行,底層操作的接口封裝了Pywinauto庫。
【部署環境】AirtestIDE:跨平臺的UI自動化測試編輯器,內置了Airtest和Poco的相關插件功能,能夠使用它快速簡單地編寫Airtest和Poco代碼。
註:實際為python Ide的封裝,編輯器除自身腳本外也支持純.py腳本的創建。
支持windows 32位,windows 64位, MacOS, UBuntu作業系統環境。
【支持控制項屬性】Airtest基於圖像識別,因此對於控制項的識別屬性大多為截圖畫面的畫面屬性。截圖後本地會保存當時識別的圖片作為運行的特徵屬性。
【優點】【缺點】埠連接不穩定,可能造成經常中斷。(使用感受)
由於僅基於圖像識別控制項,對於多個無明確標誌的複選框等,沒有非常好的手段進行定位。例:同一個界面有多個單獨的複選框,無其他標誌,對於airtest識別點錯機率很高。
由於只有圖像匹配而沒有ocr相關功能,因此無法讀取界面上TEXT作為參數。例:需要讀取界面上的可變文字作為變量時,純airtest目前無很好的方法支持。對於移動端而言Poco(https://poco.readthedocs.io/zh_CN/latest/)可以解決這類問題,但是需要提前接入sdk,接入成本相對大。對於windows端而言poco尚不支持,故此類場景暫不適用於Airtest Windows。(網易正在開發中,如感興趣也可以持續關注)
pywinauto
pywinauto一組用於Microsoft Windows GUI的自動化測試的python第三方庫,包含窗口對話框的滑鼠,鍵盤的操作以及相關控制操作。於2006年1月6日首次發布,並目前持續更新到2019年10月27日。
官方文檔連結:https://pywinauto.readthedocs.io/en/latest/
代碼倉庫:https://github.com/pywinauto/pywinauto
【簡單原理】底層包括了pyWin32,comtypes,six,Pillow(截圖部分)等其他倉庫,和appium類似通過控制項樹屬性匹配的方式進行控制項的識別和操作,通過類似binder方式進行App進程的訪問和控制。
【部署環境】Python環境---python2 python3 均支持。
支持手動安裝,pip安裝和conda安裝。
【支持控制項屬性】支持模糊匹配控制項屬性
自帶control_id列印和匹配工具,可以通過列印頁面下的控制項樹獲取對應控制項的定位屬性,一般包括auto_id, text, title, type等屬性。
【優點】配置環境簡單,僅需要python安裝庫,並可一鍵pip安裝。
支持模糊匹配、支持活動窗口切換。
對於QT Apps這種超長Auto_id的支持友善。
可以通過auto_id獲取任何其他屬性作為變量。
自帶鍵盤和滑鼠支持,對於不能點按的控制項也可通過滑鼠控制進行進一步的操作。
支持多種控制項wrapper,並定製了不同功能方便使用(例如Combox的直接選擇選項ComboBoxWrapper.Select,直接統計選項個數ComboBoxWrapper.ItemCount等)。
【缺點】編程門檻相對高(高於Airtest)。
文檔教程不多,魔法模糊匹配其實沒有想像的準確,而對於其他控制項定位方式文檔講述的不夠明確,造成入門時間較長的問題。(故歡迎持續關注下一期windowsUI專題的pywinauto實戰教程❤️)
由於是python的第三方庫,故目前僅支持python環境,並不支持Java, C#等其他主流語言。
其餘windows-ui相關框架
相關資料和連結
感興趣的讀者可參考以下連結進行進一步學習和比較(列表摘錄自pywinauto文檔):
Python tools
Lackey - a pure Python replacement for Sikuli (based on image pattern matching).
AXUI - one of the wrappers around MS UI Automation API.
winGuiAuto - another module using Win32 API.
Other scripting language tools
(Ruby) Win32-Autogui - a wrapper around Win32 API.
(Ruby) RAutomation - there are 3 adapters: Win32 API, UIA, AutoIt.
Other free tools
(C#) TestStack.White - another good MS UI Automation based library with a long history.
AutoIt - free tool with its own Basic-like language (Win32 API based, no .NET plans)
AutoHotKey - native C++ tool with its own scripting language (.ahk)
「Awesome test automation」 list on GitHub
A big list of open source tools for functional testing
Commercial tools
SilkTest (http://www.segue.com/products/functional-regressional-testing/silktest.asp)
Many Others (http://www.testingfaqs.org/t-gui.html)