开始使用 gcloud CLI 执行测试

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

如需查看可在 Test Lab 中对您的 Android 应用执行的 gcloud 命令的完整列表,请访问 gcloud firebase test android 参考文档

准备工作

将 Firebase 添加到您的 Android 项目(如果尚未添加)。

第 1 步:设置 gcloud CLI

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

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

第 2 步:检查可用的测试设备

使用以下 gcloud 命令查看可用于测试的测试设备和语言区域。

您也可以选择下载示例 Notepad 应用,立即开始运行命令。使用二进制文件 app-debug-unaligned.apk 和插桩测试文件 app-debug-test-unaligned.apk(位于 NotePad/app/build/outputs/apk/ 中)。

  • models list:获取可用于测试的 Android 设备的最新列表。

    gcloud firebase test android models list

    在命令输出中:

    • MODEL_ID 列包含稍后针对设备机型运行测试时可以使用的标识符。
    • OS_VERSION_ID 列包含设备支持的操作系统版本。

    输出示例

    gcloud firebase test android models list 输出

  • models describe:获取特定 Android MODEL_ID 的详细信息。

    gcloud firebase test android models describe MODEL_ID

    输出中包含设备机型的品牌、制造商、操作系统版本、支持的 API 级别、支持的应用二进制接口 (ABI)、发布日期,以及设备是实体设备还是虚拟设备。

  • versions list:获取当前可用于测试的操作系统版本的列表。

    gcloud firebase test android versions list

    您稍后可以使用命令输出前两列(OS_VERSION_IDVERSION)中任意一列的标识符针对某个 Android 操作系统版本运行测试。如果您没有指定要用于测试的 Android 操作系统版本,系统将使用 TAGS 列 default 行中的操作系统。

    输出示例

    gcloud android versions list

  • locales list:获取可用于测试的语言区域的最新列表:

    gcloud firebase test android versions list

    命令输出的第一列 LOCALE 中包含了稍后针对语言区域运行测试时可以使用的标识符。如果您没有指定要用于测试的语言区域,系统将使用英语作为默认语言区域。

第 3 步:运行测试

现在,您已经知道了在测试应用时可以使用的设备机型、语言区域和操作系统版本,接下来可以使用 gcloud firebase test android run 命令和 --device 标志来指定运行 Robo 或插桩测试的设备。

运行 Robo 测试

即使您没有任何插桩测试,仍然可以在应用中查找 bug。使用 Robo 测试可以对应用的界面进行自动审核。Robo 测试检查应用的方式是,对应用界面中的各种路径执行静态分析,然后在应用中抓取内容以查找崩溃和其他潜在问题。

如需运行 Robo 测试,请运行以下示例命令:

gcloud firebase test android run \
  --type robo \
  --app app-debug-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape \
  --timeout 90s \
  --client-details matrixLabel="Example matrix label"
  • 如果未指定任何 --type 值,则默认使用 --type robo 参数。
  • 为了帮助您在 Firebase 控制台中识别和定位测试矩阵,您可以使用可选的 --client-details matrixLabel="Example matrix label" 标志来为测试矩阵添加标签。
  • 您可以输入 gcloud help firebase test android run 命令来查看用于运行测试的完整命令行选项。

除了可以在命令行中指定这些参数外,您还可以选择在 YAML 格式的参数文件中指定您的参数。运行 gcloud topic arg-files,了解如何使用此功能。

如需了解如何研究 Robo 测试结果,请参阅分析测试结果

运行插桩测试

现在,使用 gcloud 命令行工具在您指定的 Android 设备配置上运行 Notepad 应用的 Espresso 测试。使用 instrumentation 测试类型运行 app-debug-test-unaligned.apk 中的各项测试,如下所示:

gcloud firebase test android run \
  --type instrumentation \
  --app app-debug-unaligned.apk \
  --test app-debug-test-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape
  --client-details matrixLabel="Example matrix label"
  • 如果使用 --test 指定了某个测试 APK 文件,系统会默认使用 --type 插桩参数。
  • 为了帮助您在 Firebase 控制台中识别和定位测试矩阵,您可以使用可选的 --client-details matrixLabel="Example matrix label" 标志来为测试矩阵添加标签。
  • 您可以输入 gcloud help firebase test android run 命令来查看用于运行测试的完整命令行选项。

