自動化測試 | UI Automator 入門指南
自動化測試的定義,這裡先引用一段維基百科的定義:
在軟體測試中,測試自動化(英語:Test automation)是一種測試方法,使用特定的軟體,去控制測試流程,並比較實際的結果與預期結果之間的差異。通過將測試自動化,可以讓正式的測試過程中的必要測試,可以反覆進行;通過這種方法,也可以將難以手動進行的測試,交由軟體來做。這種測試方法,是持續交付流程中的必要組成。
用我自己的話說就是,自動化測試的價值在於將重複性的測試工作通過程式碼和工具組織成一套可多次使用的測試流程,按下回車鍵或者點選開始按鈕即可泡杯咖啡喝杯茶靜待其完成整個測試任務。
自動化測試的工具和框架有很多,近些年比較知名的有 Appium、UI Automator 等等。今天我先介紹下 UI Automator 的入門知識。
UI Automator 是一個跨應用(系統應用和第三方應用)的 UI 自動化測試框架,由谷歌官方維護,適用於安卓系統。注意啦~這個框架目前只支援 Android4.3(API level 18) 及以上的安卓系統。
UI Automator 測試框架提供了一系列的 API,這些 API 可以用來編寫基於系統應用和第三方應用的自動化測試用例,例如開啟系統設定頁面或者啟動被測應用。UI Automator 測試框架非常適合編寫黑盒自動化測試,測試程式碼不依賴於被測應用的內部執行細節。
UI Automator 測試框架包含以下三個主要功能:
- UI Automator Viewer: 介面解析工具,用以獲取應用的介面元素。
- Accessing device state: 一個 API(應用程式程式設計介面),用以獲取測試機的狀態資訊並執行部分操作。
- UI Automator APIs: 一組 API,支援跨應用的使用者介面測試。
下面詳細說明此三功能:
UI Automator Viewer
uiautomatorviewer 是安卓 sdk 自帶的一個工具(位於'<android-sdk>/tools/bin'目錄下),可以用來掃描和分析安卓裝置上當前顯示的應用頁面,輸出的結果包含頁面中各 UI 元件的佈局層級和各項屬性。利用這些資訊可以編寫出更加細緻的自動化測試用例。

Accessing device state
UiDevice 是一個類,可以用來和測試裝置上的被測應用進行互動。你可以呼叫它的方法獲取到裝置資訊,諸如當前螢幕旋轉角度或者顯示屏大小。此外,它還能執行其他操作,例如:
- 改變裝置旋轉角度
- 按下硬體按鈕,例如"音量加"
- 按下 back、home、menu 鍵
- 開啟通知欄
- 截圖
例如,模擬按下 home 鍵的操作:
UiDevice.pressHome()
UI Automator APIs
一組 API,通過它們,無需瞭解被測應用的具體實現細節,即可編寫出健壯的自動化測試用例。你可以使用這些 API 去捕獲和操縱跨應用的 UI 元件:
- UiCollection: 用以獲取容器內的使用者介面元素個數,或者通過可見的 "text" 和 "content-description" 屬性定位子元素。
- UiObject: 表示裝置上一個可見的使用者介面元素。
- UiScrollable: 在可滾動的列表中尋找某個專案時會用到。
- UiSelector: 查詢裝置中一個或多個 UI 元素。
- Configurator: 允許你為執行中的測試用例設定關鍵引數。
例如,以下程式碼展示瞭如何編寫一個測試指令碼用於顯示裝置上預設應用的 Launcher:
device = UiDevice.getInstance(getInstrumentation device.pressHome(); // Bring up the default launcher by searching for a UI component // that matches the content description for the launcher button. UiObject allAppsButton = device.findObject(new UiSelector().description("Apps")); // Perform a click on the button to load the launcher. allAppsButton.clickAndWaitForNewWindow();
好啦,本篇文章先是引用了維基百科中關於“自動化測試”的定義,然後說了我對於“自動化測試”的理解,最後介紹了 UI Automator 的入門知識。
其實說到底,自動化測試要做的無非就是以下三件事情:
- 動作執行
- 結果判斷
- 報告展示
先寫到這裡,下篇再分享 UI Automator 的具體應用(從環境搭建到跑通第一個自動化測試用例)。