本指南介绍了如何使用 gcloud beta
device-run CLI 运行 iOS XCTest,以及如何在 Google Cloud 控制台中查找结果。它假设您拥有 Google Cloud 账号和项目。
如需使用 device-run CLI,您需要提供 Google Cloud项目 ID。如需查看命令摘要,请参阅 gcloud beta device-run。
准备工作
以下步骤假定您已完成以下操作:
- 创建了 Google Cloud 项目。
- 按照快速入门设置开发者设备平台。
- 已在终端中使用
gcloud进行身份验证。 - 查看了 Device Run 概览,了解一般信息。
- 已编译测试并将其打包为 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 中打开项目,然后构建应用和测试目标以进行测试:
- 确保在 Xcode 中为应用目标和测试运行程序目标正确配置代码签名(指定有效的预配配置文件和开发者身份)。
使用 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 签名:
验证 app bundle:
codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp.app预期输出:
YourApp.app: valid on disk如果运行的是 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(有效范围为1m到1h,默认值为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
后续步骤
接下来,我们将查找和分析日志。