使用 gcloud CLI 開始測試

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

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

在你開始之前

如果您尚未將 Firebase 新增至您的 Android 專案中,請將其新增至您的 Android 專案中。

步驟 1. 設定 gcloud CLI

  1. 下載Google雲端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包含稍後可用於針對區域設定執行測試的識別碼。如果您未指定要測試的區域設置,則英文將用作預設區域設定。

步驟 3. 執行測試

現在您已經了解了可用於測試應用的裝置型號、區域設定和作業系統版本的範圍,您可以使用gcloud firebase test android run命令和--device標誌來指定裝置來執行 Robo 或儀器測試。

運行 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 \
  --client-details matrixLabel="Example matrix label"
  • 如果未指定--type值,則--type robo參數是隱含的。
  • 為了協助您在 Firebase 控制台中識別和定位測試矩陣,您可以使用可選的--client-details matrixLabel="Example matrix label"標誌來標記您的測試矩陣。
  • 您可以透過鍵入以下內容來查看用於運行測試的完整命令列選項: 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
  --client-details matrixLabel="Example matrix label"
  • 如果使用--test指定測試 APK,則--type Instrumentation 參數是隱式的。
  • 為了協助您在 Firebase 控制台中識別和定位測試矩陣,您可以使用可選的--client-details matrixLabel="Example matrix label"標誌來標記您的測試矩陣。
  • 您可以透過輸入gcloud help firebase test android run來查看用於執行測試的完整命令列選項集。

作為在命令列上指定這些參數的替代方法,您可以選擇在 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

命令列測試運行的輸出還包括用於查看測試結果的連結。若要詳細了解如何解釋這些結果,請參閱分析 Firebase Android 結果測試實驗室

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