Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

使用 gcloud CLI 開始測試

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

本指南介紹如何使用gcloud CLI運行檢測、Robo 或遊戲循環測試。

有關可在測試實驗室中與 Android 應用程序一起使用的gcloud命令的完整列表,請訪問gcloud firebase test android的參考文檔

在你開始之前

如果您還沒有,請將 Firebase 添加到您的 Android 項目中。

第 1 步:設置 gcloud CLI

  1. 下載谷歌云 SDK。
  2. 這包括 gcloud CLI 工具。

  3. 確保您的安裝是最新的:
    gcloud components update
    
  4. 使用您的 Google 帳戶登錄 gcloud CLI:
    gcloud auth login
    
  5. 在 gcloud 中設置您的 Firebase 項目,其中PROJECT_ID是您的 Firebase 項目的 ID:
    gcloud config set project PROJECT_ID
    

步驟 2. 檢查可用的測試設備

使用以下 gcloud 命令查看可用於測試的測試設備和區域設置。

作為一個選項,您還可以下載示例記事本應用程序以立即開始運行命令。使用位於NotePad/app/build/outputs/apk/中的二進製文件app-debug-unaligned.apk和儀器測試文件app-debug-test-unaligned.apk

  • models list :獲取可供您測試的 Android 設備的當前列表。

    gcloud firebase test android models list
    

    在命令輸出中:

    • MODEL_ID包含稍後可用於在設備模型上運行測試的標識符。
    • OS_VERSION_ID列包含設備支持的操作系統版本。

    示例輸出

    gcloud firebase test android models list output

  • models describe :獲取有關特定 Android MODEL_ID的更多信息。

    gcloud firebase test android models describe MODEL_ID
    

    輸出包含設備型號的品牌、製造商、操作系統版本、支持的 API 級別、支持的應用程序二進制接口 (ABI)、發布日期以及設備是物理設備還是虛擬設備。

  • versions list :獲取要測試的當前可用操作系統版本的列表。

    gcloud firebase test android versions list
    

    您可以使用命令輸出前兩列( OS_VERSION_IDVERSION )中任一列的標識符,稍後針對 Android 操作系統版本運行測試。如果您未指定要測試的 Android 操作系統版本,則會使用TAGS列下註明的默認值。

    示例輸出

    gcloud android versions list

  • locales list :獲取可用於測試的當前語言環境列表。

    gcloud firebase test android versions list
    

    命令輸出的第一列LOCALE包含稍後可用於針對語言環境運行測試的標識符。如果您未指定要測試的區域設置,則英語將用作默認區域設置。

運行測試

現在您知道了可用於測試您的應用程序的設備型號、區域設置和操作系統版本的範圍,您可以使用gcloud firebase test android run命令和--device標誌指定設備以運行 Robo 或儀器測試。

運行 Robo 測試

即使您沒有任何儀器測試,您仍然可以在您的應用程序中查找錯誤。使用 Robo 測試對應用程序的用戶界面執行自動審查。 Robo 測試通過對應用程序用戶界面的各種路徑執行靜態分析來練習應用程序,然後在應用程序中爬行以查找崩潰和其他潛在問題。

讓我們從運行示例命令開始:

gcloud firebase test android run \
  --type robo \
  --app app-debug-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape \
  --timeout 90s

如果未指定--type值,則 --type --type robo參數是隱式的。您可以通過鍵入以下命令查看用於運行測試的完整命令行選項集: gcloud help firebase test android run 。作為在命令行上指定所有這些參數的替代方法,您可以選擇在 YAML 格式的參數文件中指定您的參數。運行gcloud topic arg-files以了解如何使用此功能。

請參閱分析測試結果部分以了解如何調查 Robo 測試的測試結果。

運行儀器測試

現在使用gcloud命令行工具在指定的 Android 設備配置上運行記事本應用的Espresso測試。使用instrumentation測試類型運行app-debug-test-unaligned.apk中的測試,如下所示:

gcloud firebase test android run \
  --type instrumentation \
  --app app-debug-unaligned.apk \
  --test app-debug-test-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape

如果已使用--test指定了測試 APK,則--type instrumentation參數是隱式的。作為在命令行上指定所有這些參數的替代方法,您可以選擇在 YAML 格式的參數文件中指定您的參數。運行gcloud topic arg-files以了解如何使用此功能。

gcloud CLI 支持Android Test Orchestrator 。 Orchestrator 需要 AndroidJUnitRunner v1.1 或更高版本。要啟用它,請使用gcloud firebase test android run
--use-orchestrator標誌。要禁用它,請使用--no-use-orchestrator標誌。

您還可以使用上面未顯示的其他標誌來控制測試實驗室如何運行您的儀器測試。例如,您可以使用--test-targets標誌來測試測試 APK 使用的單個類或類方法。您還可以通過使用--num-flaky-test-attempts標誌來確定失敗的測試是否真的不穩定,該標誌指定如果一個或多個測試用例應重新嘗試測試執行的次數因任何原因失敗。要了解更多信息,請參閱gcloud firebase test android run

