Android自動化測試-搭配UiAutomator2與Android模擬器
在開發App時,自動化測試能幫開發者省點時間也省點力氣。剛好最近一個案子需要做Android App的自動化測試,但手邊沒有Android手機,這時便想到能使用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後,便可看到目前畫面的階層關係及資訊。
得到 className
與 text
後,便可用UiAutomator2自動點擊開啟Facebook:
執行後就會看到熟悉的載入畫面:
再來完成滑動頁面的功能:
swipe()
從指定的座標一滑到指定的座標二,這段code便是從畫面高度80%處滑到20%的地方。
把單一裝置的整個流程串起來:
連上模擬器 -> 開啟Facebook (假設皆已登入) -> 滑個10次
以上差不多就完成主要功能。但為了讓所有模擬器能各自運行,必須使用Multi-processing:
取得所有模擬器名稱 -> 一個個送進pool -> 各自運行
如此一來,防疫期間宅在家覺得孤單時,便可多開幾個模擬器,假裝有很多朋友陪你一起滑臉書。
完整的code請參考:https://github.com/I-am-ZiHao/Android_autoTest.git