不使用 kunit_tool 运行测试¶
如果我们不想使用 kunit_tool(例如:我们想与其他系统集成,或在真实硬件上运行测试),我们可以将 KUnit 包含在任何内核中,读取结果,并手动解析。
注意
KUnit 不适合在生产系统中使用。 测试可能会降低系统的稳定性或安全性。
配置内核¶
KUnit 测试可以在不使用 kunit_tool 的情况下运行。 如果出现以下情况,这会很有用:
我们有现有的内核配置需要测试。
需要在真实硬件上运行(或使用 kunit_tool 不支持的模拟器/VM)。
希望与某些现有测试系统集成。
KUnit 使用 CONFIG_KUNIT
选项进行配置,并且还可以通过在我们的 .config
中启用其配置选项来构建单个测试。 KUnit 测试通常(但并非总是)具有以 _KUNIT_TEST
结尾的配置选项。 大多数测试可以构建为模块,也可以构建到内核中。
注意
我们可以启用 KUNIT_ALL_TESTS
配置选项,以自动启用所有满足依赖项的测试。 这是快速测试适用于当前配置的所有内容的好方法。
一旦我们构建了我们的内核(和/或模块),运行测试就很简单了。 如果测试是内置的,它们将在内核启动时自动运行。 结果将以 TAP 格式写入内核日志(dmesg
)。
如果测试构建为模块,它们将在加载模块时运行。
# modprobe example-test
结果将以 TAP 格式出现在 dmesg
中。
debugfs¶
可以从用户空间通过 debugfs 文件系统访问 KUnit(有关 debugfs 的更多信息,请参见 DebugFS)。
如果启用了 CONFIG_KUNIT_DEBUGFS
,则 KUnit debugfs 文件系统将挂载在 /sys/kernel/debug/kunit。 您可以使用此文件系统执行以下操作。
检索测试结果¶
您可以使用 debugfs 检索 KUnit 测试结果。 可以从 debugfs 文件系统中访问测试结果,位于以下只读文件中
/sys/kernel/debug/kunit/<test_suite>/results
测试结果以 KTAP 文档的形式打印。 请注意,此文档与内核日志是分开的,因此可能具有不同的测试套件编号。
在内核启动后运行测试¶
您可以使用 debugfs 文件系统来触发内置测试在启动后运行。 要运行测试套件,您可以使用以下命令写入 /sys/kernel/debug/kunit/<test_suite>/run
文件
echo "any string" > /sys/kernel/debugfs/kunit/<test_suite>/run
因此,测试套件运行,结果将打印到内核日志中。
但是,此功能不适用于使用 init 数据的 KUnit 套件,因为 init 数据可能在内核启动后被丢弃。 使用 init 数据的 KUnit 套件应使用 kunit_test_init_section_suites()
宏定义。
此外,您不能使用此功能同时运行测试。 相反,测试将等待运行,直到其他测试完成或失败。
注意
对于测试作者,要使用此功能,测试需要正确初始化和/或清理任何数据,以便测试第二次正确运行。