开发者设备平台设备运行

本指南介绍了如何使用 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

该命令会立即返回,因为系统只会将相应会话标记为待取消。取消操作会在后端异步进行。

如果会话已结束,则仅打印当前状态。 请求取消已完成的会话不会导致错误。

后续步骤

接下来,我们将查找和分析日志