將測試實驗室整合到您的 CI/CD 系統中

一、簡介

最後更新: 2022-04-07

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

執行行動測試可能很困難:許多應用程式在不同的平台、裝置和 API 版本上運行。應用程式開發人員希望測試盡可能多的配置,以便在使用者之前發現問題。但是,成本和資源限制限制了測試設備的數量以及個人開發人員可以投入的手動維護量。當開發過程規模擴大時,特別是對於持續整合/持續開發(CI/CD)系統,測試過程需要自動化,同時最大限度地減少維護成本和工作量。

為了幫助您了解您的應用程式在使用者裝置上的表現,Firebase 測試實驗室在我們的資料中心託管了一系列行動實體和虛擬設備。我們還提供 Google Cloud CLI,這是一種獨立於平台的命令列工具,可在我們的資料中心的裝置上協調運行測試。 gcloud CLI 可以輕鬆地將 Test Lab 基於雲端的測試解決方案整合到現有 CI/CD 工作流程中。

跨平台支援

測試實驗室為 Android 和 iOS 應用程式提供測試解決方案,並為 Unity 等手機遊戲提供專業支援。測試選項涵蓋流行的測試框架,例如 Android Espresso、UI Automator 和 iOS XCTest。使用我們的自動化爬蟲Robo ,測試實驗室甚至可以在沒有任何測試程式碼的情況下執行測試。

無硬體需求

測試實驗室在 Google 資料中心託管實體設備,並在 Google Cloud 中託管虛擬設備。您所需要做的就是將測試送到測試實驗室並等待結果。

快速可靠

同時運行許多測試案例可能需要很長時間,從而阻塞 CI/CD 進程。透過測試實驗室,您可以輕鬆地對測試進行分片並在多個設備上並行運行它們。您還可以檢測脆弱性,這是移動測試的常見痛點。

你將學到什麼

  • 如何建構測試工件
  • 如何使用 gcloud CLI 執行行動測試
  • 如何設定 Jenkins CI
  • 如何使用 Jenkins CI 執行行動測試
  • 如何配置測試以透過 CI 系統進行擴展

此 Codelab 重點關注運行測試。不相關的概念和程式碼區塊被掩蓋並提供給您簡單地複製和貼上。

你需要什麼

如果您喜歡從頭開始構建,則需要 Android Studio 來運行 Android 測試,或 XCode 來運行 iOS 測試。或者您自己來,我們將提供文物。

2. 使用 gcloud CLI 執行測試

建立 Android 應用 APK 並測試 APK

若要使用測試實驗室執行測試,請先建立 Android 應用程式 APK 和測試 APK,其中包含要在硬體裝置或模擬器上執行的儀器測試。如果您已經有一個可用的程式碼庫,您可以建立自己的 APK,也可以使用BasicSample for Espresso

要使用 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 中測試中的說明進行操作。
  • 下載範例記事本應用程式。使用二進位檔案app-debug-unaligned.apk和儀器測試檔案app-debug-test-unaligned.apk ,它們位於NotePad/app/build/outputs/apk/中。

如果您有 iOS 應用程式的工作原始程式碼,則可以編寫XCTest並從應用程式和測試建立 zip 檔案

使用 gcloud CLI 透過測試實驗室執行測試

在本部分中,您將建立一個 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 控制台 URL 中找到專案 ID,該 URL 遵循以下命名約定: https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

如果您沒有 Firebase 項目,請在Firebase Console中建立一個。

使用建置的 APK 運行測試

