Developer Device Platform 裝置執行總覽

歡迎使用 Developer Device Platform Device Run,這項服務可讓您在雲端中的實體和虛擬 Android 裝置,以及實體 iOS 裝置上執行測試和可執行檔。本頁面會歸納功能,並說明執行 Android 檢測設備測試、Android 可執行檔和 iOS 測試時的共通點。如需平台專屬步驟,請參閱「Android Device Run」和「iOS Device Run」。

如要從 Firebase Test Lab 遷移至 Developer Device Platform,請參閱遷移指南、指令和旗標翻譯,以及 AI 代理程式的遷移技能。

如要使用這項 Google Cloud CLI,您必須提供 Google Cloud 專案 ID。如需指令摘要,請參閱:gcloud beta device-run

主要功能

Developer Device Platform Device Run 是一項 Google Cloud 服務,可讓您在實體和虛擬行動裝置上執行自動化測試套件。Device Run 專為現代的持續整合與持續推送軟體更新 (CI/CD) 工作流程而建構,可透過 Google Cloud CLI (gcloud beta device-run) 提供指令列控制功能,讓團隊在專用硬體和虛擬環境中執行、管理及擴充測試套件。

1. 跨平台自動化測試

  • 支援 Android 和 iOS:Device Run 支援內建測試框架,包括 Android 檢測設備測試 (.apk)、Android 執行檔 (已編譯的二進位檔) 和 iOS XCTest (.ipa 或 .zip)。
  • 彈性指定裝置:使用 --device 旗標,透過 OS 和型號 ID (例如 Pixel 或 iPhone 型號),指定裝置目錄中列出的特定實體或虛擬裝置。
  • 多裝置平行執行:指定以半形逗號分隔的裝置 ID,或提供多個 --device 標記,即可在多部裝置上同時執行相同的測試套件。

2. 靈活的執行模式和控制項

  • 同步和非同步提交:測試執行作業預設會同步運作,並在完成後顯示摘要。加入 --async 旗標會立即傳回工作階段 ID,以供非封鎖執行,之後可以使用 gcloud beta device-run sessions wait 監控。
  • 自訂執行逾時*:使用 --instrumentation-timeout 或 --xctest-timeout 設定執行時間長度限制。
  • 不穩定測試重試:使用 --flaky-test-attempts 旗標,設定不穩定測試執行的重試次數上限。

3. 軟體版本和依附元件管理

  • 可設定的測試環境*:在啟動測試執行作業前,探索、檢查及選取特定軟體環境版本,例如 AndroidX Test Orchestrator 和 Apple Xcode。
  • 版本探索:使用 gcloud beta device-run software-versions list 和 describe 指令,查看使用中的軟體套件、支援的 OS 版本和預設執行階段規格。

4. 儲存空間和構件管理

  • Cloud Storage 整合:測試輸入內容 (APK、IPA、支援應用程式) 和輸出構件 (記錄、測試報告) 會儲存在 Cloud Storage。
  • 值區彈性:系統會自動預設為名為 PROJECT_ID-devicerun 的專案值區,或透過 --bucket-name 旗標指定自訂值區。您對這個 bucket 擁有完整控制權,因此在不再需要其內容時,必須手動移除內容,或在 bucket 上設定自動生命週期管理。如需操作說明,請參閱「關於物件刪除」。
  • 直接雲端路徑:直接參照現有的 gs:// 路徑,處理大型檔案,避免上傳負擔。

5. 進階 Android 測試功能

  • Android Test Orchestrator:在各自的 Instrumentation 執行個體中執行每項測試,藉此隔離測試執行作業,防止共用應用程式狀態,並隔離應用程式當機問題。
  • 測試資料分割:
    • 統一資料分割:將測試案例平均分配至指定數量的資料分割 (--sharding-option=uniform)。
    • 智慧型資料分割:使用歷來測試執行資料,動態平衡各個資料分割的測試案例,指定特定總執行時間長度 (--sharding-option=smart)。

6. 工作階段管理和診斷

  • 完整工作階段控制:使用 sessions list、sessions describe 和 sessions cancel 列出、描述、篩選或取消進行中或過往的測試執行作業。
  • 早期輸入驗證:自動驗證提交的測試二進位檔和設定構件,並在發生錯誤時顯示明確的錯誤詳細資料和根本原因 (例如目標套件不符)。

