运行 Fuchsia 测试

本指南介绍了如何使用 fx test 命令运行 Fuchsia 测试。

在 Fuchsia 中,测试可以是在 Fuchsia 设备上运行的组件(请参阅作为组件的测试),也可以是在主机上运行的独立可执行文件。

如需运行 Fuchsia 测试,请使用 fx test 命令并附上测试名称:

fx test <TEST_NAME>

如果 TEST_NAME 是一个测试组件,fx test 会连接到 Fuchsia 设备以加载并运行测试组件。也就是说,该命令会查找组件的相应组件 URI,并调用 ffx test run。但是,如果 TEST_NAME 是主机测试,则 fx test 会直接调用该测试二进制文件以在宿主机上运行。

与主机测试类似,端到端测试也在主机上运行。然后,测试可能会与 Fuchsia 设备上的各种服务交互以进行测试(请参阅 Fuchsia 的脚本层)。如需运行端到端测试,请向 fx test 提供一个额外的标志 (--e2e):

fx test --e2e <END_TO_END_TEST_NAME>

自定义调用

fx test 可以同时运行多个测试或测试套件。该命令还可以对这些测试进行过滤,使其仅显示设备测试、主机测试或端到端测试。

如需自定义 fx test,您可以添加标志并提供多项测试:

fx test <FLAGS> <TEST_NAME_01> <TEST_NAME_02> ...

以下各部分列出了自定义 fx test 的常见方法。

运行多个测试

如果要运行多组 Fuchsia 测试,请配置 Fuchsia build 以包含多个主要测试软件包,构建 Fuchsia,然后运行该 build 中的所有测试。例如:

fx set core.x64 --with //bundles/tools,//bundles/tests
fx build
fx test

您还可以在单次调用中提供多个目标:

fx test <PACKAGE_01> <PACKAGE_02> <COMPONENT_01> <COMPONENT_02>

如需了解指定测试的各种方式,请参阅以多种方式指定测试

将参数传递给测试

使用 -- 标志可向测试组件传递其他参数。

以下示例将 arg 标志传递给测试:

$ fx test <TEST_NAME> -- --arg=5

例如,上面的命令会在内部调用以下命令:

$ fx ffx test run <TEST_COMPONENT_URI> -- --arg=5

以多种方式指定测试

fx test 支持以多种方式引用特定测试:

主机测试路径

对于主机测试,请从 Fuchsia build 输出目录的根目录提供测试二进制文件的相对路径。如果路径指向子目录(而非文件),fx test 会运行该目录中所有匹配的测试二进制文件。

例如,您可以提供相对路径来指定测试二进制文件:

fx test host_x64/pm_cmd_pm_genkey_test

或者,您也可以提供测试目录的相对路径:

fx test host_x64/gen/sdk

文件包网址

提供完整的 Fuchsia 组件网址,以指定测试组件。例如:

fx test fuchsia-pkg://fuchsia.com/my_example_test_pkg#meta/my_example_test.cm

请提供部分软件包网址,以使用所提供的 Fuchsia 软件包网址匹配并运行软件包中的所有测试组件。例如:

fx test fuchsia-pkg://fuchsia.com/my_example_test_pkg

软件包名称

提供“软件包名称”以运行该软件包中的所有测试组件。例如:

fx test my_example_test_pkg

如需将输入明确指定为软件包名称,请使用 -p 标志。例如:

fx test -p my_example_test_pkg

组件名称

提供组件名称(或资源路径)以测试软件包中的单个组件。例如:

fx test my_example_test

如需将输入明确指定为组件名称,请使用 -c 标志。例如:

fx test -c my_example_test

如需在特定软件包上运行组件,请同时使用 -p <PACKAGE_NAME>-c <COMPONENT_NAME>。例如:

fx test -p my_example_test_pkg -c my_example_test

设置最低日志严重性

fx test(以及底层 ffx test)接受 --min-severity-logs 标志,您可以设置由测试和被测组件发出的日志的最低严重级别。

如果测试或其下的组件使用的日志记录库支持设置动态日志严重性(Fuchsia Rust 和 C++ 日志库支持此设置)。对于不支持此功能的测试组件,如果测试发出的日志严重级别低于您设置的下限,则 test_manager 会手动过滤其日志。

此标志接受通过两种方式来定义最低严重级别:

  • <severity>FATALERRORWARNINFODEBUGTRACE 中的一个。这适用于测试本身以及被测所有组件发出的日志。

  • <component selector>#<severity>,其中 <component selector> 指定了一组被测组件(例如 foo/bar),并且严重级别为前面提到的可接受的严重级别之一。

下面是一些示例:

  • --min-severity-logs DEBUG:测试和测试下的所有组件都指示发出严重级别为 DEBUG 或更高的日志。这相当于使用组件选择器:--min-severity-logs **#DEBUG

  • --min-severity-logs a#DEBUG --min-severity-logs b/c#ERROR:被测试的组件 a 会发出严重级别为 DEBUG 或更高的日志,被测试的组件 b/c 会发出严重级别为 ERROR 或更高的日志。测试本身发出的日志会使用其默认的最低严重级别。

  • --min-severity-logs '<root>#DEBUG':指示测试发出严重级别为 DEBUG 或更高的日志,但其下的组件使用默认最低严重级别发出日志。

  • --min-severity-logs foo/*/bar#ERRORfoo 的子级下名为 bar 且名称不限的组件都会发出严重级别为 ERROR 或更高的日志。例如,foo/a/barfoo/baz/bar 会受到影响,但测试组件 foo/bara/b 不受影响。

从 run-host-tests 转换

fx run-host-testsfx run-e2e-tests 命令将被废弃,取而代之的是 fx test。请参阅以下说明,了解如何使用 fx test 代替这些命令:

FX 测试


### run-host-tests {:#run-host-tests transformation="converted"}

Substitute `fx run-host-tests` with `fx test`.

From:

```posix-terminal
fx run-host-tests <PATH_TO_HOST_TEST>

改后:

fx test <PATH_TO_HOST_TEST>

运行-e2e-测试

fx run-e2e-tests 替换为 fx test 和一个额外的 --e2e 标志。

From:

fx run-e2e-tests <END_TO_END_TEST>

改后:

fx test --e2e <END_TO_END_TEST>

测试驱动型开发

fx smoke-test 命令会自动检测构建系统已知受检出更改影响的所有测试。请尝试以下操作:

fx -i smoke-test --verbose

在上面的命令中,--verbose 还会输出 fx smoke-test 认为哪些测试受您的更改影响。每次您保存更改时,-i 都会自动重复此命令。对于由测试驱动的开发,请尝试在单独的 shell 中启动此命令,并在处理代码时观察代码的重新构建和重新测试。

fx smoke-test 与封闭测试软件包搭配使用时效果最佳。如果测试软件包包含其中任何测试的所有依赖项,则该测试软件包是封闭的。也就是说,影响此测试结果的任何代码更改也需要重新构建该测试的软件包。

检查测试组件中的工件

组件测试可能会生成无法向 stdout 显示的其他工件,例如自定义工件和覆盖率配置文件。默认情况下,fx test 会以静默方式舍弃这些工件。如需查看这些工件,请使用 --ffx-output-directory 指定 fx test 的输出目录。系统会将工件从测试中提取出来并保存到指定目录中。