Linux内核之Kselftests

简介

Linux内核包含了一套开发者可用的单元测试和回归测试(Kselftests),这些测试位于内核源代码的tools/testing/selftest目录下。这些测试旨在针对内核中的各个代码路径进行小规模的测试。测试应该在构建、安装和启动内核之后运行。

它每天都会在不同的Linux内核树(即代码库)的内核集成测试环境上运行,主要是为了确保内核代码在合并到主干之前,在各种场景和配置下都能正常工作,从而提高内核的整体稳定性和可靠性。

kselftest的一些特性:

  • 快速执行测试的能力(目前的目标是不到20分钟)
    • 一些开发人员希望在几秒钟内运行测试
  • 运行不同测试组的能力
  • 测试源代码保存在内核源代码树中,任何使用内核源代码的人都可以很容易地访问它

可以在 Kselftest-wiki 上找到关于Kselftest框架的其他信息,以及如何使用该框架编写新的测试。

编译运行及安装

相关的命令如下:

#编译
$ make headers
$ make -C tools/testing/selftests
#运行tests
$ make -C tools/testing/selftests run_tests

#用简化命令编译并运行
$ make kselftest

#编译并运行其中的 size timers
$  make TARGETS="size timers" kselftest

#编译并运行除开size timers的其他测试
$  make SKIP_TARGETS="size timers" kselftest

#安装到某个目录,不指定默认为kselftest_install
$ make -C tools/testing/selftests install INSTALL_PATH=/some/other/path

#运行已安装的kselftest
$ cd kselftest_install
$ ./run_kselftest.sh
#查看可测试的列表
$ ./run_kselftest.sh -l

#打包
$ make -C tools/testing/selftests gen_tar

注:某些测试需要root权限

Selftests的超时

Selftests设计得很快,因此每次测试的默认超时时间为45秒。测试可以通过在其目录中添加一个设置文件来覆盖默认超时,并在那里将超时变量设置为配置的测试所需的上限超时。只有少数测试会以高于45秒的值覆盖超时,Selftests会努力保持这种状态。Selftests中的超时不被认为是致命的,因为运行测试的系统可能会发生变化,这也会修改运行测试所需的预期时间。如果您可以控制将运行测试的系统,则可以在这些系统上配置测试运行程序,使其在命令行上使用更大或更低的超时值,就像使用-o--override timeout参数一样。例如,要使用165秒,可以使用:

$ ./run_kselftest.sh --override-timeout 165

您可以查看TAP输出,看看是否已超时。

其他

怎么新增一个自定义的测试,
怎么创造一个内核测试模块(Test Module)来进行内核空间的测试,
怎么进行用户空间的测试(Test Harness)
怎么进行热插拔测试等等。
更多的高阶用法可参看官方文档,这里只记录一些简单的概念和简单使用。

参考