本頁面提供疑難排解說明,以及使用開發人員裝置平台執行測試時的常見問題解答。如果找不到所需資訊或需要其他協助,請與我們聯絡。
疑難排解
為什麼測試執行時間這麼長?
在 Developer Device Platform 目錄中選取容量等級較高的裝置,測試可能會更快開始。如果裝置容量不足,測試執行時間可能會延長。如果叫用的測試數量遠大於所選裝置的容量,測試可能需要較長時間才能完成。
在任何裝置容量層級執行的測試,都可能因下列因素而需要較長時間:
- 流量,這會影響裝置可用性和測試速度。
- 裝置或基礎架構故障 (隨時可能發生)。如要查看開發人員裝置平台是否有回報的基礎架構問題,請前往Google Cloud Personalized Service Health資訊主頁。
如要進一步瞭解開發人員裝置平台中的裝置數量,請參閱裝置目錄。
為什麼我收到無法判定的測試結果?
測試結果不確定通常是因為測試執行作業已取消,或是基礎架構發生錯誤。除了 PASSED 和 FAILED 之外,Developer Device Platform 也可能會傳回 ERROR、TIMED_OUT 和 CANCELLED。
基礎架構錯誤是由內部開發人員裝置平台問題所致,例如網路錯誤或裝置行為異常。如果測試執行作業產生基礎架構錯誤,開發人員裝置平台會在回報結果不確定前,多次重試測試執行作業。
如要找出錯誤原因,請按照下列步驟操作:
- 在 Google Cloud Service Health 資訊主頁中,查看是否有已知服務中斷情形。
在開發人員裝置平台中重試測試,確認問題是否可重現。
請嘗試在其他裝置或裝置類型上執行測試 (如適用)。詳情請參閱裝置目錄。
為什麼分片會導致測試時間變長?
如果您指定的資料分割數量超出開發人員裝置平台可用的裝置數量,資料分割可能會導致測試執行時間變長。為避免這種情況,請將裝置數量限制為分片數量。如要進一步瞭解如何選擇其他裝置,請參閱裝置目錄。
為什麼測試需要很長時間才能開始?
提交測試要求時,系統會先驗證及重新簽署應用程式,為在裝置上執行測試做準備。通常這項程序會在幾秒內完成,但可能會受到應用程式大小等因素影響。
準備好應用程式後,系統會排定測試執行時間,並將測試保留在佇列中,直到裝置準備好執行測試為止。
為什麼測試需要這麼久的時間才能完成?
測試執行作業完成後,系統會從裝置下載測試構件、處理構件,然後上傳至 Cloud Storage。這個步驟所需的時間長度可能會受到構件數量和大小影響。
Android 專屬疑難排解
應用程式未傳回資料,且找不到螢幕截圖
測試執行構件 (例如螢幕截圖和記錄檔) 會儲存在 Cloud Storage 中,並直接顯示在 Google Cloud 控制台中。確認您已指派專案層級角色。
另請注意,開發人員裝置平台有專屬的服務代理程式,會使用自己的憑證 (而非您的憑證) 執行下列操作:
- 讀取及寫入 Cloud Storage 值區和物件
- 將 Cloud Storage 輸入檔案下載至內部系統
- 將檔案從內部系統上傳至 Cloud Storage 輸出 bucket
您可能可以存取 Cloud Storage bucket 和檔案,但該 bucket 屬於與 DDP 中使用的專案不同的 Google Cloud 專案。因此,Developer Device Platform 服務帳戶無法存取該值區。
您也可以在個別 bucket 上設定額外的存取權控管。如要瞭解如何在測試中加入檔案,請參閱「裝置執行」。
為什麼我只收到部分或沒有收到檢測設備測試案例結果?
執行插樁測試時,您可能會發現測試案例總數少於預期。這通常是因為開發人員裝置平台無法剖析 logcat,以取得通常由 AndroidJUnitRunner 產生的測試案例開始或結束標記。
以下是導致這個問題的常見原因:
| 問題說明 | 可能的解決方法 |
|---|---|
| 測試案例因逾時而未執行。如果測試總時間長度超過您指定或最長逾時時間,開發人員裝置平台會取消其餘測試案例。 |
|
| 測試案例提前結束或停滯,因此無法完成。 測試案例可能會因未擷取的例外狀況或斷言錯誤而提早結束。如果應用程式未顯示正確的檢視畫面,且測試案例無法在 UI 上執行動作,測試案例可能會陷入無限迴圈或無法繼續執行。 |
檢查影片和 logcat,找出測試停止的位置。
|
自訂測試執行器 (包括擴充 AndroidJUnitRunner) 意外當機,或將未預期的測試案例開始或結束標記寫入 logcat。 |
檢查測試執行器程式碼。 |
系統將過多記錄寫入 logcat,導致緩衝區溢位或 logcat 程序當機。 |
將寫入次數減少至 logcat。
|
| 受測應用程式異常終止。 | 偵錯應用程式。 |
常見問題 (FAQ)
哪裡可以找到開發人員裝置平台定價資訊?
詳情請參閱「定價和帳單問題」。
哪裡可以找到裝置詳細資料,例如解析度等?
您可以透過 API 取得詳細的裝置資訊,並使用 device-run devices describe <device-id> 指令,從開發人員裝置平台 CLI 存取這些資訊:
gcloud beta device-run devices describe DEVICE_ID
如何判斷抵達後端的流量是否來自開發人員裝置平台?
在後端,您可以根據IP 範圍檢查來源 IP 位址,判斷流量是否來自 Developer Device Platform 代管的測試裝置。
Developer Device Platform 是否支援 VPC-SC?
開發人員裝置平台不支援 VPC-SC,因此無法在開發人員裝置平台的內部儲存空間與使用者的結果 bucket 之間複製應用程式和其他測試構件。
如何減少 Developer Device Platform 中的不穩定測試?
如要偵測測試中的不穩定行為,建議使用 --flaky-test-attempts 選項。與一般測試執行作業相同,系統會向您收取 Deflake 重試費用,或將其計入每日配額。
請注意以下幾點:
- 根據預設,DDP 會依序重試,以節省費用。使用者必須設定
--flaky-test-parallel-retry,才能並行執行。 --flaky-test-retry-level旗標會定義是否要在shard或個別test層級重試,預設為shard。設為test可縮減重試測試的大小和時間。
iOS 專屬常見問題
開發人員裝置平台是否支援 Appium、Flutter/FlutterDriver、ReactNative/Jest 或 Cucumber?
雖然我們已將部分項目納入藍圖,但無法保證支援這些測試和應用程式開發平台。
為什麼 iOS 測試結果缺少影片?
iOS 18 以上版本預計支援在結果中顯示影片。
Android 專屬常見問題
Developer Device Platform 是否支援穿戴式裝置?
當然可以!開發人員裝置平台支援 Google Pixel Watch。現在,您可以在 Google Pixel Watch 上,對獨立的 Wear OS 應用程式執行測試。如要進一步瞭解 Developer Device Platform 裝置,請參閱裝置目錄。
Developer Device Platform 是否支援最新的 Google 裝置?
當然可以!開發人員裝置平台支援 Google Pixel Tablet 和 Google Pixel Fold。 您可以在獨立實體裝置上執行測試。如要進一步瞭解開發人員裝置平台提供的裝置,請參閱裝置目錄。
開發人員裝置平台是否支援 Appium、Flutter/FlutterDriver、ReactNative/Jest 或 Cucumber?
雖然我們已將部分項目納入藍圖,但無法保證支援這些測試和應用程式開發平台。不過,如果您使用支援 Espresso 的架構 (例如 Flutter) 建構應用程式,可以使用 Espresso 編寫檢測設備測試,然後在開發人員裝置平台中執行測試。
開發人員裝置平台是否支援測試經過模糊處理的應用程式 (例如使用 ProGuard 或 R8)?
開發人員裝置平台並未明確支援模糊處理或解除模糊處理。應用程式可能可以執行,但記錄中會顯示經過混淆處理的應用程式資料,例如堆疊追蹤記錄。
在 Developer Device Platform 上測試時,我可以在不同摺疊狀態和姿勢下使用摺疊式裝置嗎?
當然可以!你可以測試摺疊裝置的摺疊狀態和姿勢。
折疊式裝置可能處於各種不同的折疊狀態,如 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},
]
Samsung 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},
]
如果沒有應用程式,可以試用開發人員裝置平台嗎?
與其他開發人員裝置平台產品不同,您不需要新增開發人員裝置平台 SDK,即可使用開發人員裝置平台。如果您還沒有應用程式,可以從線上下載 APK,或是從 AndroidX GitHub 存放區的其中一個範例建構應用程式和測試 APK。請注意,檢測設備測試需要從原始碼建構應用程式和測試 APK。詳情請參閱「檢測設備測試」。
如要進一步瞭解 Developer Device Platform 功能,請參閱 DDP 產品總覽。
哪些裝置最適合用於螢幕截圖差異測試?
螢幕截圖差異測試:測試斷言會比較測試執行期間取得的畫面圖片,以及代表預期行為的黃金圖片。這類測試在某些裝置類型上可能比其他裝置類型更為脆弱。建議您針對這類測試,以 Arm (*.arm) 模擬器裝置為目標。Arm 模擬器裝置使用的映像檔與 Android Studio 通用模擬器非常相似或相同。
此外,我們也建議您研究測試程式庫,這類程式庫有助於在預期變更的情況下,讓螢幕截圖測試更加穩健。
Developer Device Platform 會更新虛擬裝置嗎?
當然可以!進行下列變更時,虛擬裝置會更新:
- 更新現有圖片
- 淘汰較舊的 API 級別
- 新增 Android API 級別
如何啟用涵蓋範圍報表?
如要啟用涵蓋範圍報表,請在
additional-test-options
欄位中新增 coverage=true。
如果您使用 Android Test Orchestrator,則必須提供目錄路徑來儲存涵蓋範圍結果:
--additional-test-options coverage=true,coverageFilePath=/sdcard/Download/
如果未使用 Orchestrator,可以指定檔案路徑:
--additional-test-options coverage=true,coverageFile=/sdcard/Download/coverage.ec
如何在沒有手機的情況下登入 Wear 應用程式?
如果應用程式通常需要使用手機登入,您可以建立建構變體,略過登入程序並使用內嵌在測試建構中的權杖,或從磁碟上的檔案讀取資料 (通常是使用 --other-files-to-push 旗標推送)。