Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

使用 gcloud CLI 開始測試

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

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

For a complete list of gcloud commands you can use with your Android app in Test Lab, visit the reference documentation for gcloud firebase test android .

開始之前

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

第 1 步:設置 gcloud CLI

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

  3. 確保您的安裝是最新的:
    gcloud components update
    
  4. Log in to the gcloud CLI using your Google account:
    gcloud auth login
    
  5. 在 gcloud 中設置您的 Firebase 項目,其中PROJECT_ID是您的 Firebase 項目的 ID:
    gcloud config set project PROJECT_ID
    

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

使用以下 gcloud 命令查看可用於測試的測試設備和語言環境。

作為一個選項,您還可以下載示例記事本應用程序以立即開始運行命令。 Use the binary file app-debug-unaligned.apk and instrumentation tests file app-debug-test-unaligned.apk , which are located in NotePad/app/build/outputs/apk/ .

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

    gcloud firebase test android models list
    

    在命令輸出中:

    • Column MODEL_ID contains the identifier you can later use to run tests on the device model.
    • 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
    

    You can use an identifier from either of the first two columns of command output ( OS_VERSION_ID and VERSION ), to later run tests against an Android OS version.如果您未指定要測試的 Android 操作系統版本,則使用TAGS列下註明的默認值。

    示例輸出

    gcloud android versions list

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

    gcloud firebase test android versions list
    

    The first column of the command output, LOCALE , contains the identifier that you can use later to run tests against a 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 格式的參數文件中指定您的參數。 Run gcloud topic arg-files to learn how to use this feature.

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

運行儀器測試

現在使用gcloud命令行工具在您指定的 Android 設備配置上運行記事本應用的Espresso測試。 Use the instrumentation test type to run the tests in app-debug-test-unaligned.apk as follows:

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 格式的參數文件中指定您的參數。 Run gcloud topic arg-files to learn how to use this feature.

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

您還可以使用上面未顯示的其他標誌來控制測試實驗室如何運行您的儀器測試。例如,您可以使用--test-targets標誌來測試您的測試 APK 使用的單個類或類方法。 You can also find out whether your test that failed was actually flaky or not by using --num-flaky-test-attempts flag, which specifies the number of times a test execution should be re-attempted if one or more of its test cases因任何原因失敗。要了解更多信息,請參閱gcloud firebase test android run

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

Test Lab supports code coverage reporting tools EMMA and JaCoCo .如果您將任一工具集成到應用程序的構建中,則可以通過運行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. Open artifacts/coverage.ec to see your code coverage report.

分析您的測試結果

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

Command test results

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

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

Robo test automatically completes sign-in screens that use a Google account for authentication, unless you use the --no-auto-google-login parameter.它還可以使用您提供的測試帳戶憑據完成自定義登錄屏幕。您還可以使用此參數為您的應用程序使用的其他文本字段提供自定義輸入文本。

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

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

--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發生測試基礎架構錯誤。