在设备上运行测试

ffx test run 命令可以在 Fuchsia 设备上运行测试,并收集测试结果和诊断信息。

概念

ffx test run 命令用于执行与 Fuchsia 测试运行程序框架集成的测试,该框架允许在 Fuchsia 组件中定义和实现测试用例。

在 Fuchsia 设备上运行测试组件需要执行以下步骤:

  1. 将代码、组件和软件包定义编译到 Fuchsia 软件包中。
  2. 使软件包可供目标设备使用。
  3. 在目标设备上运行测试组件。

ffx test 命令仅处理第 3 步。第 1 步和第 2 步本身需要了解构建系统,而 ffx test 明确设计为与构建系统无关。

测试流程

图 1. 一张流程图,展示了 ffx test 如何融入编译和运行测试时使用的其他工具。

ffx test 命令旨在用作其他工具调用的较低级别的工具,这些工具通常运行特定于构建系统或开发环境的测试。本页介绍的工作流主要面向开发此类高级工具的开发者。作为测试作者,如果您要查找有关如何在特定项目中运行测试的说明,请尝试查看项目代码库中的文档。如需了解如何在 Fuchsia 源代码检出 (fuchsia.git) 中运行测试,请参阅 fx test 文档

但在极少数情况下,您可能需要直接调用 ffx test 才能使用高级工具中所没有的精细选项。此外,项目可能需要支持 ffx test 不支持的其他类型的测试,例如主机测试。高级测试脚本可以直接处理这些问题,也可以将责任委托给其他工具。例如,fx test 用于在 fuchsia.gitFuchsia SDK 中的 bazel test 中进行开发。

运行测试组件

如需在目标设备上运行测试组件,请运行以下命令:

ffx test run TEST_COMPONENT_URL

TEST_COMPONENT_URL 替换为目标测试组件网址。

以下示例命令会在目标设备上运行 example.cm 组件中的测试:

$ ffx test run fuchsia-pkg://fuchsia.com/example#example.cm

使用过滤器运行特定测试用例

如需在测试组件中选择性地运行测试用例,请运行以下命令:

ffx test run TEST_COMPONENT_URL --test-filter FILTERS

替换以下内容:

  • TEST_COMPONENT_URL - 目标测试组件网址。
  • FILTERS - 用于匹配测试用例的模式。

--test-filter 选项中提供的过滤条件将根据 glob 模式进行匹配。系统仅会运行与至少一个模式匹配的测试用例。 例如,假设某个套件包含 Foo.Test1Foo.Test2Bar.Test1Bar.Test2 测试用例,那么下面的命令将仅执行 Foo.Test1Foo.Test2

$ ffx test run fuchsia-pkg://fuchsia.com/example#example.cm --test-filter Foo.*

可以通过在前面加上 - 来指定排除性过滤条件。如果指定了排除性过滤条件,系统会排除与排除性过滤条件匹配的测试用例。 例如,对于与上文相同的套件,以下命令仅执行 Bar.Test1Bar.Test2

$ ffx test run fuchsia-pkg://fuchsia.com/example#example.cm --test-filter -Foo.*

您可以多次指定 --test-filter 选项。多个过滤器的行为如下:

  • 如果未指定过滤器,系统会运行所有测试用例。
  • 如果仅指定了正例过滤器,则运行与至少一个过滤器匹配的测试用例。
  • 如果仅指定了否定过滤器,则运行与所有过滤器都不匹配的测试用例。
  • 如果同时指定了肯定过滤器和否定过滤器,系统会运行与至少一个肯定过滤器匹配但与任何否定过滤器都不匹配的测试用例。

在同一套件中,以下示例命令仅执行 Foo.Test2

$ ffx test run fuchsia-pkg://fuchsia.com/example#example.cm --test-filter Foo.* --test-filter -*.Test1

使用参数运行测试

如需将参数传递给测试组件中的测试,请运行以下命令:

ffx test run TEST_COMPONENT_URL -- ARGS

替换以下内容:

  • TEST_COMPONENT_URL - 目标测试组件网址。
  • ARGS - 要传递给测试的参数。

以下示例命令会将参数 hello1234 直接传递给测试:

$ ffx test run fuchsia-pkg://fuchsia.com/example#example.cm -- hello 1234

运行测试并存储结构化结果

ffx test run 支持以机器可读格式输出和存储测试结果,该格式适合其他工具使用(如需详细了解架构,请参阅测试输出格式)。

如需在运行测试后存储结构化测试结果,请运行以下命令:

ffx test run TEST_COMPONENT_URL --output-directory DIR

替换以下内容:

  • TEST_COMPONENT_URL - 目标测试组件网址。
  • DIR - 用于存储结构化测试结果的目录。

以下示例命令将输出存储在 /tmp/ffx-out 目录中:

$ ffx test run fuchsia-pkg://fuchsia.com/example#example.cm --output-directory /tmp/ffx-out

附录

返回代码

ffx test run 会在测试成功运行时返回零,如果测试失败,则返回非零。ffx test run 支持一些特殊的错误代码:

名称 退出代码 说明
设置失败 28 在目标设备上未能连接到所需的协议
已超时 21 测试作业因超时而失败

中断信号

传递 SIGINT(通常通过在终端中按 Ctrl+C 来完成)后,ffx test run 会尝试正常停止正在进行的测试并存储结果。

实验功能

ffx test run 支持多项实验性功能。这些功能可能会发生破坏性更改或移除。如需使用实验性功能,您需要通过将相应的 ffx config 字段设置为 true 来选择启用。如需了解可用的实验性功能以及如何选择启用,请参阅 ffx test run --help