本文档翻译自linux-test-project/ltp 的 README 文件,翻译时文件的最新提交是2a50d18cc README: Mention -f param for strace
,大部分借助于ChatGPT。仅作为我个人的参考,如果你想查阅,建议看英文文档,因为我不确定我记录的中文翻译是否完整和正确。
Linux测试项目(Linux Test Project,简称LTP)是由SGI、OSDL和Bull共同发起的联合项目,由IBM、思科、富士通、SUSE、红帽、Oracle等公司共同开发和维护。该项目旨在向开源社区提供测试套件,验证Linux系统的可靠性、健壮性和稳定性。
LTP测试套件包含一系列用于测试Linux内核和相关功能的工具集。我们的目标是通过引入测试自动化技术,改进Linux内核和系统库的质量测试工作。欢迎有兴趣的开源贡献者加入我们。
项目页面位于: http://linux-test-project.github.io/
最新的镜像始终可在以下位置获取: https://github.com/linux-test-project/ltp/releases
关于项目的讨论请访问LTP邮件列表: http://lists.linux.it/listinfo/ltp
LTP邮件列表的存档位于: https://lore.kernel.org/ltp/
IRC频道 #ltp: irc.libera.chat
Git仓库位于GitHub: https://github.com/linux-test-project/ltp
Patchwork实例位于: https://patchwork.ozlabs.org/project/ltp/list/
请谨慎使用这些测试!
不要在生产系统上运行它们。特别是Growfiles、doio和iogen这些测试会对系统的I/O能力造成压力,虽然它们不应该在正常运行的系统上造成问题,但它们旨在发现(或引起)问题。
如果你已经安装了git、autoconf、automake、m4、pkgconf/pkg-config、libc头文件、Linux内核头文件以及其他常见的开发包(请参阅INSTALL和ci/*.sh),那么以下步骤很可能会成功:
git clone https://github.com/linux-test-project/ltp.git
$ cd ltp
$ make autotools
$ ./configure $
现在,你可以选择继续编译和运行单个测试,或者编译和安装整个测试套件。
对于可选的库依赖关系,请查看ci/目录中适用于主要发行版的脚本。你还可以使用./build.sh
脚本来构建整个LTP。
如果你只需要执行单个测试,实际上无需编译整个LTP。如果你想运行一个系统调用的测试用例,以下步骤应该可以正常工作:
cd testcases/kernel/syscalls/foo
$ make
$ PATH=$PATH:$PWD ./foo01 $
Shell测试用例稍微复杂一些,因为它们需要一个shell库的路径以及已编译的二进制助手的路径,但一般来说以下步骤应该可以正常工作:
cd testcases/lib
$ make
$ cd ../commands/foo
$ PATH=$PATH:$PWD:$PWD/../../lib/ ./foo01.sh $
Open Posix Testsuite有自己的构建系统,需要先生成Makefile,然后在子目录中进行编译也应该可以工作:
cd testcases/open_posix_testsuite/
$ make generate-makefiles
$ cd conformance/interfaces/foo
$ make
$ ./foo_1-1.run-test $
请注意,在运行测试之前,确保已经安装了所需的依赖项,并且环境变量已经设置正确以便找到所需的文件和库。
make
$ make install $
这将把LTP安装到/opt/ltp目录下。
INSTALL
文件和./configure --help
的帮助信息。如果configure脚本无法找到构建依赖项,则可能会禁用一些测试。
./configure
的输出。cd /opt/ltp
$ ./runltp $
请注意,许多测试用例需要以root用户身份执行。
要运行特定的测试套件:
./runltp -f syscalls $
要运行所有名称中带有madvise的测试:
./runltp -f syscalls -s madvise $
另请参阅:
./runltp --help $
测试套件(例如syscalls)在runtest目录中定义。每个文件包含一个简单格式的测试用例列表,详见doc/ltp-run-files.txt。
每个测试用例都有自己的可执行文件或脚本,可以直接执行:
testcases/bin/abort01 $
有些测试用例需要参数:
testcases/bin/mesgq_nstest -m none $
绝大多数测试用例都支持-h(帮助)选项:
testcases/bin/ioctl01 -h $
许多测试需要设置特定的环境变量:
LTPROOT=/opt/ltp PATH="$PATH:$LTPROOT/testcases/bin" testcases/bin/wc01.sh $
大多数情况下,需要设置路径变量(PATH)和LTPROOT变量,但还有一些其他变量,runltp通常会为您设置这些变量。
请注意,所有shell脚本都需要设置PATH变量。然而,并不限于shell脚本,许多基于C语言的测试也需要设置环境变量。
更多信息请参阅doc/User-Guidelines.asciidoc文件或在线查看 https://github.com/linux-test-project/ltp/wiki/User-Guidelines。
网络测试需要特定的设置,详见testcases/network/README.md(在线查看地址: https://github.com/linux-test-project/ltp/tree/master/testcases/network)。
当前在容器内运行LTP并不是一个捷径。这将使事情变得更加困难。
有一个可以与Docker或Podman一起使用的Containerfile。目前它可以构建Alpine和OpenSUSE镜像。
可以使用类似以下命令构建容器:
podman build -t tumbleweed/ltp \
$ --build-arg PREFIX=registry.opensuse.org/opensuse/ \
--build-arg DISTRO_NAME=tumbleweed \
--build-arg DISTRO_RELEASE=20230925 .
或者只需执行 podman build .
,它将创建一个Alpine容器。
容器中包含了Kirk在 /opt/kirk
中。因此,以下命令将运行一些测试:
podman run -it --rm tumbleweed/ltp:latest
$ cd /opt/kirk && ./kirk -f ltp -r syscalls $
SUSE还发布了一个较小的LTP容器,不基于Containerfile。
新的测试库在一个分支进程中运行实际的测试,即test()函数。要在gdb中获取崩溃测试的堆栈跟踪,需要设置 follow-fork-mode child。要使用strace跟踪测试,使用带有 -f 选项的strace来启用对分叉进程的跟踪。
在开始之前,你应该阅读以下文档:
还有一个逐步教程:
如果有任何未涵盖的内容,请不要犹豫在LTP邮件列表上提问。还请注意这些文档可以在线访问:
虽然我们接受GitHub的拉取请求,但首选方式是将补丁发送到我们的邮件列表。
在发布到邮件列表之前,在GitHub Actions上测试补丁是个好主意。我们的GitHub Actions设置涵盖了各种架构和发行版,以确保LTP在大多数常见配置上能够编译成功。为了测试,你只需将更改推送到你在GitHub上的LTP分支。