欢迎使用 Developer Device Platform Device Run,该平台可让您在云端实体和虚拟 Android 设备以及实体 iOS 设备上运行测试和可执行文件。本页总结了运行 Android 插桩测试、Android 可执行文件和 iOS XCTest 测试的功能并介绍了它们之间的共性。
如果您要从 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标志,使用操作系统和型号标识符(例如 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命令查看活跃软件包、支持的操作系统版本和默认运行时规范。
4. 存储和制品管理
- Cloud Storage 集成:测试输入(APK、IPA、支持应用)和输出工件(日志、测试报告)存储在 Cloud Storage 中。
- 存储桶灵活性:自动默认为名为
PROJECT_ID-devicerun的项目存储桶,或路由到通过--bucket-name标志指定的自定义存储桶。您对此存储桶拥有完全控制权,在不再需要其内容时,您需要手动移除其内容,或者在存储桶上配置自动生命周期管理。如需相关说明,请参阅关于对象删除。 - 直接云路径:直接引用现有
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 存储桶:您可以为输入和输出指定自定义 Cloud Storage 存储桶:
--bucket-name=my-custom-bucket。如果您未使用--bucket-name=标志指定 Cloud Storage 存储桶,则 Google Cloud CLI 将使用名为PROJECT_ID-devicerun的默认存储桶。 - 输入文件:当您使用
--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_NAME默认为PROJECT_ID-devicerun。 - 云路径:由于上传大文件可能非常耗时,因此您可以直接使用其 Cloud Storage
gs://路径引用这些文件,以节省上传时间。 - 结果文件:输出工件会上传到
gs://BUCKET_NAME/automation/sessions/session-[SESSION_ID]/下的 Cloud Storage 存储桶。
输入验证
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
后续步骤
使用 Developer Device Platform 运行 Android 插桩测试、Android 可执行文件或 iOS XCTest。