將測試實驗室集成到您的 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

進一步閱讀

參考文檔