Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

開始使用 gcloud CLI 進行測試

本指南介紹如何使用運行的儀器,機器人,或遊戲循環測試gcloud CLI

對於一個完整列表gcloud你可以與你在測試實驗室Android應用程序使用的命令,請訪問參考文檔gcloud firebase test android

在你開始之前

如果你還沒有,添加火力地堡到您的Android項目

步驟 1. 設置 gcloud CLI

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

  3. 確保您的安裝是最新:
    gcloud components update
    
  4. 使用谷歌帳戶到gcloud CLI登錄:
    gcloud auth login
    
  5. 設置你的火力地堡項目gcloud,其中PROJECT_ID是你的火力地堡項目的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 :獲取可供針對測試語言環境的當前列表。

    gcloud firebase test android versions list
    

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

運行測試

現在,你知道的設備型號,語言環境和可用於測試你的應用程序的操作系統版本範圍,你可以指定使用設備gcloud firebase test android run命令和--device標誌運行機器人或儀器測試。

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

請參閱分析您的測試結果部分,了解如何調查從機器人測試的測試結果。

運行您的儀器測試

現在使用gcloud命令行工具來運行記事本應用程序的咖啡在您指定的Android設備配置的測試,使用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

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

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

注意:您還可以控制實驗室中使用未如上圖所示附加標誌如何運行你的儀器測試。例如,你可以使用--test-targets標誌來測試一個類或您的測試APK使用一個類的方法。您還可以通過使用“--num-flaky-test-attempts”標誌來確定失敗的測試是否真的不穩定,該標誌指定了一個或多個測試執行時應重新嘗試執行的次數測試用例因任何原因失敗。要了解更多信息,請參閱gcloud火力測試Android上運行

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

測試實驗室支持代碼覆蓋率報告工具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工具印刷在終端的測試結果表的上方。
  2. 從該鏈接的列表中單擊測試執行以打開該執行的詳細信息頁面。
  3. 點擊測試結果要到雲端存儲與執行的測試結果。
  4. 打開artifacts/coverage.ec看到你的代碼覆蓋率報告。

分析您的測試結果

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

Command test results

命令行測試運行的輸出還包括用於查看測試結果的鏈接。要了解更多有關如何解釋這些結果,請參見分析火力地堡測試實驗室為Android結果

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

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

要在您的應用程序的完整文本字段,使用--robo-directives參數,並提供了一個逗號分隔的列表key-value對,其中的key是目標UI元素的安卓資源名稱和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發生測試基礎架構錯誤。