Windows-UI自動化:如何選擇合適的測試框架

2021-02-14 字節質量保障團隊

作者:萌萌

說到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) 

相關焦點

  • APP UI自動化測試思路總結
    相對於其他語言,Python做自動化測試有以下優點:二,UI測試框架選擇選擇編開發語言之後,我們需要選擇UI測試框架。目前較為主流或者使用較多的APP UI自動化測試框架有Appium、Airtest等。
  • APP UI自動化測試,思路全總結在這裡了
    一般我們會選擇自己熟悉的程式語言來編寫自動化腳本,但對於編程基礎基本為0的童鞋(或者專注於做自動化測試的童鞋),推薦學習使用Python。相對於其他語言,Python做自動化測試有以下優點:選擇開發語言之後,我們需要選擇UI測試框架。目前較為主流或者使用較多的APP UI自動化測試框架有Appium、Airtest等。
  • 測試工程師必須要學會的APP UI 自動化都在這裡了!
    一般我們會選擇自己熟悉的程式語言來編寫自動化腳本,但對於編程基礎基本為0的童鞋(或者專注於做自動化測試的童鞋),推薦學習使用Python。相對於其他語言,Python做自動化測試有以下優點:選擇編開發語言之後,我們需要選擇UI測試框架。目前較為主流或者使用較多的APP UI自動化測試框架有Appium、Airtest等。
  • 移動APP自動化測試框架對比
    從分層測試的角度,自動化測試應該逐層進行。最大量實現自動化測試的應該是單元測試,最容易實現也最容易在早期發現問題;其次是接口級測試,以驗證邏輯為目的進行自動化,由於接口的相對穩定,自動化測試成本相對也可以接受;自動化成本最大的便是UI級自動化測試,然而UI界面是直接反饋給用戶的效果展示,適度的尤其是BVT級的自動化測試也是非常必要的。
  • UI自動化測試框架
    本篇要講的是Android自動化測試框架UiAutomator。
  • 5分鐘了解自動化測試,自動化優勢、劣勢、工具和框架選擇全剖析
    5、前期自動化實施應避開複雜度極高的模塊如何實施自動化測試1、獲取信息和測試需求分析:總體把握系統架構和設計,分析出系統的測試需求。2、設計:設計測試用例,並且挑選出需要自動化實現的測試用例。3、實現:編寫、調試和實現測試腳本。4、執行:執行腳本的過程,需要不斷分析執行過程中的異常。
  • 自動化測試學習路線
    當然呢,我很能理解小白的想法,因為平時經常和一些剛入門自動化測試的同行交流,也很深入的了解到他們的一些困惑。大部分小白想的無非是以下幾點問題:1.自動化測試好學嗎?2.不學/不寫代碼能做自動化測試嗎?3.怎樣學習自動化測試?4.學自動化測試要先學習哪個方向?學ui自動化?還是接口自動化?好像App自動化也比較火?要麼再來個小程序自動化?
  • ZenTaoATF 1.0 發布,禪道自動化測試框架
    大家好,我們非常自豪的向大家推出我們禪道開發團隊開發的自動化測試框架——ZenTaoATF(zentao auto
  • 全網最全最細的appium自動化測試環境搭建教程以及appium工作原理
    appium 自動化測試是很早之前做的,一直想留下點什麼,可是一直抽不出一塊完整的時間來做這件事兒。現在終於有了。反觀各種網際網路的招聘,移動測試已經成了主流,如果再不去學習移動自動化測試技術將已經追不上時代的趕腳!好了,廢話不多說,進入正題!二、Appium簡介
  • 淺談BDD下的自動化測試框架
    本文將通過簡單的例子,向大家展示如何使用Cucumber 描述需求,編寫、執行測試用例,並輸出測試報告。目前,支持BDD自動化測試的框架有很多,且支持各種不同的語言,例如:Cucumber:基於Ruby編寫的自動化測試框架,支持Java和.Net等多種語言Behave/Lettuce/Freshen: Python style的測試框架Jbehave/ beanSpec :基於Java編寫的自動化測試框架SpecFlow:.Net測試框架
  • 自動化測試常用的Python框架有哪些?
    自動化測試常用的Python框架有哪些?常用的框架有Robot Framework、Pytest、UnitTest/PyUnit、Behave、Lettuce。Python測試框架Behave允許團隊避開各種複雜的情況,去執行BDD測試。從本質上說該框架與SpecFlow和Cucumber相似,常被用於執行自動化測試。用戶可以通過簡單易讀的語言來編寫測試用例,並能夠在其執行期間粘貼到代碼之中。而且,那些被設定的行為規範與步驟,也可以被重用到其他的測試方案中。
  • 如何成為軟體自動化測試工程師
    由於,崗位需求量大,薪資高的特點,軟體自動化測試工程師已經是當下最熱門的職業之一。如何成為軟體自動化測試工程師呢?只要學習和掌握了相關的技能,就可以成為軟體自動化測試工程師。那麼,具體需要掌握哪些技能呢?不同類型的軟體自動化測試,對於崗位所需的技能要求各不相同。
  • Android APP自動化測試框架實戰
    1、為什麼需要使用框架實現自動化測試  作為測試工程師,可能在代碼能力上相比開發工程師要弱一點
  • Python自動化測試踩坑記錄(企業中如何實施自動化測試)
    我總結了幾點:1.根據業務特點,選擇自動化測試方案。⒉.根據業務側重點確認自動化覆蓋範圍和粒度。3.根據自動化測試用例範圍,選擇實現框架和語言。4.根據用例用途,選擇執行策略。你在一個公司,你的產品是什麼樣子的,根據你產品的業務特點,你去選擇確定一個自動化測試方案,這個很重要。
  • Android常用6種自動化測試框架對比?
    App的回歸測試用例數量也越來越多,全量回歸也越來越消耗時間。為了擺脫這些,需要引進一些自動化測試來協助我們。趁現在有空我來總結下,Android常用的幾種自動化測試框架的異同,使測試人員在選擇自動化框架時有所參考!
  • Appium 必須掌握的移動端自動化測試框架
    移動應用在企業中的地位越來越重要,為了更好將產品推向市場,企業對移動軟體測試的要求越來越高,為了完成大量的高強度移動端的測試需求,掌握高校的移動自動化測試工具則成為每一個軟體測試工程師必備的要求。這裡為大家詳細介紹一下Appium——一款軟體測試工程師必須掌握的開源測試自動化框架。
  • 騰訊開源 UI 自動化測試框架 FAT,覆蓋微信 H5 與小程序
    29 日,騰訊開源了主要用於解決微信內 UI 自動化測試問題的自動化測試框架 FAutoTest(FAT)。
  • 基於Jmeter和Testlink的自動化測試框架研究與實施
    一、摘 要  目前基於Jmeter的接口自動化測試框架,大多只實現腳本維護和自動調度,無法與Testlink進行互通,實現測試方案與自動化實施流程連接,本文基於Testlink、Jmeter、Jenkins實現:通過Testlink統一維護接口自動化測試用例,Jmeter編寫和運行測試腳本,Jenkins實現統一調度
  • 自動化測試面試題
    你比較熟悉那種自動化測試工具?2. 你在你以前工作中是如何使用自動化測試工具的?3. 介紹一下你在利用自動化測試工具的過程中遇到的一些問題4. 你是如何計劃自動化測試的?5. 自動化測試能提高測試效率嗎?6. 什麼是data-driven automoation(數據啟動自動化)?7. 測試自動化的主要特徵有哪些?8.
  • 如何做好軟體系統自動化測試?
    Q1:面向技術和支持團隊;這一象限中主要包含單元測試和組件測試。該象限中的測試幫助團隊獲得代碼級別的快速反饋,一般藉助xUnit測試框架,要求完全自動化。Q2:面向業務和支持團隊;這一象限中包含功能測試,原型測試和仿真測試等。該象限中的測試大多也可以自動化,但是需要藉助面向領域專門的測試工具。