將 Test Lab 整合至 CI/CD 系統

1. 簡介

上次更新時間:2022 年 4 月 7 日

如何使用 CI/CD 系統執行行動裝置測試

執行行動測試並不容易:許多應用程式在不同的平台、裝置和 API 版本上執行。應用程式開發人員希望盡可能透過各種設定進行測試,藉此找出問題,以免使用者受到影響。不過,成本和資源限制會限制測試裝置的數量,以及個別開發人員可以投入的人工維護量。隨著開發程序擴大規模 (尤其是持續整合/持續開發 (CI/CD) 系統),測試程序必須自動化,同時將維護的成本和工作量降至最低。

這有助於瞭解應用程式在使用者則 Firebase Test Lab 可在我們的資料中心託管各種行動實體和虛擬裝置。我們也提供 Google Cloud CLI 這項獨立平台的獨立指令列工具,並在資料中心的裝置上執行測試。gcloud CLI 可讓您輕鬆將 Test Lab 的雲端式測試解決方案整合到現有的 CI/CD 工作流程。

跨平台支援

Test Lab 提供 Android 和 iOS 應用程式的測試解決方案,以及 Unity 等手機遊戲的專業支援。測試選項涵蓋常見的測試架構,例如 Android Espresso、UI Automator 和 iOS XCTest。透過我們的自動化檢索器 Robo,Test Lab 甚至不需任何測試程式碼就能執行測試。

無硬體需求

Test Lab 可將實體裝置託管於 Google 資料中心,並在 Google Cloud 中託管虛擬裝置。你只需將測試傳送至 Test Lab 並等待結果出爐即可。

既快速又可靠

同時執行許多測試案例可能需要很長的時間,因而阻礙 CI/CD 程序。使用 Test Lab 就能輕鬆進行資料分割測試,並在多部裝置上並行執行測試。您也可以偵測不穩定 (常見的行動裝置測試問題點)。

課程內容

  • 如何建構測試成果
  • 如何使用 gcloud CLI 執行行動裝置測試
  • 如何設定 Jenkins CI
  • 如何使用 Jenkins CI 執行行動裝置測試
  • 如何設定測試以使用 CI 系統向上擴充

本程式碼研究室著重於執行測試。我們不會對與本主題無關的概念和程式碼多做介紹,但會事先準備好這些程式碼區塊,屆時您只要複製及貼上即可。

事前準備

如要從頭開始建構項目,則須透過 Android Studio 執行 Android 測試,或使用 XCode 執行 iOS 測試。或者自行攜帶構件,我們就會提供構件。

2. 使用 gcloud CLI 執行測試

建立 Android 應用程式 APK 和測試 APK

如要使用 Test Lab 執行測試,請先建構 Android 應用程式 APK 和測試 APK,其中包含可在硬體裝置或模擬器上執行的檢測設備測試。如果已有可正常運作的程式碼集,您可以自行建構 APK,或使用 Espresso 的 BasicSample

如要使用 Gradle 指令建構 APK,您必須安裝 Android SDK。如果您的裝置未安裝 Android Studio,請安裝 Android Studio 和 Android SDK,並使用 Android SDK 目錄設定 ANDROID_HOME 環境。例如,在您的 ~/.bash_profile 檔案中新增以下這行程式碼:

export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk  # For MacOS

接著,請執行下列指令,複製程式碼並建構 APK:

git clone https://github.com/android/testing-samples.git
cd testing-samples/ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

執行本機複本和建構指令後,您可以在下列位置找到應用程式 APK 和測試 APK:

app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

您也可以使用下列方法取得測試版和應用程式 APK:

  • 如要在 Android Studio 中建構 APK,請按照在 Android Studio 中測試的說明操作。
  • 下載記事本應用程式範例。使用位於 NotePad/app/build/outputs/apk/ 的二進位檔案 app-debug-unaligned.apk 和檢測設備測試檔案 app-debug-test-unaligned.apk

如果您有適用於 iOS 應用程式的原始碼,可以從應用程式和測試中編寫 XCTest建立 ZIP 檔案

使用 gcloud CLI 搭配 Test Lab 執行測試

在本節中,您將建立 Firebase 專案,並設定本機 Google Cloud SDK 環境。詳情請參閱開始使用 gcloud CLI 進行測試

設定 gcloud CLI

  1. 下載 Google Cloud SDK,其中包含 gcloud CLI 工具。
  2. 確認安裝內容是最新版本:
gcloud components update
  1. 使用 Google 帳戶登入 gcloud CLI:
gcloud auth login
  1. 在 gcloud CLI 中設定 Firebase 專案,其中 PROJECT_ID 是您的 Firebase 專案 ID。您可以在 Firebase 控制台網址中找到專案 ID,格式如下:https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

如果您尚未建立 Firebase 專案,請在 Firebase 控制台建立專案。

使用建構的 APK 執行測試

在本節中,您將在 Test Lab 的預設裝置 (即 API 級別 28 的 Pixel 3) 執行檢測設備測試。如要使用其他裝置,請查看可用裝置

使用您在「建構 Android 應用程式 APK 和測試 APK」中建立的應用程式和測試 APK,使用下列指令執行 Android 檢測設備測試:

gcloud firebase test android run \
  --type instrumentation \
  --app app/build/outputs/apk/debug/app-debug.apk \
  --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

分析測試結果

您可以使用下列任一選項分析測試結果:

  • gcloud 摘要:測試完成後,gcloud CLI 會顯示測試結果的基本摘要。
  • gcloud 結束代碼:測試完成後,如果測試通過,指令就會結束,傳回 0。如果測試失敗,指令就會以非零的結束代碼結束。
  • Firebase 主控台 - gcloud CLI 會顯示 Firebase 控制台的連結。這個連結遵循命名慣例 https://console.firebase.google.com/project/PROJECT_ID/testlab/...。詳情請參閱解讀單一測試執行的結果
  • JUnit XML 檔案 - gcloud CLI 會顯示以下內容:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]

test-lab-xxxxx/xxxxx 是儲存測試成果和結果的 Cloud Storage 值區。如要尋找包含測試結果的 JUnit XML 檔案,請開啟連結並前往 blueline-28-en-portrait/test_result_1.xml

3. 使用 Jenkins CI 進行設定

在本節中,您將使用熱門的持續整合系統 Jenkins CI 來使用 Test Lab 進行測試。如果想使用其他 CI 系統,請參閱執行大型測試套件的「進階最佳做法」,以及 BitriseCircle CI 等其他 CI 系統的說明文件。您可以使用 Flank 做為 gcloud CLI 的替代方案。

為 Jenkins 啟用 gcloud CLI

將 Test Lab 與 Jenkins 搭配使用之前,必須啟用必要的 API 並設定服務帳戶,讓 Jenkins 透過 gcloud CLI 進行驗證。

新增 Jenkins 的 Google Cloud 服務帳戶

服務帳戶是可用於整合服務的帳戶。這些帳戶針對特定服務提供精細的控管功能,且不會進行垃圾內容檢查或人機驗證 (Captcha) 提示,否則您的 CI 建構作業可能會遭到封鎖。

如要建立服務帳戶,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中開啟「服務帳戶」頁面。
  2. 按一下「建立服務帳戶」,新增「名稱」和「說明」,然後按一下「建立並繼續」
  3. 從「請選擇角色」下拉式選單中,依序選取「基本」和「編輯者」
  4. 依序點選「繼續」和「完成」

接下來,請建立並下載驗證金鑰,讓 Jenkins 以您建立的服務帳戶進行驗證。

如要建立及下載服務帳戶金鑰,請按照下列步驟操作:

  1. 在 Google Cloud 控制台的「服務帳戶」頁面中,按一下與您建立的帳戶相關聯的電子郵件。
  2. 選取「金鑰」,然後依序點選「新增金鑰」和「建立新的金鑰」
  3. 選取「JSON」JSON,然後點按「建立」JSON
  4. 系統提示您下載檔案時,按一下「OK」。將檔案下載到電腦上的安全位置。稍後設定 Jenkins 時需使用這個檔案。

如要進一步瞭解如何建立服務帳戶,請參閱「建立服務帳戶」一文。

啟用必要的 Google Cloud API

Cloud Testing API 可讓您在 Google 基礎架構上執行測試。完成透過 gcloud CLI 執行測試時,您就會啟用這個 API。Cloud Tool Results API 可讓您透過程式輔助方式存取測試結果。

  1. 開啟 Google Developers Console API 程式庫
  2. 在 Firebase 控制台頂端的搜尋列中,輸入各個必要 API 的名稱 ( Cloud Testing APICloud Tool Results API)。畫面上隨即顯示所要求 API 的總覽頁面。
  3. 在每個 API 的總覽頁面中按一下「啟用 API」

安裝並設定 Jenkins