核心設定

必要旗標

請注意,下列旗標為必填:

  • 裝置:使用 --device 指定裝置:--device shiba-35 或 --device iphonese3-18-4
  • 測試或可執行檔:使用 --test (--test /path/to/test.apk 或 --test /path/to/MyTests.zip) 指定測試執行作業的測試套件,或使用 --executable (--executable /path/to/my_executable) 指定 Android 可執行檔執行作業的可執行二進位檔或指令碼。

以下是 Device Run 工作階段通用的設定選項。

輸入和輸出 Cloud Storage 路徑

  • 自訂 Cloud Storage bucket:您可以指定自訂 Cloud Storage bucket 來存放輸入和輸出內容:--bucket-name=my-custom-bucket。如果未使用 --bucket-name= 旗標指定 Cloud Storage bucket,Google Cloud CLI 會使用名為 PROJECT_ID-devicerun 的預設 bucket。
  • 輸入檔案:使用 --test、--executable、--apps、--additional-apps、--other-files-to-push 或 --xctestrun-file 旗標指定本機路徑時,Google Cloud CLI 會在您每次執行指令時,自動將檔案複製到 gs://BUCKET_NAME/automation/inputs/DATE_TIME_FOUR_CHARS_SUFFIX/ 下方的 Cloud Storage bucket,其中 BUCKET_NAME 預設為 PROJECT_ID-devicerun。
  • 雲端路徑:上傳大型檔案可能需要較長時間,因此您可以直接使用 Cloud Storage gs:// 路徑參照檔案,節省上傳時間。
  • 結果檔案:輸出構件會上傳至 gs://BUCKET_NAME/automation/sessions/session-[SESSION_ID]/ 下方的 Cloud Storage bucket。

輸入驗證

Developer Device Platform 會嘗試驗證輸入內容 (包括構件),並在遇到錯誤輸入時傳回 ERROR,而非 PASSED 或 FAILED:

Session [session-94b57778] finished with result [ERROR].
JOB NAME  EXECUTION NAME  EXECUTION RESULT
job-000   execution-000   ERROR

現在,請將 --full 附加至 sessions describe 指令,查看工作階段的更多詳細資料:

gcloud beta device-run sessions describe --full session-94b57778

這會產生類似下列內容的輸出結果:

name: projects/user-test1/locations/global/sessions/session-94b57778
sessionConfig:
  displayName: instrumentation-session
  jobConfigs:
  -   action:
      androidInstrumentationTest:
        testInstallable:
          files:
          -   gcsInputFile:
              path: gs://user-test1-devicerun/automation/inputs/2026-09-16_18:55.17372947_EECF/my-test.apk
    allocationConfig:
      deviceConfigs:
      -   actions:
        -   androidLogcat: {}
        requirement:
          deviceId: mediumphone-arm-34
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://user-test1-devicerun/automation/sessions
sessionReport:
  endTime: '2026-09-16T18:55:49.721Z'
  id: ed681f23-669b-4464-8a93-b28456e58136
  jobReports:
  -   displayName: job-000
    endTime: '2026-09-16T18:55:45.839Z'
    executionReports:
    -   displayName: execution-000
      endTime: '2026-09-16T18:55:46.694Z'
      id: ce370173-af94-4dd7-acc6-0863e4d2e9ec
      result:
        cause:
          summary:
            message: The instrumentation target package does not match any of the
              installable packages.
            reason: INSTRUMENTATION_TARGET_MISMATCH
            type: CUSTOMER
        resultType: ERROR
      startTime: '1970-01-01T00:00:00Z'
      status:
        statusType: PENDING
    id: 953b5106-3c20-40f0-aceb-18af89cd1b83
    result:
      cause:
        summary:
          message: The instrumentation target package does not match any of the installable
            packages.
          reason: INSTRUMENTATION_TARGET_MISMATCH
          type: CUSTOMER
      resultType: ERROR
    startTime: '2026-09-16T18:55:31.651Z'
    status:
      statusType: DONE
  result:
    resultType: ERROR
  startTime: '2026-09-16T18:55:24.442Z'
  status:
    statusType: DONE

後續步驟

使用開發人員裝置平台執行 Android 測試或可執行檔,或執行 iOS 測試。