在本部分中,您將在測試實驗室的預設設備(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摘要- 測試完成後,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(一種流行的 CI 系統)透過測試實驗室執行測試。如果您想使用不同的 CI 系統,請參閱運行大型測試套件的高級最佳實踐以及其他 CI 系統(如BitriseCircle CI)的文件。您可以使用Flank作為 gcloud CLI 的替代方案。

為 Jenkins 啟用 gc​​loud CLI

在將測試實驗室與 Jenkins 結合使用之前,您必須啟用所需的 API 並設定 Jenkins 可用於透過 gcloud CLI 進行驗證的服務帳戶。

為 Jenkins 新增 Google Cloud 服務帳戶

服務帳戶是用於服務整合的有限帳戶。這些帳戶為特定服務提供細粒度的控制,並且不受垃圾郵件檢查或驗證碼提示的影響,否則可能會阻止您的 CI 建置。

若要建立服務帳戶,請執行下列步驟:

  1. 在 Google Cloud Console 中開啟服務帳號頁面。
  2. 按一下「建立服務帳戶」 ,新增名稱說明,然後按一下「建立並繼續」
  3. 選擇角色下拉清單中,選擇Basic ,然後選擇Editor
  4. 按一下「繼續」 ,然後按一下「完成」

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

若要建立並下載服務帳戶金鑰,請執行下列步驟:

  1. 在 Google Cloud Console 的服務帳號頁面中,點選與您建立的帳號關聯的電子郵件。
  2. 選擇「金鑰」 ,然後按一下「新增金鑰」「建立新金鑰」
  3. 選擇JSON ,然後按一下「建立」
  4. 當系統提示您下載檔案時,按一下「確定」。將檔案下載到電腦上的安全位置。稍後在配置 Jenkins 時需要此檔案。

要了解有關建立服務帳戶的更多信息,請參閱建立服務帳戶

啟用所需的 Google Cloud API

Cloud Test API 可讓您在 Google 基礎架構上執行測試。當您完成使用 gcloud CLI 執行測試後,您已啟用此 API。 Cloud Tool Results API 可讓您以程式設計方式存取測試結果。

  1. 開啟Google 開發者控制台 API 庫
  2. 在 Firebase 控制台頂部的搜尋列中,輸入每個所需 API 的名稱( Cloud Test APICloud Tool Results API )。將顯示所請求 API 的概述頁面。
  3. 按一下每個 API 概述頁面上的啟用 API

安裝和設定 Jenkins

您可以在 Linux、macOS、Windows 和許多其他環境上安裝和設定 Jenkins CI。此 Codelab 的某些細節特定於在 Linux 上安裝和執行 Jenkins CI,包括在檔案路徑中使用斜線 (/)。

若要在執行 Linux 或 Windows 的電腦上下載並安裝 Jenkins,請按照安裝 Jenkins 的說明進行操作。安裝 Jenkins 後,請按照相同的 Jenkins 安裝說明完成設定並使用http://localhost:8080存取 Jenkins 儀表板。

驗證已安裝的插件

Jenkins 支援不同的版本控制系統。在此 Codelab 中,您將使用 Git 運行先前的測試。為了獲得更好的 gcloud CLI 運行體驗,您需要安裝 GCloud SDK 外掛程式。

  1. 在 Jenkins 儀表板上,按一下「管理 Jenkins」 ,然後按一下「管理外掛程式」
  2. 搜尋GitGCloud SDK插件並安裝它們(如果尚未安裝)。

配置 Android 和 Google Cloud SDK 的位置

現在,您指示 Jenkins 在哪裡可以找到 Google Cloud SDK 和 Android SDK。

若要為 Jenkins 設定 Google Cloud 和 Android SDK,請依照以下步驟操作:

  1. 在 Jenkins 儀表板上,按一下管理 Jenkins ,然後按一下全域工具配置
  2. Google Cloud SDK部分中,按一下新增 Google Cloud SDK
  3. 名稱欄位中,輸入易於記憶的 Google Cloud SDK 實例的名稱,例如 GCloud-SDK。
  4. 輸入您的 Google Cloud SDK 主目錄,例如/opt/google-cloud-sdk
  5. 按一下「儲存」
  6. 透過開啟儀表板 > 管理 Jenkins > 設定係統,設定 Android 和 Google Cloud SDK 的系統範圍屬性。
  7. 選擇環境變數複選框並按一下新增
  8. 名稱欄位中,輸入ANDROID_HOME 。在欄位中,輸入 Android SDK 的位置,例如/opt/Android/Sdk
  9. 按一下「工具位置」複選框,然後按一下「新增」 。從名稱下拉清單中,選擇您在全域工具配置中新增的 Google Cloud SDK 實例的名稱。
  10. 主頁欄位中,輸入 Google Cloud SDK 的位置,例如/opt/google-cloud-sdk
  11. 按一下「儲存」

將您的服務帳戶憑證新增至 Jenkins

現在,您可以將 gcloud CLI 服務帳戶憑證新增至 Jenkins,以便 Jenkins 可以進行驗證並成功執行 gcloud CLI 命令。

  1. 在 Jenkins 儀表板上,按一下「管理 Jenkins」 ,然後按一下「管理憑證」
  2. Jenkins 範圍內的 Stores部分中,按一下(全域)網域鏈接,然後按一下Add Credentials
  3. 「種類」下拉清單中,選擇「來自於自私鑰的 Google 服務帳戶」
  4. 專案名稱欄位中,輸入您的 Firebase 專案名稱。
  5. 選擇JSON key ,然後按一下瀏覽並瀏覽至儲存服務帳戶金鑰的位置。
  6. 單擊創建

現在您已準備好為測試實驗室配置 Jenkins 自動建置。

4. 使用 Jenkins CI 執行測試實驗室測試

現在您已經設定了 Jenkins,讓我們將所有內容放在一起並使用 Jenkins 執行相同的測試。

您可以將 Jenkins 配置為運行自動構建,並在每次簽入應用程式更新時執行測試。您也可以將 Jenkins 配置為定期執行建置。要了解有關在 Jenkins 中配置建置的更多信息,請參閱配置自動建置

建立並配置您的 Jenkins 項目

建立一個專案以使用測試實驗室對您的應用程式執行持續整合測試。

創建詹金斯項目

  1. 透過瀏覽http://localhost:8080開啟 Jenkins 儀表板。
  2. 在 Jenkins 儀表板上,按一下新建項目
  3. 「專案名稱」欄位中輸​​入專案的名稱,然後按一下「自由式專案」以建立使用單一建置配置的專案。
  4. 按一下“確定” 。若要完成專案配置,請依序完成其餘部分。

配置原始碼管理

  1. 原始碼管理標籤中,選擇Git
  2. 儲存庫 URL欄位中輸入https://github.com/android/testing-samples.git

配置建置環境

建置環境部分可讓您配置建置特徵。請依照以下步驟啟用 Google Cloud 驗證:

  1. 「建置環境」標籤中,選取GCloud SDK 驗證複選框,然後選擇您在新增 Google Cloud 安裝資訊時選擇的安裝名稱。
  2. Google 憑證下拉清單中,選擇您設定的服務帳戶憑證。

新增 Gradle 建置步驟來重建 APK 包

  1. 向下捲動至「建置」部分,按一下「新增建置步驟」 ,然後選擇「執行 shell」
  2. 新增建置步驟以在應用程式的主目錄中執行以下命令:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

為 Jenkins 新增 gcloud CLI 建置步驟

現在,您可以為 Jenkins 新增建置步驟,以使用 gcloud CLI 命令列執行測試實驗室。

若要新增 gcloud CLI 建置步驟,請新增新的執行 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. 若要手動觸發構建,請按一下“立即建置”
  2. 點選 new build > Console Output檢查進度和結果。

如果您沒有看到錯誤,那麼恭喜您!您只需設定一個項目並一鍵在 Pixel 2 設備上執行測試。如果遇到錯誤,請參閱故障排除

5. 運行大型測試套件的高級最佳實踐

當您想要同時執行多個測試時,請遵循這些最佳實踐,以確保您的測試快速且可靠地運行。

增加多種設備配置的覆蓋範圍

您可以輕鬆地將多個裝置新增至 gcloud CLI 建置步驟中。您可以檢查並選擇可用的裝置、版本、區域設定和方向。例如,以下命令在兩台裝置上執行測試:

  • API 等級 30 的虛擬 Google Pixel 2,縱向和英文區域設置
  • 橫向和法語語言環境下 API 等級 29 的實體三星 Galaxy S20
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

並行運行的分片測試

測試分片將一組測試劃分為單獨運行的子組(分片)。測試實驗室使用多個設備自動並行運行每個分片,這使測試實驗室能夠更快地完成整套測試。有關更多信息,請參閱啟用分片

若要啟用分片,請使用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 系統執行了第一次測試實驗室測試!

您建立了應用程式並測試 APK,並使用 gcloud CLI 透過測試實驗室運行了儀器測試。您也設定了一個 Jenkins 專案來自動執行相同的測試。

現在您知道將測試實驗室整合到 CI/CD 系統中的關鍵步驟。

下一步是什麼?

查看如何使用 Firebase 模擬器套件設定 CI

進一步閱讀

參考文檔