兩分鐘搞懂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")
如果你覺得文章還不錯,請大家點贊分享下。你的肯定是我最大的鼓勵和支持。