获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

使用 gcloud CLI 开始测试

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

有关可在测试实验室中与 Android 应用程序一起使用的gcloud命令的完整列表,请访问gcloud firebase test android的参考文档

在你开始之前

如果您还没有,请将 Firebase 添加到您的 Android 项目中。

第 1 步:设置 gcloud CLI

  1. 下载谷歌云 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/build/outputs/apk/中的二进制文件app-debug-unaligned.apk和仪器测试文件app-debug-test-unaligned.apk

  • models list :获取可供您测试的 Android 设备的当前列表。

    gcloud firebase test android models list
    

    在命令输出中:

    • MODEL_ID包含稍后可用于在设备模型上运行测试的标识符。
    • OS_VERSION_ID列包含设备支持的操作系统版本。

    示例输出

    gcloud firebase test android models list output

  • 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列下注明的默认值。

    示例输出

    gcloud android versions list

  • locales list :获取可用于测试的当前语言环境列表。

    gcloud firebase test android versions list
    

    命令输出的第一列LOCALE包含稍后可用于针对语言环境运行测试的标识符。如果您未指定要测试的区域设置,则英语将用作默认区域设置。

运行测试

现在您知道了可用于测试您的应用程序的设备型号、区域设置和操作系统版本的范围,您可以使用gcloud firebase test android run命令和--device标志指定设备以运行 Robo 或仪器测试。

运行 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

如果未指定--type值,则 --type --type robo参数是隐式的。您可以通过键入以下命令查看用于运行测试的完整命令行选项集: gcloud help firebase test android run 。作为在命令行上指定所有这些参数的替代方法,您可以选择在 YAML 格式的参数文件中指定您的参数。运行gcloud topic arg-files以了解如何使用此功能。

请参阅分析测试结果部分以了解如何调查 Robo 测试的测试结果。

运行仪器测试

现在使用gcloud命令行工具在指定的 Android 设备配置上运行记事本应用的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

如果已使用--test指定了测试 APK,则--type instrumentation参数是隐式的。作为在命令行上指定所有这些参数的替代方法,您可以选择在 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-targets标志来测试测试 APK 使用的单个类或类方法。您还可以通过使用--num-flaky-test-attempts标志来确定失败的测试是否真的不稳定,该标志指定如果一个或多个测试用例应重新尝试测试执行的次数因任何原因失败。要了解更多信息,请参阅gcloud firebase test android run

仪器测试的代码覆盖率报告

测试实验室支持代码覆盖报告工具EMMAJaCoCo 。如果您已将任一工具集成到应用程序的构建中,则可以通过运行带有一些附加参数的gcloud firebase test android run来获取测试实验室测试的代码覆盖率报告。如果未启用 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

当测试实验室完成运行测试后,在 Google Cloud Storage 中找到您的代码覆盖率报告:

  1. 打开gcloud工具在终端中测试结果表上方打印的 Firebase 控制台链接。
  2. 单击该链接列表中的测试执行以打开该执行的详细信息页面。
  3. 点击测试结果以转到包含该执行测试结果的 Cloud Storage 存储桶。
  4. 打开artifacts/coverage.ec查看您的代码覆盖率报告。

分析你的测试结果

几分钟后,gcloud 工具会打印出测试结果的基本摘要:

Command test results

命令行测试运行的输出还包括一个用于查看测试结果的链接。要了解有关如何解释这些结果的更多信息,请参阅分析 Android 结果的 Firebase 测试实验室

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

Robo 测试会自动完成使用 Google 帐户进行身份验证的登录屏幕,除非您使用--no-auto-google-login参数。它还可以使用您提供的测试帐户凭据完成自定义登录屏幕。您还可以使用此参数为您的应用程序使用的其他文本字段提供自定义输入文本。

要在您的应用程序中完成文本字段,请使用--robo-directives参数并提供以逗号分隔的key-value对列表,其中key是目标 UI 元素的 Android 资源名称, value是文本字符串.您还可以使用此标志告诉 Robo 忽略特定的 UI 元素(例如,“注销”按钮)。支持EditText字段,但不支持WebView UI 元素中的文本字段。

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

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

