本指南介绍了如何使用 gcloud beta device-run CLI 运行 Android 插桩测试,以及如何在 Google Cloud 控制台中查找结果。本教程假设您拥有 Google Cloud 账号和项目。
如需使用此 Google Cloud CLI,您需要提供 Google Cloud 项目 ID。如需查看命令摘要,请参阅 gcloud beta device-run。
准备工作
这些步骤假设您已创建 Google Cloud 项目,完成了开发者设备平台快速入门指南中的设置步骤,并在终端中通过 gcloud 完成了身份验证。
此外,您还需要准备好要运行的 Android 插桩测试。如需相关指导,请参阅构建插桩测试。
此外,您还应确定要在哪些设备 ID 上运行工作负载。如需相关说明,请参阅设备目录。
运行测试
现在,您已经知道了可用于测试应用的设备的 ID,接下来可以使用 gcloud beta device-run sessions submit
instrumentation 命令和 --device 标志来指定运行插桩测试的设备。
如需运行测试,请发出类似于以下内容的命令,但要使用您自己的设备 ID 和测试路径:
gcloud beta device-run sessions submit instrumentation \
--device shiba-34 \
--apps /path/to/app.apk \
--test /path/to/test.apk
作业的结果报告文件夹位于 Cloud Storage 路径(例如 gs://<your_project_id>/automation/sessions/session-id/)中。查看链接的测试输出,类似于:https://console.cloud.google.com/storage/browser/your_project_id/automation/sessions/session-id/。
配置测试运行
现在,您已经运行了测试,接下来可以探索一些配置选项:
- 如需在多台设备上运行相同的测试,请提供
--device标志,并以英文逗号分隔的方式指定多个设备 ID(例如--device shiba-34,tokay-36),或者提供多个--device标志,每个标志指定一个不同的设备 ID(例如--device shiba-34 --device tokay-36)。 - 您可以视情况使用
--apps=path1,path2,...,path_n标志指定要在运行测试之前安装的一个或多个 APK。您指定的顺序就是这些应用的安装顺序。 - 您必须使用
--test标志指定测试 APK。 - 当您使用
--apps或--test标志指定本地路径时,每次执行命令时,Google Cloud CLI 都会自动将其复制到 Cloud Storage 存储桶中的gs://my-project-id/automation/inputs/date_time_four_chars_suffix/下。 - 由于上传大型 APK 可能非常耗时,因此您可以直接使用 APK 的 Cloud Storage
gs://路径来引用 APK,从而节省上传时间。
默认情况下,sessions submit instrumentation 命令会阻塞会话结果,这意味着它会等待测试运行完成并输出类似如下的结果:
Using the default Cloud Storage bucket [gs://<my-project-id>] for input and result files. Will create the bucket if it does not exist.
Uploading [app.apk].
Uploading [test.apk].
Initiated long-running operation [operation-number] to create session.
Creating session [session-id] in location [global].
Result files will be stored at [https://console.cloud.google.com/storage/browser/<my-project-id>/automation/sessions/session-id/].
Waiting for session [session-id] to complete....done.
Session [session-id] finished with result [FAILED].
JOB NAME EXECUTION NAME EXECUTION RESULT
job-000 all FAILED: 2 test cases failed, 5 passed
如需异步运行命令,请添加 --async 标志。这样一来,该命令便可在将文件上传到 Cloud Storage 并打印操作 ID 和会话 ID 后立即退出。您可以使用操作等待命令和操作 ID 来等待执行完成。它会一直处于阻塞状态,直到作业完成:
gcloud beta device-run operations wait your_operation_id
使用分片
如需在持续集成和持续交付 (CI/CD) 工作流中纳入开发者设备平台,您应考虑对测试进行分片。测试分片旨在将一组测试划分为多个独立运行的子组(分片)。开发者设备平台会自动使用多个设备并发运行各个分片,从而在更短的时间内完成整个测试集。
分片选项
如果您的作业只有少量测试用例,或者所有测试用例的总执行时间不长,则无需使用分片。如果您有大量测试用例,或者所有测试用例的总执行时间较长,请考虑使用分片。
开发者设备平台同时支持智能分片和统一分片。在决定如何对测试进行分片时,请考虑以下选项:
如果所有测试用例的耗时都差不多,请使用均匀分片,将所有测试用例划分为
n个分片。如果不同测试用例的执行时间差异很大,请使用智能分片。开发者设备平台会使用历史测试作业时间来创建不同的分片,并尝试在相似的时长内完成所有分片。
均匀分片
如需使用均匀分片对测试进行分片,请在 sessions submit instrumentation 命令中添加 --sharding-option=uniform 和 --uniform-sharding-count= 标志,如下所示:
gcloud beta device-run sessions submit instrumentation \
--test path/to/test.apk \
--device shiba-34,tokay-36 \
--sharding-option=uniform \
--uniform-sharding-count=2
您应该会看到指示 Job status: 2 running 的输出。该服务会创建两个作业,每个设备对应一个作业。由于这两个作业的输入相同,因此该服务会集中进行验证,仅执行一次。
完成后,您会在命令的最终输出中看到这两个作业分别列出:
JOB NAME EXECUTION NAME EXECUTION RESULT
job-000 execution-000 PASSED
job-001 execution-000 PASSED
智能分片
如需使用智能分片功能对测试进行分片,请在 sessions
submit instrumentation 命令中添加 --sharding-option=smart、--smart-sharding-max-shard-count=、--smart-sharding-target-duration=(以分钟为单位或 1h)和 --smart-sharding-record-name= 标志,如下所示:
gcloud beta device-run sessions submit instrumentation \
--test path/to/test.apk \
--device shiba-34,shiba-35,tokay-36 \
--sharding-option=smart \
--smart-sharding-max-shard-count=3 \
--smart-sharding-target-duration=5m \
--smart-sharding-record-name=test.yaml
您应该会看到最终输出,其中显示运行了 3 个作业:
Session [session-3cd0564a] finished with result [ERROR].
JOB NAME EXECUTION NAME EXECUTION RESULT
job-000 execution-000 PASSED
job-001 execution-000 PASSED
job-002 execution-000 PASSED
下面简要介绍了此处使用的智能分片标志:
--smart-sharding-max-shard-count=SMART_SHARDING_MAX_SHARD_COUNT- 指定为智能分片创建的分片数量上限。如果未设置或设置为 0,则使用系统定义的最大限制。对于实体设备,有效范围为 0 到 20;对于虚拟设备,有效范围为 0 到 200。--smart-sharding-target-duration=SMART_SHARDING_TARGET_DURATION- 为智能分片指定每个分片的预期执行时间(例如 2 分钟、10 分钟、1 小时)。有效范围为 2 分钟到 1 小时。当值为--sharding-option=smart时,必须设置此参数。--smart-sharding-record-name=SMART_SHARDING_RECORD_NAME- 指定智能分片记录文件的名称,不包括文件扩展名。当 --sharding-option=smart 时,此参数为必需参数。此 YAML 文件位于--bucket-name指定的 Google Cloud存储桶中的smart-sharding/目录下。如果该文件不存在,系统会自动创建;否则,系统会在会话完成后更新其内容。
探索和管理测试运行
对于 sessions submit instrumentation 命令的异步模式和同步模式,您都可以使用 sessions describe 命令在执行期间查询作业状态,或在作业完成后获取结果:
gcloud beta device-run sessions describe <session_id>
输出会总结测试结果,并提供指向 Google Cloud 控制台中结果的链接。 例如:
Session [session-id] finished with result [FAILED].
Result files are stored at [https://console.cloud.google.com/storage/browser/your_project_id-devicerun/automation/sessions/session-id/].
JOB NAME EXECUTION NAME EXECUTION RESULT
job-000 all FAILED: 2 test cases failed, 5 passed
使用以下命令列出所有正在运行和已完成的会话:
gcloud beta device-run sessions list
接收包含项目中的会话列表的输出,如下所示:
SESSION_ID START_TIME STATE
session-4825e153 2026-07-28T16:38:43.155Z DONE
session-813ca602 2026-07-28T22:40:32.415Z DONE
session-67cd0570 2026-07-16T08:25:55.474Z DONE
session-17cc299c 2026-07-14T14:31:33.649Z DONE
session-911d0763 2026-07-09T00:39:02.051Z DONE
session-4e943fea 2026-07-15T23:08:32.252Z DONE
session-0132e458 2026-08-20T18:33:19.751Z DONE
session-1077f07b 2026-07-28T22:35:43.848Z DONE
session-71b054c6 2026-07-15T01:15:41.643Z DONE
session-4f8b2e45 2026-08-06T23:11:56.161Z DONE
sessions list 命令支持所有标准 gcloud 标志选项。例如:
gcloud beta device-run sessions list --limit 5
这会产生类似如下的结果:
SESSION_ID START_TIME STATE
session-4825e153 2026-07-28T16:38:43.155Z DONE
session-813ca602 2026-07-28T22:40:32.415Z DONE
93ec2df2-d5bf-4c36-b7f7-c2a4fb0dc3ce 2026-07-03T05:10:58.015Z DONE
session-67cd0570 2026-07-16T08:25:55.474Z DONE
session-17cc299c 2026-07-14T14:31:33.649Z DONE
如需查找所有正在运行的会话,请运行以下命令:
gcloud beta device-run sessions list --filter RUNNING
假设您有正在运行的会话,您会看到类似如下所示的结果:
SESSION_ID START_TIME STATE
session-d7ff8b81 RUNNING
否则,您会收到 Listed 0 items.
如需取消正在运行的会话,请运行以下命令并提供您的会话 ID:
gcloud beta device-run sessions cancel your_session_id
该命令会立即返回,因为系统只会将相应会话标记为待取消。取消操作会在后端异步进行。
如果会话已结束,则仅打印当前状态。 请求取消已完成的会话不会导致错误。
后续步骤
接下来,我们将查找和分析日志。