LTP
LTP介绍
LTP的全称为:Linux Test Project,是一套Linux系统压力测试套件,是基于 GPL 协议的开源社区合作项目。2000 年由 SGI 发起,IBM、OSDL 和 Bull 等公司共同参与,2001年后由 SUSE、富士通、Red Hat、Oracle 共同开发和维护。通过功能测试、压力测试和回归测试来验证 Linux 系统的可靠性、稳定性和健壮性。整个项目约4000个测试用例,绝大部分用例采用 C 或 Shell。LTP 不仅测试内核,还测试整体系统环境,对功能执行失败时的返回和处理也进行测试。功能测试主要对 man pages中1、8命令和2系统调用所描述的功能进行验证。压力测试是一种破坏性的测试,即系统在非正常的、超负荷的条件下的运行情况 。用来评估在超越最大负载的情况下系统将如何运行,是系统在正常的情况下对某种负载强度的承受能力的考验 。回归测试修改了旧代码后,重新进行测试已确认修改没有引入新的错误或导致其他代码产生错误。
源码包目录结构
目录名称 说明
INSTALL 安装配置指导文档
README 介绍
CREDITS 记录对LTP有很大贡献的人
COPYING GNU公开许可证
ChangeLog 描述版本变化
ltpmenu 规划执行LTP的图形化界面接口
Makefile 顶层目录的Makefile,负责编译安装pan、testcases和tools
runalltests.sh 顺序运行全部测试用例并且报告结果的脚本
doc/* 工程文档包含工具和库函数使用手册,描述各种测试
include/* 通用的头文件目录
lib/* 通用的函数目录
testcases/* 包含在LTP下运行和bin目录下的所有测试用例和链接
testscripts/* 存放分组的测试脚本
runtest/* 为自动化测试提供命令列表
pan/* 测试的驱动装置,具备随机和并行测试的能力
scratch/* 存放零碎测试
tools/* 存放自动化测试脚本和辅助工具
测试套件目录结构
目录名称 说明
commands 常用命令测试
kernel 内核模块及其相关模块
kdump 内核现崩溃转储测试
Network 网络测试
realtime 系统实时性测试
open_posix_testsuite posix标准测试
misc 崩溃、核心转出、浮点运算等测试
安装包目录结构
目录名称 说明
bin 存放LTP测试的一些辅助脚本
results 测试结果默认存储目录
testcases 测试项集
output 测试日志默认存储目录
share 脚本使用说明目录
runtest 测试驱动(用于链接testscripts内的测试脚本和testcases测试项目)
lib 通用的库函数目录
整体测试流程
ltp 安装包根目录下的runltp脚本是 LTP 自动测试系统的入口,其提供了一系列参数选项,允许用户设定测试环境制定测试集、控制测试结果输出方式和路径等,运行 runltp 会生成指定的测试列表并调用测试驱动PAN来开始测试,待执行完毕后根据 PAN 返回的结果来生成报告。PAN 是 LTP 的一组测试驱动程序,负责实际测试的执行,根据 runltp 传递的参数和测试列表来依次执行测试,输出执行过程中的详细信息,对每个测试用例的执行结果进行统计,并将整体测试结果返回给 runltp。
可以测试所有的测试集,直接运行 runltp命令将测试 ltp/scenario_groups/default 中的所有测试集,一次测试约 2 ~ 3 小时。当然我们可以只测试某个测试集,测试集可以在 ltp/runtest/ 下查看。需要注意的是,如果我们测试某个测试集,runltp 需要指定 -f 参数。
参数与命令
1.../runltp –f commands(测试常规命令)
2../runltp –f admin_tools(测试常用管理工具是否正常稳定运行)
3../runltp –f dio(测试直接IO是否正常稳定)
4../runltp –f dma_thread_diotest(测试直接存储器访问线程直接IO是否正常稳定)
5../runltp –f fcntl-locktests(测试NFS网络文件系统锁是否正常稳定)
6../runltp –f filecaps(测试filecaps是否正常)
预制条件:在/etc/sysctl.conf文件中加一行:CONFIG_SECURITY_FILE_CAPABILITIES=y后重启电脑
7../runltp –f fs(测试文件系统是否正常)
8../runltp –f fs_bind(测试fs_bind是否正常)
09../runltp –f fs_ext4(测试fs_ext4是否正常)
10../runltp –f fs_perms_simple(简单测试文件系统权限)
11../runltp –f fs_readonly(测试文件系统只读)
12../runltp –f fsx(对文件系统进行压力测试)
13../runltp –f hyperthreading(CPU超线程技术测试)
14../runltp –f io(异步IO测试)
15../runltp –f io_cd(对CD光驱进行压力测试)
预制条件:将光盘放入光驱
-t:指定测试的持续时间
-t 60s = 60 seconds
-t 45m = 45 minutes
-t 24h = 24 hours
-t 2d = 2 days
16../runltp –f io_floppy(对软盘进行压力测试)
预制条件:将软盘放入软驱中
17../runltp –f lvm.part1(测试文件系统MSDOS、Reiserfs、EXT2、NFS、Ram Disk、MINIX)
18../runltp –f math(数学库测试)
19../runltp –f nfs(nfs网络文件系统测试)
预制条件:在本机配置nfs文件系统服务
20../runltp –f lvm.part2(测试EXT3、JFS文件系统是否正常使用)
预制条件:安装EXT3、JFS文件系统
21../runltp –f pipes(对管道进行压力测试)
22../runltp –f syscalls(测试内核系统调用)
23../runltp –f syscalls-ipc(进程间通信测试)
24../runltp –f can(测试控制器区域网络的稳定性)
25../runltp –f connectors(测试Netlink Connector的功能性及稳定性)
26../runltp –f ipv6(测试IPv6环境下的基本网络功能)
27../runltp –f ipv6_lib(IPv6环境网络开发共享库)
预制条件:内核支持IPv6
28../runltp –f multicast( 测试多播的稳定性)
预制条件:
(1)设置环境变量export RHOST=<多播目标地址>
(2)/root/.rhosts,/home/user/.rhosts 添加内容:多播目标主机地址,多播目标主机用户,有多少多播目标主机就写多少条。
29. ./runltp –f network_commands ( 测试ftp和ssh的稳定性)
预制条件:开启ftp和ssh
30. ./runltp –f network_stress.whole( 网络各个功能的压力性测试 )
预制条件:
(1)部署一台服务器
(2)服务器上运行的服务: ssh DNS http ftp
31. ./runltp –f nptl( 测试本地POSIX线程库的稳定性 )
预制条件:内核支持POSIX本地线程库
32../runltp –f nw_under_ns(测试网络命名空间的稳定性)
33../runltp –f power_management_tests(电源管理模块的稳定性)
预制条件:内核版本2.6.31以上
34../runltp –f pty(测试虚拟终端稳定性)
预制条件:内核支持VT console
35../runltp –f quickhit(测试系统调用的稳定性)
36../runltp –f rpc 和 ./runltp –f rpc_test(测试远程过程调用稳定性)
预制条件:内核支持远程过程调用
37../runltp –f scsi_debug.part1(测试SCSI的稳定性)
38../runltp –f sctp(测试SCTP协议的稳定性)
预制条件:内核支持SCTP协议
39../runltp –f tcp_cmds_expect(TCP命令的可用性和稳定性)
预制条件:内核支持TCP/IP协议
40../runltp –f controllers(内核资源管理的稳定性测试)
预制条件:内核版本必须等于或者高于2.6.24
41../runltp –f cap_bounds(POSIX功能绑定设置可用性)
预制条件:内核版本2.6.25以上
42../runltp –f containers(命名空间资源稳定性)
43../runltp –f cpuacct(测试不同cpu acctount控制器的特点)
44../runltp –f cpuhotplug(测试cpu热插拔功能的稳定性)
45../runltp –f crashme(测试crashme)
预制条件:做测试前,先备份系统
46../runltp –f hugetlb(测试 hugetlb)
47../runltp –f ima(测试ima)
48../runltp –f ipc(测试ipc)
49../runltp –f Kernel_misc(测试 Kernel_misc)
50../runltp –f ltp-aiodio.part1(测试 ltp-aiodio.part1)
51../runltp –f Ltp-aiodio.part2(测试 Ltp-aiodio.part2)
52../runltp –f ltp-aiodio.part3(测试 ltp-aiodio.part3)
53../runltp –f ltp-aiodio.part4(测试 ltp-aiodio.part4)
54../runltp –f ltp-aio-stress.part1(测试 io stress)
55../runltp –f ltp-aio-stress.part2(测试 io stress)
56../runltp –f mm(测试mm)
57../runltp –f modules(测试内核模块)
58../runltp –f numa(测试非统一内存访问)
59../runltp –f sched(测试调度压力)
60../runltp –f securebits(测试securebits)
61../runltp –f smack(smack安全模块测试)
62../runltp –f timers(测试posix计时器)
63../runltp –f tirpc_tests(测试Tirpc_tests)
64../runltp –f tpm_tools(测试 tpm_tools)
65../runltp –f tracing(跟踪测试)
初始测试
1../runltp -p -l 执行路径 -d /tmp/ -o 执行路径 -t 1h 或者 ./runalltests.sh
-p:人为指定日志格式,保证日志为可读格式
-l:记录测试日志的文件
-d:指定临时存储目录,默认为/tmp
-o:直接打印测试输出到指定路径
-t:指定测试的持续时间
-t 60s = 60 seconds -t 45m = 45 minutes -t 24h = 24 hours -t 2d = 2 days
压力测试
1. # cd /opt/ltp/testscripts(进入这个目录)
2. # yum install -y sysstat(执行ltpstress时需要添加”sar”或”top”工具)
3. # ./ltpstress.sh -d /tmp/ltpstress.data -l /tmp/ltpstress.log -I /tmp/ltpstress.iostat -i 5 -m 128 -t 1 -S
-d:指定sar或top记录文件,默认/tmp/ltpstress.data -l:记录测试结果到/tmp/ltpstress.log -I:记录"iostat"结果到iofile,默认是/tmp/ltpstress.iostat -i:指定sar或top快照时间间隔,默认为10秒 -m: 指定最小的内存使用,默认为: RAM + 1/2 swap -n:不对网络进行压力测试 -S :用sar捕捉数据 -T:利用LTP修改过的top工具捕捉数据 -t: 指定测试时间,默认为小时 4.默认情况下,测试结果放在 /tmp ltpstress.log ---- 记录相关日志信息,主要是测试是否通过(pass or fail) ltpstress.data ---- sar工具记录的日志文件,包括cpu,memory,i/o等 ltpstress.5010.output1 ---- 对应stress.part1,测试命令的一些输出信息 ltpstress.5010.output2 ---- 对应stress.part2,测试命令的一些输出信息 ltpstress.5010.output3 ---- 对应stress.part3,测试命令的一些输出信息
5.测试cpu 平均使用率:# sar -u -f ltpstress.data 6.memory 平均使用率:# sar -r -f ltpstress.data
常用测试
1、搭建测试环境,预装gcc (有提示直接按回车键即可)
在终端输入:sudo apt install git autoconf automake m4 make gcc libcap-dev libssl-dev libselinux1-dev libaio-dev libexplain-dev libacl1-dev libtirpc-dev freebsd-glue bison libkeyutils-dev libmm-dev libsctp-dev flex libregf-dev libdts-dev libdtools-ocaml-dev libnuma-dev dma jfsutils xfslibs-dev netconfd numactl numad linux-headers-`uname -r`
2、复制到本地并解压ltp-full-20190930.tar.bz2
tar -xvf ltp-full-20190930.tar.bz2
3、cd进入到ltp-full-20190930/目录下 4、程序编译
make autotools(这句执行不通过也可以,只要编译没有报错就可以)
./configure
sudo make
sudo make install
5、cd /opt/ltp/testscripts/ 到testscripts/目录下 6、启动Ltp程序:sudo bash ./ltpstress.sh -n -t 36 -l ~/ltp.log (备注:-n 不对网络进行压力测试;-t 测试时间,默认为小时) 7、检查是否正常运行
在终端中输入:top(查看有genload进程表示成功)
8、运行结束,查看日志文件:ltp.log
附录: 01. 在安装编译ltp之前,需要确定linux系统“make”版本,ltp编译需要“make” 版本最低要求为“make 3.80”,优先使用“make 3.81”版本。 02. LTP编译成功后,包含三大部分:测试案例、测试脚本、测试驱动。测试案例目录为testcases/,testcases/包含了测试案例和案例脚本;测试脚本主要目录为testscripts/,里面包含了文件系统,磁盘,内核,内存等测试脚本;测试驱动目录为bin/,该目录存放了ltp各种驱动脚本,如ltp-pan,ltp-scanner等。 03. 为了编译和使用ltp-scanner,scanner是一个测试结果分析工具,linux系统需要安装bison/yacc和flex包。
测试结果的输出类型
TypeDescription
BROK程序执行中途发生错误而使测试遭到破坏
CONF测试环境不满足而跳过执行
WARN测试中途发生异常
INFO输出通用测试信息
PASS测试成功
FAIL测试失败