自動(dòng)化測(cè)試的定義,這里先引用一段維基百科的定義:

在軟件測(cè)試中,測(cè)試自動(dòng)化(英語(yǔ):Test automation)是一種測(cè)試方法,使用特定的軟件,去控制測(cè)試流程,并比較實(shí)際的結(jié)果與預(yù)期結(jié)果之間的差異。通過(guò)將測(cè)試自動(dòng)化,可以讓正式的測(cè)試過(guò)程中的必要測(cè)試,可以反復(fù)進(jìn)行;通過(guò)這種方法,也可以將難以手動(dòng)進(jìn)行的測(cè)試,交由軟件來(lái)做。這種測(cè)試方法,是持續(xù)交付流程中的必要組成。

用我自己的話說(shuō)就是,自動(dòng)化測(cè)試的價(jià)值在于將重復(fù)性的測(cè)試工作通過(guò)代碼和工具組織成一套可多次使用的測(cè)試流程,按下回車鍵或者點(diǎn)擊開(kāi)始按鈕即可泡杯咖啡喝杯茶靜待其完成整個(gè)測(cè)試任務(wù)。

自動(dòng)化測(cè)試的工具和框架有很多,近些年比較知名的有 Appium、UI Automator 等等。今天我先介紹下 UI Automator 的入門知識(shí)。

UI Automator 是一個(gè)跨應(yīng)用(系統(tǒng)應(yīng)用和第三方應(yīng)用)的 UI 自動(dòng)化測(cè)試框架,由谷歌官方維護(hù),適用于安卓系統(tǒng)。注意啦~這個(gè)框架目前只支持 Android4.3(API level 18) 及以上的安卓系統(tǒng)。

UI Automator 測(cè)試框架提供了一系列的 API,這些 API 可以用來(lái)編寫基于系統(tǒng)應(yīng)用和第三方應(yīng)用的自動(dòng)化測(cè)試用例,例如打開(kāi)系統(tǒng)設(shè)置頁(yè)面或者啟動(dòng)被測(cè)應(yīng)用。UI Automator 測(cè)試框架非常適合編寫黑盒自動(dòng)化測(cè)試,測(cè)試代碼不依賴于被測(cè)應(yīng)用的內(nèi)部執(zhí)行細(xì)節(jié)。

UI Automator 測(cè)試框架包含以下三個(gè)主要功能:

  • UI Automator Viewer: 界面解析工具,用以獲取應(yīng)用的界面元素。
  • Accessing device state: 一個(gè) API(應(yīng)用程序編程接口),用以獲取測(cè)試機(jī)的狀態(tài)信息并執(zhí)行部分操作。
  • UI Automator APIs: 一組 API,支持跨應(yīng)用的用戶界面測(cè)試。

下面詳細(xì)說(shuō)明此三功能:
UI Automator Viewer
uiautomatorviewer 是安卓 sdk 自帶的一個(gè)工具(位于'/tools/bin'目錄下),可以用來(lái)掃描和分析安卓設(shè)備上當(dāng)前顯示的應(yīng)用頁(yè)面,輸出的結(jié)果包含頁(yè)面中各 UI 組件的布局層級(jí)和各項(xiàng)屬性。利用這些信息可以編寫出更加細(xì)致的自動(dòng)化測(cè)試用例。

Accessing device state
UiDevice 是一個(gè)類,可以用來(lái)和測(cè)試設(shè)備上的被測(cè)應(yīng)用進(jìn)行交互。你可以調(diào)用它的方法獲取到設(shè)備信息,諸如當(dāng)前屏幕旋轉(zhuǎn)角度或者顯示屏大小。此外,它還能執(zhí)行其他操作,例如:

  • 改變?cè)O(shè)備旋轉(zhuǎn)角度
  • 按下硬件按鈕,例如"音量加"
  • 按下 back、home、menu 鍵
  • 打開(kāi)通知欄
  • 截圖
    例如,模擬按下 home 鍵的操作:
UiDevice.pressHome()

UI Automator APIs
一組 API,通過(guò)它們,無(wú)需了解被測(cè)應(yīng)用的具體實(shí)現(xiàn)細(xì)節(jié),即可編寫出健壯的自動(dòng)化測(cè)試用例。你可以使用這些 API 去捕獲和操縱跨應(yīng)用的 UI 組件:

  • UiCollection: 用以獲取容器內(nèi)的用戶界面元素個(gè)數(shù),或者通過(guò)可見(jiàn)的 "text" 和 "content-description" 屬性定位子元素。
  • UiObject: 表示設(shè)備上一個(gè)可見(jiàn)的用戶界面元素。
  • UiScrollable: 在可滾動(dòng)的列表中尋找某個(gè)項(xiàng)目時(shí)會(huì)用到。
  • UiSelector: 查詢?cè)O(shè)備中一個(gè)或多個(gè) UI 元素。
  • Configurator: 允許你為運(yùn)行中的測(cè)試用例設(shè)置關(guān)鍵參數(shù)。
    例如,以下代碼展示了如何編寫一個(gè)測(cè)試腳本用于顯示設(shè)備上默認(rèn)應(yīng)用的 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();

好啦,本篇文章先是引用了維基百科中關(guān)于“自動(dòng)化測(cè)試”的定義,然后說(shuō)了我對(duì)于“自動(dòng)化測(cè)試”的理解,最后介紹了 UI Automator 的入門知識(shí)。

其實(shí)說(shuō)到底,自動(dòng)化測(cè)試要做的無(wú)非就是以下三件事情:

  1. 動(dòng)作執(zhí)行
  2. 結(jié)果判斷
  3. 報(bào)告展示

先寫到這里,下篇再分享 UI Automator 的具體應(yīng)用(從環(huán)境搭建到跑通第一個(gè)自動(dòng)化測(cè)試用例)。