LTP使用和分析

一.安装及编译流程

1.下载LTP

LTP 项目目前位于 GitHub,项目地址:https://github.com/linux-test-project/ltp
获取最新版可以执行以下命令:

git clone https://github.com/linux-test-project/ltp.git

2.安装相关软件包

sudo apt-get install autoconf  automake  autotools-dev m4 gcc libssl-dev libaio-dev flex bison libcap-dev libregf-dev libdts-dev libdtools-ocaml-dev libnuma-dev libacl1-dev automake autoconf dma libmm-dev jfsutils libselinux1-dev xfslibs-dev netconfd numactl numad rpcbind nfs-kernel-server rsh-server sysstat

3.安装LTP步骤

cd ltp
make autotools
./configure
sudo make all
sudo make install

依次执行以上命令后,LTP 已经被正确安装到你的 Linux 系统中,默认安装位于 /opt/ltp/。

4.注意

需要注意的是,我们通过 git clone 命令下载的位于home目录下的ltp文件夹为 ltp源码文件夹,我将在后文简称为源码包。
通过执行一系列命令安装到 /opt 目录下的 ltp 文件夹为ltp安装文件夹,我将在后文简称为安装包。

二.目录结构

1.源码包

1.1.LTP 源码包目录结构描述

名称说明
INSTALLLTP安装配置指导文档
READMELTP介绍
CREDITS记录对LTP有很大贡献的人
COPYINGGNU公开许可证
ChangeLog描述版本变化
ltpmenu规划执行LTP的图形化界面接口
MakefileLTP顶层目录的Makefile,负责编译安装pan、testcases和tools
runalltests.sh序运行全部测试用例并且报告结果的脚本
doc/*工程文档包含工具和库函数使用手册,描述各种测试
include/*通用的头文件目录
lib/*通用的函数目录
testcases/*包含在LTP下运行和bin目录下的所有测试用例和链接
testscripts/*存放分组的测试脚本
runtest/*为自动化测试提供命令列表
pan/*测试的驱动装置,具备随机和并行测试的能力
scratch/*存放零碎测试
tools/*存放自动化测试脚本和辅助工具

1.2.LTP 测试套件包含的内容

$ cd ltp/testcases/
$ ls
commands  demoA  kernel  Makefile  network               realtime
cve       kdump  lib     misc      open_posix_testsuite
名称说明
commands常用命令测试
kernel内核模块及其相关模块
kdump内核现崩溃转储测试
network网络测试
realtime系统实时性测试
open_posix_testsuiteposix标准测试
misc崩溃、核心转出、浮点运算等测试

2.安装包

LTP安装包目录结构描述如下:

名称说明
bin存放LTP测试的一些辅助脚本
results测试结果默认存储目录
testcases测试项集
output测试日志默认存储目录
share脚本使用说明目录
runtest测试驱动(用于链接testscripts内的测试脚本和testcases测试项目)
lib通用的库函数目录

三.测试执行

1.整体测试

可以测试所有的测试集,直接运行 runltp 命令将测试 ltp/scenario_groups/default 中的所有测试集,一次测试约 3 小时。

$ cd /opt/ltp
$ sudo ./runltp
也可以使用如下命令
$sudo ./runltp -t 8h |tee ~/runltp_test.log
-t:指定测试的持续时间
                  -t 60s = 60 seconds
                  -t 45m = 45 minutes
                  -t 24h = 24 hour
                  -t 2d  = 2 days
|tee ~/runltp_test.log
把测试的日志打印在终端的同时收集到家目录下的runltp_test.log文件

查看测试结果

cd results/
vim LTP_RUN_ON-XXXX.log
可以到最后的统计
Total Tests: 2173
Total Skipped Tests:xxx
Total Failures: xxx
Kernel Version: xxx
Machine Architecture: mips64
Hostname: xxx

在output目录可以查看测试的fail项和tconf项
LTP_RUN_ON-XXXX.failed
LTP_RUN_ON-XXXX.tconf

2.测试集测试

当然我们可以只测试某个测试集,测试集可以在 ltp/runtest/ 下查看。
需要注意的是,如果我们测试某个测试集,runltp 需要指定 -f 参数。
例:

$sduo ./runltp -f mm //测试内存

3.单独测试

如果我们不想测试某个测试集,只想测试某个单独的测试,可以采用安装包测试或者源码包测试。下面以 access01 为例,讲解单独测试。

3.1.安装包测试

进入安装包,执行以下命令即可.

$ cd /opt/ltp/
$ sudo ./runltp -s access01

需要注意的是,如果我们测试某个测试,runltp 需要指定 -s 参数。

3.2.源码包测试

进入源码包,找到acess01胡位置,直接执行./access01即可.

$ cd ~/work/ltp/testcases/kernel/syscalls/access/
$ sudo ./access01

我们看到access01位于testcases目录下,实际上testcases目录下每个文件都是一个完整的可执行程序,可以在编译后的源码路径直接执行

4.测试结果

测试结果的输出类型如下:

TypeDescription
BROK程序执行中途发生错误而使测试遭到破坏
CONF测试环境不满足而跳过执行
WARN测试中途发生异常
INFO输出通用测试信息
PASS测试成功
FAIL测试失败

5.测试结果分析

执行命令后,会输出许多内容,我们只需要关心最重要的部分.<<<test_start>>到<<<test_end>>中间的内容。这是一个小测试项的开始和结束标志,中间会打印测试的结果以及提示信息等。

5.1.例一测试通过的项

<<<test_start>>>
tag=read_all_dev stime=1611898350
cmdline="read_all -d /dev -p -q -r 3"
contacts=""
analysis=exit
<<<test_output>>>
tst_test.c:1263: TINFO: Timeout per run is 0h 05m 00s
read_all.c:446: TPASS: Finished reading files
  
Summary:
passed   1
failed   0
broken   0
skipped  0
warnings 0
<<<execution_status>>>
initiation_status="ok"
duration=0 termination_type=exited termination_id=0 corefile=no
cutime=1 cstime=1
<<<test_end>>>   

根据这个信息我们主要分析哪些呢?
1.查看测试项:tag=read_all_dev
2.查看测试使用的命令:cmdline=read_all -d /dev -p -q -r 3
使用的read_all可执行文件参数是-d /dev -p -q -r 3 (参数的含义可以在源码中找到read_all.c),许多测试项是无参数的。
3.查看这个测试项一共有多个测试:Summary (上述的信息中只有passed=1其余是0,即此测试项一共只有1个测试)
4.如果3中有除了passed,需要查看test_output输出的信息,然后分析异常原因。

5.2.例二测试失败项

<<<test_start>>>
 tag=read_all_sys stime=1611898352
 cmdline="read_all -d /sys -q -r 3"
 contacts=""
 analysis=exit
 <<<test_output>>>
 tst_test.c:1263: TINFO: Timeout per run is 0h 05m 00s
 Test timeouted, sending SIGKILL!
 tst_test.c:1308: TINFO: If you are running on slow machine, try exporting LTP_TIMEOUT_MUL > 1
 tst_test.c:1309: TBROK: Test killed! (timeout?)
 
 Summary:
 passed   0
 failed   0
 broken   1
 skipped  0
 warnings 0
 <<<execution_status>>>
 initiation_status="ok"
 duration=300 termination_type=exited termination_id=2 corefile=no
 cutime=3 cstime=5
 <<<test_end>>>

通过上述信息可以看出:
1.测试项是read_all_sys
2.使用测试命令是read_all 参数是-d /sys -q -r 3
3.只有一个测试,并且出现了异常”broken 1“
4.查看test_output信息:提示测试是被杀死了,并不是正常结束。还提示可能是超时了。
从表面的信息是测试超时,测试进程被杀死。但是要找到根因,这需要进入源码分析。

如何分析?
1.找到测试项源码:
使用测试执行的文件搜索

uos@uos:~/ltp$ find -name read_all
./testcases/kernel/fs/read_all
./testcases/kernel/fs/read_all/read_all
uos@uos:~/ltp$ cd ./testcases/kernel/fs/read_all/
uos@uos:~/ltp/testcases/kernel/fs/read_all$ ls
Makefile  read_all  read_all.c

可以看出read_all这个执行文件是由read_all.c编译生成的。
2.打开read_all.c文件
查看测试项的功能 --> 了解参数的含义 --> 打点跟踪流程 --> 定位卡点(在哪里等待超时) --> 分析什么原因导致超时等待

  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值