使用UI Automator實現Android UI的自動化測試

0x01 概述

UI Automator測試框架提供了一組API來構建UI測試,用於在用戶應用和系統應用中執行交互。UI Automator測試框架非常適合編寫黑盒自動化測試,其中的測試代碼不依賴於目標應用的內部實現詳情。

0x02 使用uiautomatorviewer工具獲取Android應用的控制項信息

uiautomatorviewer 工具提供了方便的GUI,可以掃描和分析Android設備上當前顯示的UI組件。您可以使用此工具檢查布局層次結構,並查看在設備前台顯示的UI組件屬性。利用此信息,可以使用UI Automator創建控制更加精確的測試。

uiautomatorviewer 工具位於<android-sdk>/tools/目錄中。

0x03 在Android項目中添加依賴

androidTestImplementation com.android.support.test.uiautomator:uiautomator-v18:2.1.3

0x04 創建單元測試類

0x05 創建測試用例

// 使用JUnit4運行器@RunWith(AndroidJUnit4.class)public class UiTest { // Instrumentation可以在主程序啟動之前,創建模擬的Context;發送UI事件給應用程序; // 檢查程序當前運行狀態;控制Android如何載入應用程序,控制應用程序和控制項的生命周期; // 可以直接調用控制項的方法,對控制項的屬性進行查看和修改 private Instrumentation mInstrumentation; // 代表著Android設備 private UiDevice mUiDevice; // 測試用例執行前,用於一些處理一些初始化工作 @Before public void setUp() { mInstrumentation = InstrumentationRegistry.getInstrumentation(); mUiDevice = UiDevice.getInstance(mInstrumentation); } // 一個測試用例 @Test public void testAdd() { // 獲取屏幕上計算器的數字"9"的控制項,"com.android.calculator2:id/digit_9"為通過uiautomatoviewer工具獲取的控制項id UiObject2 digit9 = mUiDevice.findObject(By.res("com.android.calculator2:id/digit_9")); // 獲取屏幕上計算器的數字"8"的控制項 UiObject2 digit8 = mUiDevice.findObject(By.res("com.android.calculator2:id/digit_8")); // 獲取屏幕上計算器的"*"控制項 UiObject2 opMul = mUiDevice.findObject(By.res("com.android.calculator2:id/op_mul")); // 獲取屏幕上計算器的"="的控制項 UiObject2 opEq = mUiDevice.findObject(By.res("com.android.calculator2:id/eq")); // 獲取屏幕上計算器的結果顯示控制項 UiObject2 result = mUiDevice.findObject(By.res("com.android.calculator2:id/result")); // 自動依序執行: // 1.點擊計算器"9"控制項 // 2.點擊計算器"*"控制項 // 3.點擊計算器"8"控制項 // 4.點擊計算器"="控制項 digit9.click(); opMul.click(); digit8.click(); opEq.click(); // 獲取計算結果控制項的值 String resultValue = result.getText(); // 進行斷言判斷,判斷結果是否和預期一致 Assert.assertEquals(72, Integer.parseInt(resultValue)); } // 測試用例執行完後執行 @After public void tearDown() { }}

0x06 執行測試用例

0x07 相關API介紹

常見組件操作,類-UiObject2

功能方法點擊public boolean click()長按public boolean longClick()拖動public void drag(Point dest)輸入public boolean setText(String text)

常見設備操作,類-UiDevice

功能方法點擊坐標public void click(int x, int y)按鍵public void pressKeyCode(int keyCode)滑動public boolean swipe(int startX, int startY,int endX,int endY,int steps)// 1個步長表示5ms

0x08 其他用途

自動化是用於解放雙手,將機械化的重複操作交由程序。UIAutomator可以用於進行重複的UI測試,也可以用於完成其他的類似轉發鏈接給通訊錄里的所有好友。

參考鏈接

  1. 測試支持庫
  2. Android白盒測試之Instrumentation初探(一)

推薦閱讀:

iuni為什麼不掛金立的牌子,金立以後會用iuni么?
現在哪些手機廠商操作系統還有二級菜單(應用抽屜)?
如何看待 Android O 的 Adaptive icons?
那些對Android進行所謂「定製」的手機廠商是否會全面採用Android L?
如何評價「重繪圖標是對設計的不尊重」這種說法?

TAG:自動化測試 | 軟體測試 | AndroidUI |