使用 Google Cloud CLI 进行测试

本指南介绍如何使用 gcloud CLI 运行 XCTest 测试或游戏循环测试。

第 1 步:配置您的本地 Google Cloud SDK 环境

  1. 下载 Google Cloud SDK
  2. 其中包括 gcloud CLI 工具。

  3. 确保您安装的版本是最新的,并且包含 gcloud firebase 命令:
          gcloud components update
  4. 使用您的 Google 账号登录 gcloud CLI:
          gcloud auth login
  5. 在 gcloud 中设置您的 Firebase 项目,其中 PROJECT_ID 是您的 Firebase 项目的 ID:
         gcloud config set project PROJECT_ID

第 2 步:运行测试

运行 XCTest 测试

  1. 运行以下命令以上传测试的 .zip 文件(如果您尚未将应用打包,请参阅将您的 XCTest 测试打包):

    cd FOLDER_WITH_TEST_OUTPUT/Build/Products ; \
    zip -r MyTests.zip Debug-iphoneos YOUR_SCHEME_iphoneosDEPLOYMENT_TARGET-arm64.xctestrun
  2. 选择测试维度。

    利用 Test Lab,您可以针对不同 iOS 版本、设备、屏幕方向和语言区域等配置运行测试。这些配置统称为测试的“测试维度”。如需查看适用于各维度的选项(例如,设备的 iOS 版本支持的 Xcode 版本),请将以下命令中的 dimension 替换为 modelsversionslocales

    gcloud firebase test ios dimension list

    屏幕方向稍微简单一些,因为它只有 portraitlandscape 选项。

    浏览测试维度列表,并选择一些您想要测试的组合。访问定价方案,了解您每天可以运行的组合数量上限。

  3. 选好一组测试维度后,您可以使用 firebase test ios run 命令让 Test Lab 运行测试。对于您要测试的每个测试维度组合,请添加单独的 --device 标志:

    gcloud firebase test ios run --test PATH/TO/MyTests.zip \
     --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
     --device model=MODEL_ID_2,version=VERSION_ID_2,locale=LOCALE_2,orientation=ORIENTATION_2 \
     etc...

    如果用于构建测试的 Xcode 版本与 Test Lab 使用的默认 Xcode 版本不兼容,您的测试可能会失败。要为您的测试指定受支持的 Xcode 版本,请使用 --xcode-version 标志:

    gcloud firebase test ios run --test PATH/TO/MyTests.zip \
     --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
     --xcode-version=11.3

    为帮助您在 Firebase 控制台中识别和定位测试矩阵,您可以选择使用以下示例中的 --client-details matrixLabel="<label>" 标志为测试矩阵添加标签:

    gcloud beta firebase test ios run --test PATH/TO/MyTests.zip \
      --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
      --client-details matrixLabel="my label"

测试特殊权限

如需测试需要明确应用 ID 的权限,您可以设置 --test-special-entitlements 标志。Test Lab 会使用新的软件包标识符为应用重新签名以支持特殊权限,因此请确保您的 zip 文件中没有直接引用应用软件包 ID 的资源。

推送通知

若要对推送通知请求授权,用户可以结合使用私有签名密钥以及密钥 ID (C7FD9DJAA8) 和团队 ID (9CKCGNNUQN) 来创建 JSON Web 令牌。生成的令牌的有效期为一小时,并且每 60 分钟需要刷新一次。如需了解详情,请参阅基于令牌建立目标为 APNs 的连接。

应用组

应用组 ID 是通用唯一标识符。这意味着,当我们对用户应用重新签名时,只能使用与 Test Lab 开发者账号相关联的应用组 ID。如果您的测试依赖于应用组,测试将失败。

运行游戏循环测试

运行 gcloud beta firebase test ios run 命令并使用以下标志来配置运行:

用于游戏循环测试的标志
--type

必需:指定您要运行的 iOS 测试的类型。您可以输入 xctest(默认)或 game-loop 测试类型。

--app

必需:应用的 IPA 文件的绝对路径(在 GCS 或文件系统中的绝对路径)。 此标志仅在运行游戏循环测试时有效。

--scenario-numbers

您要在应用中运行的循环(也就是场景)。您可以输入循环、循环列表或循环范围。默认循环为 1。

例如,--scenario-numbers=1-3,5 会运行循环 1、2、3 和 5。

--device-model

您要用来运行测试的实体设备(了解您可以使用哪些可用设备)。

--timeout

您希望测试运行的最长时长。您可以直接输入一个整数来表示以秒为单位的时长,也可以输入整数以及枚举值来表示更长的时间单位。

例如:

  • --timeout=200 会强制您的测试在运行时间达到 200 秒后终止。
  • --timeout=1h 会强制您的测试在运行时间达到一小时后终止。

例如,以下命令会运行在 iPhone 8 Plus 上执行循环 1、4、6、7 和 8 的游戏循环测试:

gcloud beta firebase test ios run
 --type game-loop --app path/to/my/App.ipa --scenario-numbers 1,4,6-8
 --device-model=iphone8plus

如需详细了解 gcloud CLI,请参阅参考文档

第 3 步(可选):自动执行您将来构建的测试

编写 Test Lab gcloud 命令脚本

除了使用 gcloud 命令行运行移动应用测试命令外,您也可以使用 shell 脚本或批处理文件自动执行这些命令。下面的 bash 脚本示例会运行 XCTest(超时值设为两分钟),并报告测试运行是否已成功完成:

if gcloud firebase test ios run --test MyTest.zip --timeout 2m
then
    echo "Test matrix successfully finished"
else
    echo "Test matrix exited abnormally with non-zero exit code: " $?
fi

脚本退出代码

Test Lab 提供了几种退出代码,以帮助您更好地理解使用脚本或批处理文件运行的测试的结果。

退出代码 备注
0 所有测试作业均已通过。
1 发生了常规错误。可能的原因包括:文件名不存在或出现 HTTP/网络错误。
2 因为提供的命令或参数未知,所以测试退出。
10 测试作业中的一个或多个测试用例(被测试的类或类方法)未能通过。
15 由于发生了意外错误,Firebase Test Lab 无法确定测试矩阵是顺利通过还是失败了。
19 用户已取消测试矩阵。
20 发生了测试基础架构错误。

第 4 步:研究测试结果

测试开始后,您会收到指向测试结果页面的链接。测试可能需要数分钟才能运行完毕,具体取决于您选择的各种配置的数量,以及为测试设置的测试超时时长。在运行测试后,您可以查看测试结果。如需详细了解如何解读测试结果,请参阅分析 Firebase Test Lab 结果

后续步骤

请参阅 Google Cloud SDK 文档,了解已正式推出Beta 版的测试选项。