从 gcloud 命令行开始使用 Firebase 测试实验室

Firebase 测试实验室提供了用于测试 Android 应用的云基础架构,包括与 gcloud 命令行界面 (CLI) 的完全集成。本文档将介绍从 gcloud 命令行界面开始使用测试实验室时所需的安装和配置知识。

如需可与测试实验室配合使用的 gcloud firebase test android 命令的完整列表,请参阅 gcloud firebase test android

创建 Firebase 项目

如果您还没有为自己的应用准备 Firebase 项目,请立即转到 Firebase 控制台,然后点击新建项目创建一个。您需要拥有项目的所有权或修改权限。

在 Spark 和 Flame 方案中,您每天可使用测试实验室执行的测试有次数限制。要想在使用测试实验室时不受每日配额限制,您必须升级为 Firebase Blaze 方案。

配置您的本地 Google Cloud SDK 环境

  1. 如果您还没有 gcloud 命令行工具,请先下载:Google Cloud SDK
  2. 确保您安装的 Cloud SDK 是最新版本,并且包含 gcloud firebase 命令:
    gcloud components update
  3. 确保您的身份验证凭据是最新的:
    gcloud auth login
  4. 在 gcloud 中设置您当前的项目:
    gcloud config set project PROJECT_ID

选择测试配置

在此示例中,您将针对一个名为“Notepad”的简单 Android 笔记应用运行一些测试。

  1. 下载 Notepad 应用的二进制 APK 文件 (app-debug-unaligned.apk) 及其对应的 Instrumentation 测试 (app-debug-test-unaligned.apk)(均在 notepad.zipNotePad/app/build/outputs/apk/ 目录中)。

  2. 获取可用于测试的 Android 设备的最新列表,如下所示:

    
    $ gcloud firebase test android models list
    
    gcloud firebase test android models list 输出 命令输出的第一列 MODEL_ID 中包含您后续在特定机型上运行测试时可以使用的标识符。OS_VERSION_ID 列中列有该设备支持的操作系统版本。如果您没有指定要测试的 MODEL_ID,则系统将使用 TAGS 列注明的默认值。

  3. 使用 firebase test android models describe 命令详细了解某个特定的 Android MODEL_ID,如下所示:

    
    $ gcloud firebase test android models describe Nexus5
    
    上面的示例命令可获取有关 Nexus5 机型的详细信息,包括品牌、制造商、支持的 API 级别,以及该机型是真机还是虚拟设备。

  4. 获取可用于测试的 Android 操作系统版本的最新列表:

    
    $ gcloud firebase test android versions list
    
    gcloud android versions list 稍后,您可以使用命令输出的前两列(OS_VERSION_IDVERSION)中任意一列的标识符针对某个 Android 操作系统版本运行测试。如果您没有指定要用于测试的 Android 操作系统版本,则系统将使用 TAGS 列注明的默认值。

  5. 获取可用于测试的语言区域的最新列表:

    
    $ gcloud firebase test android locales list
    
    命令输出的第一列 LOCALE 中包含了后续针对语言区域运行测试时可以使用的标识符。如果您没有指定要用于测试的语言区域,则系统将使用英语作为默认语言区域。由于有数百种语言区域可供使用,因此我们就不在此展示相关的命令输出了。

运行测试

现在,您已经知道了在测试应用时可以使用的设备型号、操作系统版本和语言区域的范围,您可以使用这些信息通过 gcloud firebase test android run 命令和 --device 标志来指定测试设备。无论您是使用 Robo 测试来自动测试您的应用,还是要运行专为测试您的应用而编写的 Instrumentation 测试,都需要使用此命令和标志。

运行 Robo 测试

即使您没有编写任何 Instrumentation 测试,您仍然可以查找自己的应用中的错误。使用 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 robo 参数。您可以通过输入以下命令来查看用于运行测试的一组完整的命令行选项:gcloud help firebase test android run。除了可以在命令行中指定所有这些参数外,您还可以选择在一个 YAML 格式的参数文件中指定您的参数。运行 gcloud topic arg-files 以了解如何使用这项功能。

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

运行 Instrumentation 测试

现在,使用 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

如果您已使用 --test 指定了某个测试 APK,则系统将默认采用 --type instrumentation 参数。除了可以在命令行中指定所有这些参数外,您还可以选择在一个 YAML 格式的参数文件中指定您的参数。运行 gcloud topic arg-files 以了解如何使用这项功能。

gcloud CLI 的 alpha 和 beta 发布渠道支持 Android Test Orchestrator。 Orchestrator 要求搭载 AndroidJUnitRunner v1.0 或更高版本。要启用 Orchestrator,请使用 gcloud beta firebase test android run
--use-orchestrator 标志。要将其停用,请使用 --no-use-orchestrator 标志。

注意:您还可以使用上面未演示的其他标志来控制测试实验室如何运行 Instrumentation 测试。例如,您可以使用 --test-targets 标志只测试您的测试 APK 所使用的一个类,或者只测试您的测试 APK 所使用的某个类中的一个方法。如需了解详情,请参阅 gcloud firebase test android run

分析测试结果

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

命令测试结果

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

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

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

要填充应用中的文本字段,可使用 --robo-directives 参数,并提供以英文逗号分隔的 key-value 对列表,其中 key 是目标界面元素的 Android 资源名称,value 是文本字符串。 系统支持 EditText 字段,但不支持 WebView 界面元素中的文本字段。

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

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

测试版命令和标志

测试实验室 gcloud CLI 在公开测试版中提供了若干命令和标志:

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

  • 游戏循环测试标志:一种测试类型及其随附的配置标志,可在游戏应用中启用和控制“演示模式”来模拟玩家操作。详细了解游戏循环测试

  • Android Test Orchestrator 标志:一个用于启用 Orchestrator 的标志;利用 Orchestrator 这一工具,您可以在应用自己的 Instrumentation 调用中运行应用的各项测试。测试实验室始终运行最新版本的 Orchestrator。详细了解 Android Test Orchestrator

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

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

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 发生了测试基础架构错误。

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面