使用 gcloud CLI 開始測試

本指南介紹瞭如何使用gcloud CLI運行檢測、Robo 或 Game Loop 測試。

有關您可以在測試實驗室中與您的 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 命令查看可用於測試的測試設備和語言環境。

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

命令行測試運行的輸出還包括一個查看測試結果的鏈接。要詳細了解如何解釋這些結果,請參閱Analyzing Firebase Test Lab for Android Results

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

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

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

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

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

可用的命令和標誌

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

使用測試實驗室編寫 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發生測試基礎架構錯誤。