本頁面提供使用 Firebase 測試實驗室運行測試的常見問題解答協助和解答。也記錄了已知問題。如果您找不到所需內容或需要其他協助,請加入 Firebase Slack 上的#test-lab 頻道或聯絡Firebase 支援。
故障排除
當您在測試實驗室目錄中選擇具有高容量等級的裝置時,測試可能會更快開始。當設備容量較低時,測試可能需要更長時間才能運作。如果所呼叫的測試數量遠大於所選設備的容量,則測試可能需要更長時間才能完成。
由於以下因素,在任何級別的設備容量等級上執行的測試可能需要更長的時間:
- 流量,影響設備可用性和測試速度。
- 設備或基礎設施故障隨時可能發生。若要檢查是否有報告的測試實驗室基礎架構,請參閱Firebase 狀態儀表板。
要了解有關測試實驗室中的設備容量的更多信息,請參閱Android和iOS的設備容量資訊。
由於測試運行取消或基礎設施錯誤,通常會出現不確定的測試結果。
基礎設施錯誤是由內部測試實驗室問題引起的,例如網路錯誤或意外的設備行為。測試實驗室在報告不確定結果之前會在內部終止多次產生基礎設施錯誤的測試運行;但是,您可以使用failFast停用這些重試。
若要確定錯誤原因,請執行下列步驟:
- 在Firebase 狀態儀表板中檢查已知的中斷。
在測試實驗室中重試測試以驗證其是否可重現。
嘗試在不同的裝置或裝置類型上執行測試(如果適用)。
如果問題仍然存在,請透過 Firebase Slack 上的#test-lab 頻道聯絡測試實驗室團隊。
當您指定的分片數量超過測試實驗室中可用的設備數量時,分片可能會導致您的測試運行時間更長。為了避免這種情況,請嘗試切換到其他裝置。有關選擇不同設備的更多信息,請參閱設備容量。
當您提交測試請求時,您的應用程式首先會經過驗證、重新簽名等,以準備在裝置上執行測試。通常,此過程會在不到幾秒鐘的時間內完成,但它可能會受到應用程式大小等因素的影響。
準備好應用程式後,將安排測試執行並保留在佇列中,直到設備準備好運行它。在所有測試執行完成運行之前,矩陣狀態將為「待處理」(無論測試執行是在佇列中還是正在運行)。
測試執行完成後,將從裝置下載測試工件,進行處理並上傳到雲端儲存。此步驟的持續時間可能會受到工件數量和大小的影響。
測試執行工件(例如螢幕截圖和日誌檔案)儲存在 Google Cloud Storage 中並直接呈現到 Firebase 控制台中。如果您的測試執行是在過去 90 天內執行的,請檢查您是否已指派專案等級角色(專案擁有者、專案編輯者或專案檢視者)。另請確保您的專案或組織未啟用 Cloud Audit Logging。
如果執行時間超過 90 天,則測試工件很可能已自動刪除。您可以透過點擊測試實驗室儀表板中的測試結果標籤來檢查結果儲存桶配置。預設結果儲存桶配置為保留物件 90 天。
若要更長時間地保留測試工件,請執行帶有標誌--results-bucket
命令gcloud firebase test android run
並傳入結果儲存桶的名稱。有關更多信息,請訪問gcloud firebase test android run
參考文檔。
當您執行儀器測試時,您可能會看到測試錯誤,指示部分結果包含諸如Test run failed to complete. Expected x tests, received y
(其中y
小於x
)。此錯誤表示測試實驗室無法解析 logcat 以取得通常由AndroidJUnitRunner產生的測試案例開始或結束標記。
以下是此問題的常見原因:
問題描述 | 可能的解決方案 |
---|---|
由於超時,測試案例未運行。如果測試的總持續時間長於您指定的逾時或長於最大逾時,測試實驗室將取消其餘的測試案例。 |
|
測試案例未能完成,因為它過早退出或卡住了。由於未捕獲的異常或斷言錯誤,測試案例可能會提前退出。測試案例可能會陷入無限循環或可能無法繼續,例如,如果應用程式未顯示正確的視圖並且測試案例無法在 UI 上執行操作。 | 檢查影片和logcat 以調查測試停止的位置。 |
自訂測試運行程式(包括擴充 AndroidJUnitRunner)意外崩潰或將意外的測試案例開始或結束標記寫入logcat 。 | 檢查您的測試運行程式碼。 |
過多的日誌寫入logcat ,導致緩衝區溢位或導致logcat 進程崩潰。 | 減少對logcat 的寫入。 |
正在測試的應用程式崩潰了。 | 調試您的應用程式。 |
經常問的問題
Firebase 測試實驗室為裝置測試和使用雲端 API 提供免費配額。請注意,測試配額使用標準 Firebase 定價計劃,而 Cloud API 配額則不使用。
檢測配額
測試配額由用於運行測試的設備數量決定。 Firebase Spark 方案有固定的測試配額,使用者無需支付任何費用。對於 Blaze 計劃,如果您對 Google Cloud 的使用量隨著時間的推移而增加,您的配額可能會增加。如果您達到了測試配額,請等到第二天,或者如果您目前使用的是 Spark 計劃,請升級到 Blaze 計劃。如果您已經加入 Blaze 計劃,則可以要求增加配額。有關更多信息,請參閱測試配額。
您可以在Google Cloud 控制台中監控測試配額使用情況。
雲端測試 API 配額
Cloud Test API 有兩個配額限制:每個專案每天的請求數和每個專案每 100 秒的請求數。您可以在Google Cloud 控制台中監控您的使用情況。
雲端工具結果 API 配額
Cloud Tool Results API 有兩個配額限制:每個項目每天的查詢次數和每個項目每 100 秒的查詢次數。您可以在Google Cloud 控制台中監控您的使用情況。
有關 API 限制的更多信息,請參閱測試實驗室的雲端 API 配額。如果您已達到 API 配額:
透過直接在 Google Cloud 控制台中修改配額來提交更高配額的請求(請注意,大多數限制預設為最大值),或者
透過在 Google Cloud 控制台中填寫請求表單或聯絡Firebase 支援來請求更高的 API 配額。
在後端,您可以根據我們的IP 範圍檢查來源 IP 位址來確定流量是否來自 Firebase 託管的測試設備。
測試實驗室不支援 VPC-SC,這會阻止在測試實驗室的內部儲存和使用者結果儲存桶之間複製應用程式和其他測試工件。
要偵測測試中的不穩定行為,我們建議使用--num-flaky-test-attempts選項。 Deflake 重新運行將按照與正常測試執行相同的方式計費或計入每日配額。
請記住以下幾點:
- 當偵測到故障時,整個測試執行會再次運作。不支援僅重試失敗的測試案例。
- Deflake 重試運行計劃同時運行,但不保證並行運行,例如,當流量超過可用設備數量時。
是的!測試實驗室支援 Google Pixel Watch。現在您可以在 Google Pixel 手錶上的獨立 Wear 應用程式上執行測試。要了解有關測試實驗室設備的更多信息,請參閱在可用設備上進行測試。
是的!測試實驗室支援 Google Pixel Tablet 和 Google Pixel Fold。您可以在獨立的實體設備上執行測試。要了解有關測試實驗室設備的更多信息,請參閱在可用設備上進行測試。
如果您在 Firebase 中測試您的應用,或在 Play Console 中執行預發布報告的測試,則可以透過檢查系統屬性firebase.test.lab
來偵測是否正在 Firebase 託管的裝置上執行測試。您的MainActivity
檔案。然後,您可以根據testLabSetting
的布林值執行其他語句。有關詳細信息,請參閱修改的測試行為。
雖然其中一些項目已在我們的路線圖中,但我們目前無法承諾支援這些測試和應用程式開發平台。但是,如果您使用支援 Espresso 的框架(例如 Flutter)來建立應用程序,則可以使用Espresso編寫儀器測試,然後在測試實驗室中執行測試。
測試實驗室不明確支持混淆或反混淆。雖然應用程式可能會運行,但任何模糊的應用程式資料(例如堆疊追蹤)都會在日誌中顯示為模糊的。
是的!您可以在可折疊狀態和姿勢下測試可折疊設備。
可折疊設備可以處於各種折疊狀態,例如FLAT
(完全打開)或HALF_OPENED
(完全打開和完全關閉之間)。
另一方面,姿勢由特定的設備方向和可折疊狀態組成。例如,桌面姿勢,其為水平方向的HALF_OPENED
狀態,或書籍姿勢,其為垂直方向的HALF_OPENED
狀態。
如果您正在執行儀器測試,您可以使用Jetpack WindowManager庫並按照可折疊文件測試您的應用程式來測試不同的狀態和姿勢。
或者,可用狀態是特定於裝置的,可以使用adb shell command cmd device_state
進行互動。
- 若要列出目前狀態,請執行
adb shell cmd device_state state
。 - 若要設定或覆寫目前狀態,請執行
adb shell cmd device_state state <IDENTIFIER>
。 - 若要重設狀態,請執行
adb shell cmd device_state state reset
。 - 若要檢查可用狀態,請在可折疊裝置上執行
adb shell cmd device_state print-states
指令。
Google Pixel Fold(型號 ID felix
)
$ adb shell cmd device_state print-states Supported states: [ DeviceState{identifier=0, name='CLOSED', app_accessible=true}, DeviceState{identifier=1, name='HALF_OPENED', app_accessible=true}, DeviceState{identifier=2, name='OPENED', app_accessible=true}, DeviceState{identifier=3, name='REAR_DISPLAY_STATE', app_accessible=true}, ]
三星 Galaxy Z Fold4(型號 ID q4q
)
$ adb shell cmd device_state print-states Supported states: [ DeviceState{identifier=0, name='CLOSE', app_accessible=true}, DeviceState{identifier=1, name='TENT', app_accessible=true}, DeviceState{identifier=2, name='HALF_FOLDED', app_accessible=true}, DeviceState{identifier=3, name='OPEN', app_accessible=true}, ]
與其他 Firebase 產品不同,您無需添加 Firebase SDK 即可使用測試實驗室。如果您還沒有應用程序,可以在線下載 APK 或從AndroidX GitHub 存儲庫中的示例之一構建應用程式和測試 APK。請注意,您只需要應用程式的 APK 檔案即可執行 Robo 測試,而儀器測試則需要從原始程式碼建立的應用程式和測試 APK。有關更多信息,請閱讀儀器測試。
要了解有關測試實驗室功能的更多信息,請參閱開始使用 Firebase 測試實驗室測試 Android 。
螢幕截圖差異測試是測試斷言基於將執行測試時獲得的螢幕影像與代表預期行為的黃金影像進行比較的情況。此類測試在某些設備類型上可能比其他設備更脆弱。我們建議針對此類測試使用 Arm ( *.arm
) 模擬器設備。 Arm 模擬器裝置使用與 Android Studio「通用」模擬器非常相似或相同的映像。
我們還建議您研究測試庫,以幫助在出現預期更改的情況下使螢幕截圖測試更加穩健。
是的!進行以下變更時,虛擬設備會更新:
- 更新現有影像
- 棄用早期 API 級別
- 新增了新的 Android API 級別
若要啟用覆蓋率報告,請將coverage=true
新增至environmentVariables
欄位。如果您使用 Android Test Orchestrator,則需要提供目錄來儲存覆蓋率結果:
--environment-variables coverage=true,coverageFilePath=/sdcard/Download/
如果您不使用 Orchestrator,則可以指定檔案路徑:
--environment-variables coverage=true,coverageFile=/sdcard/Download/coverage.ec
詳細的設備資訊可透過 API 獲取,並且可以使用描述命令從 gcloud 用戶端存取:
gcloud firebase test android models describe MODEL
已知的問題
Robo 測試無法繞過登入畫面,這些登入畫面需要輸入憑證才能登入之外的其他使用者操作(例如,完成驗證碼)。
Robo 測試最適合使用 Android UI 框架中的 UI 元素(包括View
、 ViewGroup
和WebView
物件)的應用程式。如果您使用 Robo 測試來測試使用其他 UI 框架的應用程式(包括使用 Unity 遊戲引擎的應用程式),則測試可能會退出,而不會探索第一個畫面以外的內容。