使用 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 版的测试选项。