Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. 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 命令查看可用於您的測試的測試設備和語言區域。

作為一種選擇,您還可以下載示例記事本應用程序以立即開始運行命令。使用二進製文件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 級別、發布日期以及設備是物理設備還是虛擬設備。

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

    gcloud firebase test android versions list
    

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

    示例輸出

    gcloud android versions list

  • locales 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 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.0 或更高版本。要啟用它,請使用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命令來獲取測試實驗室測試的代碼覆蓋率報告:

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/coverage.ec" \
  --directories-to-pull /sdcard

測試實驗室完成測試運行後,在 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 有幾個可用的命令和標誌,可讓您運行具有不同規範的測試:

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