可用的命令和标志

测试实验室 gcloud CLI 有几个可用的命令和标志,可让您运行具有不同规范的测试:

  • Android Test Orchestrator 标志:启用Orchestrator的标志,Orchestrator 是一种工具,允许您在自己的Instrumentation调用中运行应用程序的每个测试。测试实验室始终运行最新版本的 Orchestrator。

  • 游戏循环测试标志:一组配置标志,用于启用和控制“演示模式”以模拟玩家在游戏应用程序中的操作。了解有关使用测试实验室运行游戏循环测试的更多信息。

  • Uniform Sharding flag (in beta) :指定要将测试用例均匀分布到的分片数量的标志。分片在不同的设备上并行运行。

  • 手动分片标志(测试版) :指定一组包、类和/或测试用例以在分片(一组测试用例)中运行的标志。分片在不同的设备上并行运行。

  • Network traffic profiles flag (in beta) :一个标志,指定您的测试使用物理设备的网络配置文件。网络配置文件模拟各种网络条件,使您可以在不可靠或不可预测的网络上测试您的应用程序的性能。

使用测试实验室编写 gcloud 命令脚本

您可以使用 shell 脚本或批处理文件来自动执行移动应用程序测试命令,否则您将使用 gcloud 命令行运行这些命令。以下示例 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

脚本退出代码

测试实验室提供了多个退出代码,您可以使用它们更好地了解使用脚本或批处理文件运行的测试的结果。

为测试实验室编写脚本退出代码

退出代码笔记
0所有测试执行都通过了。
1个发生一般故障。可能的原因包括:文件名不存在或 HTTP/网络错误。
2个由于提供了未知的命令或参数,测试已退出。
10测试执行中的一个或多个测试用例(测试的类或类方法)未通过。
15由于意外错误,Firebase 测试实验室无法确定测试矩阵是通过还是失败。
18由于不兼容的测试维度,不支持此测试执行的测试环境。如果所选设备类型不支持所选 Android API 级别,则可能会发生此错误。
19用户取消了测试矩阵。
20发生测试基础结构错误。
,

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

有关可在测试实验室中与 Android 应用程序一起使用的gcloud命令的完整列表,请访问gcloud firebase test android的参考文档

在你开始之前

如果您还没有,请将 Firebase 添加到您的 Android 项目中。

第 1 步:设置 gcloud CLI

  1. 下载谷歌云 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/build/outputs/apk/中的二进制文件app-debug-unaligned.apk和仪器测试文件app-debug-test-unaligned.apk

  • models list :获取可供您测试的 Android 设备的当前列表。

    gcloud firebase test android models list
    

    在命令输出中:

    • MODEL_ID包含稍后可用于在设备模型上运行测试的标识符。
    • OS_VERSION_ID列包含设备支持的操作系统版本。

    示例输出

    gcloud firebase test android models list output

  • 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列下注明的默认值。

    示例输出

    gcloud android versions list

  • locales list :获取可用于测试的当前语言环境列表。

    gcloud firebase test android versions list
    

    命令输出的第一列LOCALE包含稍后可用于针对语言环境运行测试的标识符。如果您未指定要测试的区域设置,则英语将用作默认区域设置。

运行测试

现在您知道了可用于测试您的应用程序的设备型号、区域设置和操作系统版本的范围,您可以使用gcloud firebase test android run命令和--device标志指定设备以运行 Robo 或仪器测试。

运行 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

如果未指定--type值,则 --type --type robo参数是隐式的。您可以通过键入以下命令查看用于运行测试的完整命令行选项集: gcloud help firebase test android run 。作为在命令行上指定所有这些参数的替代方法,您可以选择在 YAML 格式的参数文件中指定您的参数。运行gcloud topic arg-files以了解如何使用此功能。

请参阅分析测试结果部分以了解如何调查 Robo 测试的测试结果。

运行仪器测试

现在使用gcloud命令行工具在指定的 Android 设备配置上运行记事本应用的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

