在 App Center 上執行 Android 自動化測試

Gary Cheng
AppDev Ooops
Published in
8 min readAug 16, 2019

App Center 是什麼

是個與 GitHub 合作的持續整合平台,可以將 GitHub 專案的建置 - 測試 -部署程序自動化。

App Center 在測試方面提供的服務:

  • 支援平台:iOS、Android、Windows 和 macOS
  • 提供實體機測試,且支援 Appium、Espresso 和 XCUITest 等熱門測試框架

有自動化測試保護的專案是幸福的,除品質有一定程度保障外,也節省許多手動測試人力,更間接地加速了整個專案的流程,實在一舉多得!接下來會以 GitHub Android 專案為例跟大家介紹如何透過 App Center 替專案加上自動化測試的防護網。

添加 dependency

添加 App Center dependency 到 Android 專案的 build.gradle (app 層級)

androidTestImplementation('com.microsoft.appcenter:espresso-test-extension:1.4')

在測試檔案內引用函式庫

import com.microsoft.appcenter.espresso.Factory
import com.microsoft.appcenter.espresso.ReportHelper

添加 Rule 至 class,否則 App Center 不會執行該測試

@Rule @JvmField
var reportHelper: ReportHelper = Factory.getReportHelper()

可透過 ReportHelper截圖

@After
fun tearDown() {
reportHelper.label("Stopping App")
}

總覽

package com.kkbox.hellomusicimport com.kkbox.hellomusic.page.Album
import com.kkbox.hellomusic.page.Home
import com.kkbox.hellomusic.rule.HelloMusicActivityRule
import com.microsoft.appcenter.espresso.Factory
import com.microsoft.appcenter.espresso.ReportHelper
import org.junit.After
import org.junit.Rule
import org.junit.Test
class AlbumPageTest { @get:Rule
val activityRule = HelloMusicActivityRule(MainActivity::class.java)
@Rule @JvmField
var reportHelper: ReportHelper = Factory.getReportHelper()
@After
fun tearDown() {
reportHelper.label("Stopping App")
}
@Test
fun openAlbum() {
Home().openAlbum(0)
Album().checkHasTitle(albumName)
}
}

添加 API Token

可照著 官方文件 取得 API token,但記得要選擇 Full Access 否則會沒有權限觸發測試,最後再將拿到的 token 新增至環境變數。

取得執行指令

切換至測試 Tab 並點擊新增測試

選擇測試裝置和設定執行環境

完成後會拿到一串執行自動化測試的指令,接著即可著手撰寫腳本

appcenter test run espresso --app "d9369604-gmail.com/Hello-Music" --devices cb5a8427 --app-path pathToFile.apk  --test-series "espresso-tests" --locale "en_US" --build-dir pathToEspressoBuildFolder

撰寫建構腳本

App Center 提供三種類型的建構腳本 — post-clone, pre-build 和 post-build,而 post-build 剛好符合專案成功建置後再執行自動化的需求。

建立 appcenter-post-build.sh

App Center 會自動建置出產品 apk 但測試 apk 則需要透過 post-build 腳本產生,並且搬移到對應的位置

# execute the assembleAndroidTest task
/Users/vsts/agent/2.150.0/work/1/s/gradlew
assembleAndroidTest
# copy test apk to the output folder
cp
$APPCENTER_SOURCE_DIRECTORY/pathToAndroidTestApk/app-debug-androidTest.apk $APPCENTER_OUTPUT_DIRECTORY

App Center 會自動將產品 apk 複製到特定的資料夾下,故 app 路徑設定如下

--app-path $APPCENTER_OUTPUT_DIRECTORY/app-debug.apk

build-dir 是告知 App Center 去何處尋找測試 apk,這裡便提供我們存放測試 apk 的路徑

--build-dir $APPCENTER_OUTPUT_DIRECTORY

執行測試需要權限,因此需要給 token 參數

--token $appCenterLoginApiToken

整個 post-build 腳本如下

#!/usr/bin/env bash/Users/vsts/agent/2.150.0/work/1/s/gradlew assembleAndroidTestcp $APPCENTER_SOURCE_DIRECTORY/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk $APPCENTER_OUTPUT_DIRECTORYappcenter test run espresso \
--app "d9369604-gmail.com/Hello-Music" \
--devices 25759c76 \
--app-path $APPCENTER_OUTPUT_DIRECTORY/app-debug.apk \
--test-series "espresso-tests" \
--locale "en_US" \
--build-dir $APPCENTER_OUTPUT_DIRECTORY \
--token $appCenterLoginApiToken

確認腳本已被偵測

撰寫好腳本後,我們需要把腳本推至 repository,並且打開 build configuration 確認有偵測到腳本,如此在每次建構完成後才會執行寫好的腳本

測試報告

Dashboard
Screenshot for test case

現在只要有 commit 被推至 repository 就會在成功建置後執行 Android 自動化測試。有了自動化的保護,我們對產品品質就越有信心,也能在開發早期及早發現臭蟲、及早治療。

--

--