除了可以在命令行中指定这些参数外,您还可以选择在 YAML 格式的参数文件中指定您的参数。运行 gcloud topic arg-files,了解如何使用此功能。

gcloud CLI 支持 Android Test Orchestrator。Orchestrator 要求搭载 AndroidJUnitRunner v1.1 或更高版本。如需启用该工具,请使用 gcloud firebase test android run 命令与
--use-orchestrator 标志。如需停用该工具,请使用 --no-use-orchestrator 标志。

您还可以使用上面未演示的其他标志来控制 Test Lab 如何运行插桩测试。例如,您可以使用 --test-targets 标志,来测试您的测试 APK 所使用的单个类或单个类方法。您还可以使用 --num-flaky-test-attempts 标志,指定在一个或多个测试用例失败后重新尝试执行测试作业的次数,从而确定失败的测试是否存在不稳定问题。如需了解详情,请参阅 gcloud firebase test android run

插桩测试的代码覆盖率报告

Test Lab 支持代码覆盖率报告工具 EMMAJaCoCo。如果您已将上述的工具集成到应用构建中,就可以通过运行带有额外参数的 gcloud firebase test android run 来获取 Test Lab 测试的代码覆盖率报告。如果未启用 Android Test Orchestrator,请使用以下命令:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables coverage=true,coverageFile="/sdcard/Download/coverage.ec" \
  --directories-to-pull /sdcard/Download

如果您在使用 Android Test Orchestrator 的同时生成代码覆盖率报告,请按以下方式修改环境变量:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \
  --directories-to-pull /sdcard/Download

Test Lab 测试运行完毕后,请在 Google Cloud Storage 中查找代码覆盖率报告:

  1. 打开 gcloud 工具在终端中的测试结果表上方输出的 Firebase 控制台链接。
  2. 打开该链接后,从显示的列表中点击一个测试作业,打开相应作业的详细信息页面。
  3. 点击测试结果,前往包含该作业的测试结果的 Cloud Storage 存储桶。
  4. 打开 artifacts/coverage.ec,查看代码覆盖率报告。

分析测试结果

几分钟后,gcloud 工具将输出您的测试结果的基本摘要:

命令测试结果

命令行测试运行的输出内容还包括一个用于查看测试结果的链接。如需详细了解如何解读这些结果,请参阅分析 Firebase Test Lab for Android 的结果

使用 Robo 测试实现自定义登录和文本输入

除非您使用 --no-auto-google-login 参数,否则 Robo 测试会自动在登录屏幕中填充信息,使用 Google 账号进行身份验证。它还可以使用您提供的测试账号凭据来填充自定义登录屏幕。您也可以使用此参数为您的应用使用的其他文本字段提供自定义输入文本。

如需填充应用中的文本字段,请使用 --robo-directives 参数,并提供以英文逗号分隔的 key-value 对列表,其中 key 是目标界面元素的 Android 资源名称,value 是文本字符串。您还可以使用此标志让 Robo 忽略特定的界面元素(例如,“退出”按钮)。 该功能支持 EditText 字段,但不支持 WebView 界面元素中的文本字段。

例如,您可以使用以下参数进行自定义登录:

--robo-directives username_resource=username,password_resource=password

可用命令和标志

Test Lab gcloud CLI 提供了多个命令和标志,支持您使用不同的规范运行测试:

  • Android Test Orchestrator 标志:用于启用 Orchestrator 的标志,利用 Orchestrator 这款工具,您可以让应用的各项测试在其自己的 Instrumentation 调用中运行。Test Lab 始终运行最新版本的 Orchestrator。

  • 游戏循环测试标志:利用这组配置标志,您可以启用和控制“演示模式”,以便在游戏应用中模拟玩家操作。详细了解如何使用 Test Lab 运行游戏循环测试

  • 统一分片标志(Beta 版):这种标志用于指定要将测试用例均匀分布到多少个分片上。这些分片在不同设备上并行运行。

  • 手动分片标志(Beta 版):这种标志用于指定要在一个分片(即一组测试用例)内运行的一组软件包、类和/或测试用例。这些分片在不同设备上并行运行。

  • 网络流量配置文件标志(Beta 版):这种标志用于指定您的测试在实体设备中使用的网络配置文件。网络配置文件可模拟各种网络状况,从而让您能够测试应用在不可靠或不可预测的网络中的性能。

编写 Test Lab gcloud 命令脚本

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

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

脚本退出代码

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

Test Lab 的脚本退出代码

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