如果已使用--test指定了测试 APK,则--type instrumentation参数是隐式的。作为在命令行上指定所有这些参数的替代方法,您可以选择在 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-targets标志来测试测试 APK 使用的单个类或类方法。您还可以通过使用--num-flaky-test-attempts标志来确定失败的测试是否真的不稳定,该标志指定如果一个或多个测试用例应重新尝试测试执行的次数因任何原因失败。要了解更多信息,请参阅gcloud firebase test android run

仪器测试的代码覆盖率报告

测试实验室支持代码覆盖报告工具EMMAJaCoCo 。如果您已将任一工具集成到应用程序的构建中,则可以通过运行带有一些附加参数的gcloud firebase test android run来获取测试实验室测试的代码覆盖率报告。如果未启用 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

当测试实验室完成运行测试后,在 Google Cloud Storage 中找到您的代码覆盖率报告:

  1. 打开gcloud工具在终端中测试结果表上方打印的 Firebase 控制台链接。
  2. 单击该链接列表中的测试执行以打开该执行的详细信息页面。
  3. 点击测试结果以转到包含该执行测试结果的 Cloud Storage 存储桶。
  4. 打开artifacts/coverage.ec查看您的代码覆盖率报告。

分析你的测试结果

几分钟后,gcloud 工具会打印出测试结果的基本摘要:

Command test results

命令行测试运行的输出还包括一个用于查看测试结果的链接。要了解有关如何解释这些结果的更多信息,请参阅分析 Android 结果的 Firebase 测试实验室

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

Robo 测试会自动完成使用 Google 帐户进行身份验证的登录屏幕,除非您使用--no-auto-google-login参数。它还可以使用您提供的测试帐户凭据完成自定义登录屏幕。您还可以使用此参数为您的应用程序使用的其他文本字段提供自定义输入文本。

要在您的应用程序中完成文本字段,请使用--robo-directives参数并提供以逗号分隔的key-value对列表,其中key是目标 UI 元素的 Android 资源名称, value是文本字符串.您还可以使用此标志告诉 Robo 忽略特定的 UI 元素(例如,“注销”按钮)。支持EditText字段,但不支持WebView UI 元素中的文本字段。

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

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

可用的命令和标志

测试实验室 gcloud CLI 有几个可用的命令和标志,可让您运行具有不同规范的测试:

  • Android Test Orchestrator 标志:启用Orchestrator的标志,Orchestrator 是一种工具,允许您在自己的Instrumentation调用中运行应用程序的每个测试。测试实验室始终运行最新版本的 Orchestrator。

  • 游戏循环测试标志:一组配置标志,用于启用和控制“演示模式”以模拟玩家在游戏应用程序中的操作。了解有关使用测试实验室运行游戏循环测试的更多信息。

  • Uniform Sharding flag (in beta) :指定要将测试用例均匀分布到的分片数量的标志。分片在不同的设备上并行运行。

  • 手动分片标志(测试版) :指定一组包、类和/或测试用例以在分片(一组测试用例)中运行的标志。分片在不同的设备上并行运行。

  • Network traffic profiles flag (in beta) :一个标志,指定您的测试使用物理设备的网络配置文件。网络配置文件模拟各种网络条件,使您可以在不可靠或不可预测的网络上测试您的应用程序的性能。

使用测试实验室编写 gcloud 命令脚本

您可以使用 shell 脚本或批处理文件来自动执行移动应用程序测试命令,否则您将使用 gcloud 命令行运行这些命令。以下示例 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

脚本退出代码

测试实验室提供了多个退出代码,您可以使用它们更好地了解使用脚本或批处理文件运行的测试的结果。

为测试实验室编写脚本退出代码

退出代码笔记
0所有测试执行都通过了。
1个发生一般故障。可能的原因包括:文件名不存在或 HTTP/网络错误。
2个由于提供了未知的命令或参数,测试已退出。
10测试执行中的一个或多个测试用例(测试的类或类方法)未通过。
15由于意外错误,Firebase 测试实验室无法确定测试矩阵是通过还是失败。
18由于不兼容的测试维度,不支持此测试执行的测试环境。如果所选设备类型不支持所选 Android API 级别,则可能会发生此错误。
19用户取消了测试矩阵。
20发生测试基础结构错误。