您可以在 Linux、macOS、Windows 和其他許多環境中安裝及設定 Jenkins CI。本程式碼研究室的部分詳細資料,說明如何在 Linux 上安裝及執行 Jenkins CI,包括在檔案路徑中使用斜線 (/)。

如要在執行 Linux 或 Windows 的電腦上下載並安裝 Jenkins,請按照安裝 Jenkins 的操作說明進行。安裝 Jenkins 之後,請按照相同的 Jenkins 安裝操作說明,完成設定程序,並使用 http://localhost:8080 存取 Jenkins 資訊主頁。

驗證已安裝的外掛程式

Jenkins 支援不同的版本管控系統。在本程式碼研究室中,您將使用 Git 執行先前的測試。為獲得更好的執行 gcloud CLI 體驗,您必須安裝 GCloud SDK 外掛程式。

  1. 在 Jenkins 資訊主頁中,按一下 [Manage Jenkins],然後按一下 [Manage Plugins]
  2. 搜尋 GitGCloud SDK 外掛程式,然後安裝 (如果尚未安裝)。

設定 Android 和 Google Cloud SDK 的位置

現在您已指示 Jenkins 尋找 Google Cloud SDK 和 Android SDK。

如要設定 Jenkins 適用的 Google Cloud 和 Android SDK,請按照下列步驟操作:

  1. 在 Jenkins 資訊主頁中,按一下 [Manage Jenkins],然後按一下 [Global Tool Configuration]
  2. 在「Google Cloud SDK」區段中,按一下 [新增 Google Cloud SDK]
  3. 在「名稱」欄位中,輸入容易記住的 Google Cloud SDK 執行個體名稱,例如 GCloud-SDK。
  4. 輸入您的 Google Cloud SDK 主目錄,例如 /opt/google-cloud-sdk
  5. 按一下 [儲存]
  6. 開啟資訊主頁 >,設定 Android 和 Google Cloud SDK 的系統通用屬性管理 Jenkins >設定系統
  7. 勾選「EnvironmentVariable」核取方塊,然後按一下「Add」
  8. 在「名稱」欄位中輸入 ANDROID_HOME。在「Value」(值) 欄位中,輸入 Android SDK 的位置,例如 /opt/Android/Sdk
  9. 勾選「Tool Locations」核取方塊,然後按一下「Add」。從「名稱」下拉式選單中,選取您在全域工具設定中新增的 Google Cloud SDK 執行個體名稱。
  10. 在「Home」欄位中輸入 Google Cloud SDK 位置,例如 /opt/google-cloud-sdk
  11. 按一下 [儲存]

將服務帳戶憑證新增至 Jenkins

您現在會將 gcloud CLI 服務帳戶憑證新增至 Jenkins,方便 Jenkins 驗證並成功執行 gcloud CLI 指令。

  1. 在 Jenkins 資訊主頁中,按一下 [Manage Jenkins],然後點選 [Manage Credentials]
  2. 在「Stores range to Jenkins」部分中,按一下「(global)」網域連結,然後點選「Add Credentials」
  3. 從「Kind」下拉式選單中,選取「Google Service Account from private key」
  4. 在「Project Name」欄位中,輸入 Firebase 專案名稱。
  5. 選取「JSON 金鑰」,按一下「瀏覽」,然後瀏覽您儲存服務帳戶金鑰的位置。
  6. 按一下「建立」

您現在已準備好為 Test Lab 設定 Jenkins 自動化建構作業。

4. 使用 Jenkins CI 執行 Test Lab 測試

現在您已設定 Jenkins,接著我們要將所有項目全部建構在一起,並使用 Jenkins 執行相同的測試。

您可以將 Jenkins 設定為執行自動化建構作業,並在使用者每次應用程式更新時執行測試。您也可以設定 Jenkins 以定期執行建構。如要進一步瞭解如何在 Jenkins 中設定建構作業,請參閱設定自動建構作業

建立並設定 Jenkins 專案

建立專案即可透過 Test Lab 執行應用程式的持續整合測試。

建立 Jenkins 專案

  1. 前往 http://localhost:8080 開啟 Jenkins 資訊主頁。
  2. 在 Jenkins 資訊主頁中,按一下「New Item」
  3. 在「Item name」欄位中輸入專案名稱,然後按一下「Freestyle project」,即可建立使用單一建構設定的專案。
  4. 按一下 [OK] (確定)。如要完成專案設定,請依序完成其餘部分。

