本指南介绍了如何使用 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>
:FATAL
、ERROR
、WARN
、INFO
、DEBUG
、TRACE
中的一个。这适用于测试本身以及被测所有组件发出的日志。<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#ERROR
:foo
的子级下名为bar
且名称不限的组件都会发出严重级别为ERROR
或更高的日志。例如,foo/a/bar
和foo/baz/bar
会受到影响,但测试组件foo/bar
和a/b
不受影响。
从 run-host-tests 转换
fx run-host-tests
和 fx 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
的输出目录。系统会将工件从测试中提取出来并保存到指定目录中。