兩分鐘搞懂UiAutomator 1 VS 2測試框架

  • 2020 年 3 月 27 日
  • 筆記

1. UiAutomator簡介

UiAutomator是谷歌在Android4.1版本發佈時推出的一款用Java編寫的UI測試框架,基於Accessibility服務。其最大的特點就是可以跨進程操作,可以使用UiAutomator框架提供的一些方便的API來對安卓應用進行一系列的自動化測試操作,如點擊、滑動、鍵盤輸入、長按以及常用的斷言方法等。

要使用該工具,需要滿足如下條件:

  • Android SDK Tools, Revision 21 or higher
  • Android SDK Platform, API 18 or higher

在Android SDK 4.3中提供了如下工具來支持UI自動化測試:

  • uiautomatorviewer – 一個圖形界面工具來掃描和分析應用的UI控件。存放在tools目錄。
  • uiautomator – 一個測試的Java庫,包含了創建UI測試的各種API和執行自動化測試的引擎。

雖然利用Google提供的uiautomator庫可以獲取屏幕上任意一個APP的任意一個控件屬性(非NAF Nodes節點除外),並對其進行任意自動化操作,但卻存在兩個缺點:

1、測試腳本只能使用Java語言。 2、測試腳本必須每次被上傳到設備上運行。

2. UiAutomator2由來

我們從上述可以知道uiautomator庫,只能使用Java語言,並且測試腳本需要打包成Jar包上傳到設備上才能運行。

但是我們希望測試能夠用一個更腳本化的語言,例如Python編寫,同時可以每次所見即所得地修改測試、運行測試或者是說能夠在電腦上運行就能控制手機。因此基於這種需求背景之下,誕生出來的uiautomator2。

早期,它是由一個名為Xiaocong He的大牛將這個想法實現了出來,實現原理是在手機上運行了一個http rpc服務,將uiautomator中的功能開放出來,然後再將這些http接口封裝成Python庫。

GitHub項目地址:

https://github.com/xiaocong/uiautomator.git

但由於xiaocong/uiautomator這個庫,已經很久不見更新。因此在這個庫的基礎上,又重新誕生了另外一個加強版本,為了方便做區分原作者在後面加了個2 名為:openatx/uiautomator2

GitHub項目地址:

https://github.com/openatx/uiautomator2.git

該項目除了對原有的庫的bug進行了修復外,還增加了很多新的Feature。主要有以下部分:

  • 設備和開發機可以脫離數據線,通過WiFi互聯(基於atx-agent)
  • 集成了openstf/minicap達到實時屏幕投頻,以及實時截圖
  • 集成了openstf/minitouch達到精確實時控制設備
  • 修復了xiaocong/uiautomator經常性退出的問題
  • 代碼進行了重構和精簡,方便維護
  • 實現了一個設備管理平台(也支持iOS) atxserver2
  • 擴充了toast獲取和展示的功能

PS: 目前市面上,常提及的uiautomator2測試框架,大部分指的是openatx/uiautomator2這個了,該框架更詳細的介紹,可查閱項目文檔。

3. 牛刀小試

1、先準備一台開啟了開發者選項的安卓手機,連接上電腦,此處直接打開夜神安卓模擬器。

2、確保執行adb devices可以看到連接上的設備。

3、運行pip3 install -U uiautomator2 安裝uiautomator2。

4、運行python3 -m uiautomator2 init安裝包含httprpc服務的apk到手機。

上述初始化命令會自動安裝本庫所需要的設備端程序:uiautomator-server、atx-agent、openstf/minicap、openstf/minitouch,並且在被測手機終端上會安裝一個名為ATX的代理程序。

按照項目文檔中的介紹,在之前的版本中,初始化這一步是必須執行的,但是從1.3.0之後的版本,當運行python代碼u2.connect()時就會自動推送這些依賴文件了。

5、接下來在做自動化測試之前,需要先查看獲取到被測應用控件信息,一般來說,可以藉助Android SDK自帶的uiautomatorviewer來查看元素,但這要求手機必須以USB的方式連接PC,但openatx項目中提供了另外一個工具weditor 來解決這個問題。

6、安裝weditor在線元素查看器。

pip3 install --pre -U weditor  

安裝好之後,就可以在命令行運行weditor --help 確認是否安裝成功了。

7、命令行直接輸入 weditor 會自動打開瀏覽器(http://localhost:17310/),輸入設備的ip或者序列號,點擊Connect即可。

8、編寫自動化測試腳本,在下述腳本中,通過connect方法連接到指定設備,再通過app_start方法啟動被測應用(腳本示例中,打開的是酷狗音樂App),再依次點擊登錄按鈕,以及判斷點擊登錄按鈕後,帳號登錄頁面是否顯示,最後關閉酷狗音樂。

import uiautomator2 as u2  d = u2.connect('127.0.0.1:62001')  print(d.info)  d.app_start("com.kugou.android", ".app.splash.SplashActivity")  d(text="登錄").click()  d(text="帳號登錄").wait(timeout=10.0)  d.app_stop("com.kugou.android")

如果你覺得文章還不錯,請大家點贊分享下。你的肯定是我最大的鼓勵和支持。