适用于 iOS 的开发者设备平台设备运行

本指南介绍了如何使用 gcloud beta device-run CLI 运行 iOS XCTest,以及如何在 Google Cloud 控制台中查找结果。它假设您拥有 Google Cloud 账号和项目。

如需使用 device-run CLI,您需要提供 Google Cloud项目 ID。如需查看命令摘要,请参阅 gcloud beta device-run

准备工作

以下步骤假定您已完成以下操作:

  1. 创建了 Google Cloud 项目。
  2. 按照快速入门设置开发者设备平台。
  3. 已在终端中使用 gcloud 进行身份验证。
  4. 查看了 Device Run 概览,了解一般信息。
  5. 已编译测试并将其打包为 ZIP 文件

第 1 步:选择设备类型

使用 device-run CLI,可以在可用的实体设备上执行 iOS 测试。如需查看可用设备的完整列表,请访问交互式设备目录或运行以下命令:

gcloud beta device-run devices list

输出示例:

ID                MAKE   NAME           MODEL        HARDWARE_TYPE  OS_VERSION  CAPACITY  AVAILABILITY  PRODUCTS
iphonese3-18-4    Apple  iPhone SE 3             iphonese3    PHYSICAL       18.4        NONE      NONE          Automation
iphonese3-26-3    Apple  iPhone SE 3             iphonese3    PHYSICAL       26.3        NONE      NONE          Automation

如需了解如何过滤此列表,请参阅设备目录。如需在执行测试作业时定位特定设备,请使用其对应的 ID(例如iphonese3-18-4)在提交命令中。

第 2 步:准备并打包 XCTest

在运行测试之前,您必须先编译测试,确保测试已签名,验证代码签名,并将生成的制品打包到 ZIP 文件中,该文件包含您的 .xctestrun 配置和应用测试 bundle。

1. 为 iOS 实体设备构建测试

在 Xcode 中打开项目,然后构建应用和测试目标以进行测试:

  1. 确保在 Xcode 中为应用目标和测试运行程序目标正确配置代码签名(指定有效的预配配置文件和开发者身份)。
  2. 使用 Xcode(Product > Build For > Testing)或使用 xcodebuild 构建用于测试的版本。

    对于工作区,请按以下步骤操作:

    xcodebuild build-for-testing \
      -workspace YourProject.xcworkspace \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

    对于独立项目:

    xcodebuild build-for-testing \
      -project YourProject.xcodeproj \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

这会在以下位置生成 build 产品:./build/Build/Products

2. 验证 build 产品和签名

构建完成后,验证应用、runner 和 .xctestrun 清单是否已在 ./build/Build/Products/ 下生成。如果是在本地签名,您可以使用 codesign 验证 bundle 签名:

  1. 验证 app bundle:

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp.app
    

    预期输出:YourApp.app: valid on disk

  2. 如果运行的是 XCUITest,请同时验证测试运行程序软件包:

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp-Runner.app
    

    预期输出:YourApp-Runner.app: valid on disk

3. 创建 ZIP 归档文件

将 build 输出产品文件夹中的 Debug-iphoneos 目录和 .xctestrun 文件压缩到单个 ZIP 归档中。

从 build 产品目录运行以下命令:

cd ./build/Build/Products
zip -r MyTests.zip Debug-iphoneos *.xctestrun

这会创建打包的 MyTests.zip,可随时与 --test 标志搭配使用。

第 3 步:运行 XCTest

请注意,以下标志是必需的:

  • 设备:使用 --device 指定设备:--device iphonese3-18-4
  • 测试:使用 --test 指定测试 zip 文件:--test ./MyTests.zip

如需运行 XCTest,请使用 gcloud beta device-run sessions submit xctest 命令。您必须提供在上一步中编译的测试 zip 文件 (MyTests.zip)。

如需运行基本测试会话,请执行以下操作:

gcloud beta device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --test ./MyTests.zip

执行开始后,CLI 会显示创建的会话 ID 和将存储结果的 Cloud Storage 目标位置:

Creating session [session-ee78b0ed] in location [global].
Result files will be stored at [https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/session-ee78b0ed/].

Waiting for session [session-ee78b0ed] to complete....

第 4 步:配置测试运行

您可以使用以下可选标志自定义测试作业(不过至少需要一个 --device 标志实例):

  • 多部设备:多次指定 --device 标志,以便在多部设备上同时运行同一测试:--device iphonese3-18-4 --device iphonese3-26-3--device iphonese3-18-4,iphonese3-26-3
  • 其他应用:在启动使用 --additional-apps 的测试之前,安装一个或多个额外的 .ipa 软件包: --additional-apps=/path/to/AdditionalApp.ipa
  • 自定义 .xctestrun 文件:通过 --xctestrun-file 传递自定义配置文件:--xctestrun-file=/path/to/CustomTests.xctestrun
  • 测试超时:限制执行时长:--xctest-timeout=10m(有效范围为 1m1h,默认值为 5m)。
  • 标签:将用户定义的元数据附加到会话:--labels=env=staging,owner=my-team
  • 将文件推送到设备:在执行测试之前将文件推送到应用数据容器: --other-files-to-push=/tmp/data.txt=com.example.app:/Documents/data.txt
  • 从设备中提取文件:在测试执行完毕后,从应用数据容器中提取文件:--paths-to-pull=com.example.app:/Documents/output.txt
  • 不可靠的测试重试:设置重新运行不可靠的测试的尝试次数上限:--flaky-test-attempts=3(默认值为 1 次尝试)。
  • 自定义 Cloud Storage 存储桶:指定用于输入和输出的自定义 Cloud Storage 存储桶:--bucket-name=my-custom-bucket(默认值为 PROJECT_ID-devicerun)。
  • 由于上传大型 ZIP 或 IPA 文件可能非常耗时,因此您可以直接使用文件的 Cloud Storage gs:// 路径来引用文件,从而节省上传时间。

第 5 步:探索和管理测试运行

您可以使用以下命令跟踪有效运行和管理历史会话:

  • 描述会话:查询会话的实时进度或最终结果:gcloud beta device-run sessions describe SESSION_ID 添加 --full 可查看完整详情,包括设备分配、执行 ID 和 Cloud Storage 制品路径。
  • 列出会议:查看您最近的跑步记录:gcloud beta device-run sessions list --limit=10
  • 取消会话:停止正在运行的测试会话:gcloud beta device-run sessions cancel SESSION_ID
  • 取消操作:停止待处理或正在进行的操作:gcloud beta device-run operations cancel OPERATION_ID

后续步骤

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