在 App Center 上執行 Android 自動化測試
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.Testclass 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 確認有偵測到腳本,如此在每次建構完成後才會執行寫好的腳本
測試報告
現在只要有 commit 被推至 repository 就會在成功建置後執行 Android 自動化測試。有了自動化的保護,我們對產品品質就越有信心,也能在開發早期及早發現臭蟲、及早治療。