本指南介紹瞭如何使用gcloud CLI運行檢測、Robo 或 Game Loop 測試。
有關您可以在測試實驗室中與您的 Android 應用程序一起使用的gcloud
命令的完整列表,請訪問gcloud firebase test android
的參考文檔。
在你開始之前
如果您還沒有,請將 Firebase 添加到您的 Android 項目中。
第 1 步:設置 gcloud CLI
- 下載谷歌云 SDK。
- 確保您的安裝是最新的:
gcloud components update
- 使用您的 Google 帳戶登錄 gcloud CLI:
gcloud auth login
- 在 gcloud 中設置您的 Firebase 項目,其中PROJECT_ID是您的 Firebase 項目的 ID:
gcloud config set project PROJECT_ID
這包括 gcloud CLI 工具。
步驟 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
包含設備支持的操作系統版本。
示例輸出
-
models describe
:獲取有關特定 AndroidMODEL_ID
的更多信息。gcloud firebase test android models describe MODEL_ID
輸出包含設備型號的品牌、製造商、操作系統版本、支持的 API 級別、支持的應用程序二進制接口 (ABI)、發布日期以及設備是物理的還是虛擬的。
versions list
:獲取當前可用的操作系統版本列表以進行測試。gcloud firebase test android versions list
您可以使用命令輸出的前兩列(
OS_VERSION_ID
和VERSION
)中的任一列中的標識符,以便稍後針對 Android 操作系統版本運行測試。如果您未指定要測試的 Android 操作系統版本,則使用TAGS
列下註明的默認值。示例輸出
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 。
儀器測試的代碼覆蓋率報告
測試實驗室支持代碼覆蓋率報告工具EMMA和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 中找到您的代碼覆蓋率報告:
- 打開
gcloud
工具在終端的測試結果表上方打印的 Firebase 控制台鏈接。 - 從該鏈接的列表中單擊測試執行以打開該執行的詳細信息頁面。
- 點擊測試結果以轉到包含該執行測試結果的 Cloud Storage 存儲分區。
- 打開
artifacts/coverage.ec
以查看您的代碼覆蓋率報告。
分析您的測試結果
幾分鐘後,gcloud 工具會打印您的測試結果的基本摘要:
命令行測試運行的輸出還包括一個查看測試結果的鏈接。要詳細了解如何解釋這些結果,請參閱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 有幾個可用的命令和標誌,可讓您運行具有不同規範的測試:
Android Test Orchestrator 標誌:啟用Orchestrator 的標誌,該工具允許您在自己的
Instrumentation
調用中運行應用程序的每個測試。測試實驗室始終運行最新版本的 Orchestrator。遊戲循環測試標誌:一組配置標誌,用於啟用和控制“演示模式”以模擬遊戲應用程序中的玩家操作。了解有關使用測試實驗室運行遊戲循環測試的更多信息。
統一分片標誌(測試版) :一個標誌,指定您希望將測試用例均勻分佈到的分片數量。分片在不同的設備上並行運行。
手動分片標誌(測試版) :指定一組包、類和/或測試用例在分片(一組測試用例)中運行的標誌。分片在不同的設備上並行運行。
網絡流量配置文件標誌(測試版) :指定您的測試與物理設備一起使用的網絡配置文件的標誌。網絡配置文件模擬各種網絡條件,允許您在不可靠或不可預測的網絡上測試您的應用程序的性能。
使用測試實驗室編寫 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 | 發生測試基礎架構錯誤。 |