將 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 等熱門測試架構。Test Lab 甚至能使用自動檢索器 Robo 執行測試,完全不需要測試程式碼。

沒有硬體需求

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 Instrumentation 測試:

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 summary:測試完成後,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 bucket。如要找出包含測試結果的 JUnit XML 檔案,請開啟連結並前往 blueline-28-en-portrait/test_result_1.xml

3. 使用 Jenkins CI 設定

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

為 Jenkins 啟用 gcloud CLI

如要搭配 Jenkins 使用 Test Lab,請先啟用必要 API,並設定服務帳戶,供 Jenkins 用於透過 gcloud CLI 進行驗證。

為 Jenkins 新增 Google Cloud 服務帳戶

服務帳戶是專為服務整合而設的受限帳戶。這些帳戶可精細控管特定服務,且不會受到垃圾內容檢查或驗證碼提示影響,否則可能會封鎖 CI 建構作業。

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

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

接著,您要建立並下載驗證金鑰,Jenkins 即可使用該金鑰,以您建立的服務帳戶進行驗證。

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

  1. 前往 Google Cloud 控制台的「服務帳戶」頁面,然後點選您建立的帳戶所連結的電子郵件地址。
  2. 選取「金鑰」,然後依序點選「新增金鑰」和「建立新的金鑰」
  3. 選取「JSON」,然後按一下「建立」
  4. 系統提示下載檔案時,按一下「確定」。將檔案下載到電腦上的安全位置。稍後設定 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. 開啟「Dashboard」>「Manage Jenkins」>「Configure System」,設定 Android 和 Google Cloud SDK 的系統層級屬性。
  7. 選取「環境變數」核取方塊,然後按一下「新增」
  8. 在「Name」欄位中輸入「ANDROID_HOME」。在「Value」欄位中,輸入 Android SDK 的位置,例如 /opt/Android/Sdk
  9. 按一下「工具位置」核取方塊,然後點選「新增」。從「Name」下拉式選單中,選取您在「Global Tool Configuration」中新增的 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 scoped to Jenkins」部分中,按一下「(global)」網域連結,然後按一下「Add Credentials」
  3. 在「Kind」下拉式選單,選取「Google Service Account from private key」
  4. 在「Project Name」欄位中,輸入 Firebase 專案名稱。
  5. 選取「JSON key」(JSON 金鑰),然後按一下「Browse」(瀏覽),瀏覽至您儲存服務帳戶金鑰的位置。
  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. 在「項目名稱」欄位中輸入專案名稱,然後按一下「任意形式專案」,建立使用單一建構設定的專案。
  4. 按一下 [OK] (確定)。如要完成專案設定,請依序完成其餘部分。

設定原始碼管理

  1. 在「Source Code Management」(原始碼管理) 分頁中,選取「Git」
  2. 在「Repository URL」欄位中輸入 https://github.com/android/testing-samples.git

設定建構環境

「建構環境」部分可讓您設定建構特性。請按照下列步驟啟用 Google Cloud 驗證:

  1. 在「Build Environment」(建構環境) 分頁中,選取「GCloud SDK authentication」(GCloud SDK 驗證) 核取方塊,然後選取您新增 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

在 Jenkins 中新增 gcloud CLI 建構步驟

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

如要新增 gcloud CLI 建構步驟,請新增「執行殼層」建構步驟,然後輸入下列指令:

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. 按一下新版本 >「主控台輸出」,即可查看進度和結果。

如果沒有看到錯誤,恭喜!您剛才設定專案,並在 Pixel 2 裝置上按一下滑鼠執行測試。如果發生錯誤,請參閱「疑難排解」。

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

如要同時執行多項測試,請遵循下列最佳做法,確保測試快速且穩定地執行。

擴大涵蓋範圍,支援多種裝置設定

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

  • 直向的虛擬 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 會使用多部裝置,自動並行執行每個分片,因此能更快完成整組測試。詳情請參閱「啟用分片」。

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

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. 恭喜

恭喜,您已透過 CI 系統成功執行第一個 Test Lab 測試!

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

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

後續步驟

請參閱「如何使用 Firebase 模擬器套件設定 CI」。

延伸閱讀

參考文件