Android自動化測試-搭配UiAutomator2與Android模擬器

Zi-Hao Lin
TryTech
Published in
Jun 16, 2021

--

在開發App時,自動化測試能幫開發者省點時間也省點力氣。剛好最近一個案子需要做Android App的自動化測試,但手邊沒有Android手機,這時便想到能使用Android模擬器。

來源:https://valerio65.github.io/projects/2-android/

市面上有多款Android模擬器,像是Bluestacks, Android Studio, Nox等,本文採用的是LD Player。使用模擬器除了省去準備硬體的麻煩外,更可以同時開啟多部模擬器,模擬多台裝置同時使用App的情形。

有了模擬器,再來需要的就是自動測試的工具。市面上亦有多款工具,像是鼎鼎大名的Appium、Google自家推出的UiAutomator,或是其他如Expresso, Robotium等。本文採用的是UiAutomator2。UiAutomator2顧名思義就是UiAutomator的新版本,原先Google提供的UiAutomator需使用Java語言,UiAutomator2則將其打包為Python版本,變得更加方便。UiAutomator2完整的API Document及環境架設請看這裡,想多了解UiAutomator可以參考這篇文章

來做的簡單的應用:模擬多台手機自動瀏覽Facebook的動態牆。

首先先開啟幾個模擬器,接著打開命令提示字元,輸入:adb devices,即會顯示所有模擬器名稱及狀態。若狀態為 device則表示該模擬器有正確連接;若為 offline 則多試幾次或重啟模擬器。

用Python執行 adb devices 並取得模擬器列表:

os.popen() 執行 adb devices 的指令,接著用 read() 讀取在命令提示字元顯示的結果,之後便是一連串的字串處理,最後以dictionary的形式回傳所有模擬器的名稱。

連接模擬器的方式非常簡單,只要有該模擬器的名稱即可:

模擬器連接的部分已經完成,接下來實作App的控制。

首先是啟動Facebook。這裡來練習一下UiAutomator2的基本用法:先開啟UiAutomator Viewer,位於 path\to\your\android-sdk\tools\bin,點選device screenshot後,便可看到目前畫面的階層關係及資訊。

得到 classNametext 後,便可用UiAutomator2自動點擊開啟Facebook:

執行後就會看到熟悉的載入畫面:

再來完成滑動頁面的功能:

swipe() 從指定的座標一滑到指定的座標二,這段code便是從畫面高度80%處滑到20%的地方。

把單一裝置的整個流程串起來:

連上模擬器 -> 開啟Facebook (假設皆已登入) -> 滑個10次

以上差不多就完成主要功能。但為了讓所有模擬器能各自運行,必須使用Multi-processing:

取得所有模擬器名稱 -> 一個個送進pool -> 各自運行

如此一來,防疫期間宅在家覺得孤單時,便可多開幾個模擬器,假裝有很多朋友陪你一起滑臉書。

完整的code請參考:https://github.com/I-am-ZiHao/Android_autoTest.git

--

--