設定原始碼管理

  1. 在「Source Code Management」分頁中,選取「Git」
  2. 在「存放區網址」欄位中輸入 https://github.com/android/testing-samples.git

設定建構環境

「Build Environment」區段可讓您設定建構特性。如要啟用 Google Cloud 驗證功能,請按照下列步驟操作:

  1. 在「Build Environment」分頁中,勾選「GCloud SDK authentication」核取方塊,並選取您在新增 Google Cloud 安裝資訊時選擇的安裝名稱。
  2. 從「Google Credentials」下拉式選單中,選取您設定的服務帳戶憑證。

新增 Gradle 建構步驟以重新建構 APK 套件

  1. 向下捲動到「Build」區段,按一下「Add build step」,然後選取「Execute shell」
  2. 新增建構步驟,在應用程式的主目錄中執行下列指令:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

將 gcloud CLI 建構步驟新增至 Jenkins

現在您已準備好在 Jenkins 中新增建構步驟,藉此透過 gcloud CLI 指令列執行 Test Lab。

如要新增 gcloud CLI 建構步驟,請新增一個「Execute shell」建構步驟,然後輸入下列指令:

gcloud config set project PROJECT_ID
gcloud firebase test android run \
--app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk
--test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

完成專案設定後,請向下捲動到頁面底部並儲存設定。系統會將您重新導向至新專案的首頁。

使用 Jenkins 執行測試

現在,您可以開始建構 Jenkins 專案,並執行使用 gcloud CLI 執行的手動測試。

如要使用 Jenkins 執行測試,請按照下列步驟操作:

  1. 如要手動觸發建構,請按一下「Build Now」
  2. 如要查看進度和結果,請點選新版本 >Console Output

如果系統沒有顯示任何錯誤,恭喜!您只要在 Pixel 2 裝置上設定專案,一鍵就能執行測試。如果發生錯誤,請參閱疑難排解一文。

5. 執行大型測試套件的進階最佳做法

如要同時進行多項測試,請按照下列最佳做法,確保測試能快速穩定執行。

擴大多種裝置設定的涵蓋範圍

您可以在 gcloud CLI 建構步驟中輕鬆新增多部裝置。您也可以查看及挑選可用的裝置、版本、語言代碼和螢幕方向。舉例來說,下列指令會在兩部裝置上執行測試:

  • 虛擬 Google Pixel 2 虛擬 Google Pixel 2 (直向螢幕模式為 API 級別 30) 和英文語言代碼
  • 實體 Samsung Galaxy S20,螢幕方向為橫向且法文為 API 級別 29
gcloud firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --device model=Pixel2,version=30,locale=en,orientation=portrait  \
  --device model=x1q,version=29,locale=fr,orientation=landscape

使用 gcloud CLI YAML 設定檔

如果您希望在同一個位置或透過來源控制系統管理引數,可以在 YAML 格式的引數檔案中指定這些引數。如要瞭解如何使用這項功能,請執行 gcloud topic arg-files

要同時執行的資料分割測試

資料分割會將一組測試分成獨立執行的子群組 (資料分割)。Test Lab 會自動使用多部裝置平行執行每個資料分割,因此 Test Lab 可更快完成整組測試。詳情請參閱「啟用資料分割」。

如要啟用資料分割,請使用 gcloud beta 管道,並在 gcloud CLI 建構步驟中新增 –num-uniform-shards–test-targets-for-shard 標記。舉例來說,如要將測試資料分割為五次執行,並平行執行,請執行下列指令:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-uniform-shards 5

啟用耀眼偵測功能

行動測試經常是相當棘手的事。有時即使設定相同,測試會通過,有時也可能會失敗。您可以使用 –num-flaky-test-attempts gcloud CLI 標記,偵測失敗的測試是否容易出現問題。這個標記可用來指定在一或多個測試案例因故失敗時,要重新嘗試執行測試的次數。

舉例來說,如要在初次執行失敗後,再多次重新執行失敗的測試案例,請指定以下內容:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-flaky-test-attempts 3

6. 恭喜

恭喜,您已成功使用持續整合系統執行第一次 Test Lab 測試!

您已建構應用程式和測試 APK,並透過 gcloud CLI 使用 Test Lab 執行檢測設備測試。您也會設定 Jenkins 專案,以便自動執行相同的測試。

您現已瞭解將 Test Lab 整合到 CI/CD 系統的重要步驟。

後續步驟

請參閱如何使用 Firebase Emulator 套件設定 CI

延伸閱讀

參考說明文件