儀器測試的代碼覆蓋率報告

測試實驗室支持代碼覆蓋報告工具EMMAJaCoCo 。如果您已將任一工具集成到應用程序的構建中,則可以通過運行帶有一些附加參數的gcloud firebase test android run來獲取測試實驗室測試的代碼覆蓋率報告。如果未啟用 Android Test Orchestrator,請使用以下命令:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables coverage=true,coverageFile="/sdcard/Download/coverage.ec" \
  --directories-to-pull /sdcard/Download

如果您在生成代碼覆蓋率報告的同時還使用 Android Test Orchestrator,請按如下方式修改您的環境變量:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \
  --directories-to-pull /sdcard/Download

當測試實驗室完成運行測試後,在 Google Cloud Storage 中找到您的代碼覆蓋率報告:

  1. 打開gcloud工具在終端中測試結果表上方打印的 Firebase 控制台鏈接。
  2. 單擊該鏈接列表中的測試執行以打開該執行的詳細信息頁面。
  3. 點擊測試結果以轉到包含該執行測試結果的 Cloud Storage 存儲桶。
  4. 打開artifacts/coverage.ec查看您的代碼覆蓋率報告。

分析你的測試結果

幾分鐘後,gcloud 工具會打印出測試結果的基本摘要:

Command test results

命令行測試運行的輸出還包括一個用於查看測試結果的鏈接。要了解有關如何解釋這些結果的更多信息,請參閱分析 Android 結果的 Firebase 測試實驗室

使用 Robo 測試自定義登錄和文本輸入

Robo 測試會自動完成使用 Google 帳戶進行身份驗證的登錄屏幕,除非您使用--no-auto-google-login參數。它還可以使用您提供的測試帳戶憑據完成自定義登錄屏幕。您還可以使用此參數為您的應用程序使用的其他文本字段提供自定義輸入文本。

要在您的應用程序中完成文本字段,請使用--robo-directives參數並提供以逗號分隔的key-value對列表,其中key是目標 UI 元素的 Android 資源名稱, value是文本字符串.您還可以使用此標誌告訴 Robo 忽略特定的 UI 元素(例如,“註銷”按鈕)。支持EditText字段,但不支持WebView UI 元素中的文本字段。

例如,您可以使用以下參數進行自定義登錄:

--robo-directives username_resource=username,password_resource=password

可用的命令和標誌

測試實驗室 gcloud CLI 有幾個可用的命令和標誌,可讓您運行具有不同規範的測試:

  • Android Test Orchestrator 標誌:啟用Orchestrator的標誌,Orchestrator 是一種工具,允許您在自己的Instrumentation調用中運行應用程序的每個測試。測試實驗室始終運行最新版本的 Orchestrator。

  • 遊戲循環測試標誌:一組配置標誌,用於啟用和控制“演示模式”以模擬玩家在遊戲應用程序中的操作。了解有關使用測試實驗室運行遊戲循環測試的更多信息。

  • Uniform Sharding flag (in beta) :指定要將測試用例均勻分佈到的分片數量的標誌。分片在不同的設備上並行運行。

  • 手動分片標誌(測試版) :指定一組包、類和/或測試用例以在分片(一組測試用例)中運行的標誌。分片在不同的設備上並行運行。

  • Network traffic profiles flag (in beta) :一個標誌,指定您的測試使用物理設備的網絡配置文件。網絡配置文件模擬各種網絡條件,使您可以在不可靠或不可預測的網絡上測試您的應用程序的性能。

使用測試實驗室編寫 gcloud 命令腳本

您可以使用 shell 腳本或批處理文件來自動執行移動應用程序測試命令,否則您將使用 gcloud 命令行運行這些命令。以下示例 bash 腳本以兩分鐘超時運行儀器測試,並報告測試運行是否成功完成:

if gcloud firebase test android run --app my-app.apk --test my-test.apk --timeout 2m
then
    echo "Test matrix successfully finished"
else
    echo "Test matrix exited abnormally with non-zero exit code: " $?
fi

腳本退出代碼

測試實驗室提供了多個退出代碼,您可以使用它們更好地了解使用腳本或批處理文件運行的測試的結果。

為測試實驗室編寫腳本退出代碼

退出代碼筆記
0所有測試執行都通過了。
1個發生一般故障。可能的原因包括:文件名不存在或 HTTP/網絡錯誤。
2個由於提供了未知的命令或參數,測試已退出。
10測試執行中的一個或多個測試用例(測試的類或類方法)未通過。
15由於意外錯誤,Firebase 測試實驗室無法確定測試矩陣是通過還是失敗。
18由於不兼容的測試維度,不支持此測試執行的測試環境。如果所選設備類型不支持所選 Android API 級別,則可能會發生此錯誤。
19用戶取消了測試矩陣。
20發生測試基礎結構錯誤。