http://www.vimlinux.com/lipeng/2014/09/12/ltp/

Testing Linux, one syscall at a time.

LTP是从SGI开始的,后由IBM 思科 富士通 SUSE Redhat等组织开发的.该工具的目标是建立一个测试套件用来验证linux的可靠性,健壮性及稳定性.LTP测试套件包含了linux内核及相关功能的工具.

本文主要介绍关于ltp的一些基本信息.

LTP项目主页:ltp

Github链接:ltp

LTP是一个验证ltp内核功能和稳定性的测试集.用来支持linux开发过程中,通过更多的单元测试,减少bug的引入,降低bug对用户的影响.LTP并不是用来做benchmarking测试的,而是更专注与功能,问题回归及稳定性测试.LTP同样不是一个标准测试,标准测试有LSB.

一 基本结构

LTP测试套件是由包含一个基本动作和一个确认基本动作工作是否正常的测试用例组成.这个测试用例通常的测试结果是PASS/FAIL.一个测试程序是包含一个或多个测试用例的可执行程序.测试程序包括相应的测试参数,这些参数包括内存测试容量,临时文件位置,网络测试类型等等.Test tags 是用于匹配测试程序和一组命令行参数.Test tags是测试集的基础.

编写测试

编写一个测试用例比大多数想象的更容易.任何一个你编写用于验证内核功能的代码都可以用来形成一个用例.

测试退出约定

通常一个简单的判断一个测试用例执行结果的方式就是程序的返回值.如果你的测试程序没有得到一个预期结果或错误结果,程序退出是需要返回一个非零值,如exit1, 同样如果程序得到预期的结果,需要返回0,exit(0).一些测试驱动需要去收集这些返回值.如果一个测试程序包含多个测试用例,你不知道那个出错了,但你会知道程序出错了.

格式化输出

一个简单方式处理测试结果就是每个测试用例都输出一个标准格式的输出结果.这个格式需要是测试人员和分析工具都能理解的格式,当测试结果都按一个标准格式输出时工具就能够分析测试结果.

测试工具

LTP目前没有一个最终的测试工具.我们选择了一个简单的解决方式ltp-pan. Ltp-pan是一个简单的测试驱动程序,它可以跟踪孤儿进程和抓取测试的输出信息.它工作方式是读取一个包括test tags和命令行列表的文件并执行.默认的ltp-pan会随机的从列表中选择命令执行,并等待其结束.可以通过选择多个命令行执行多个测试,在一定时间执行多个测试并且缓冲多个测试结果.这样Ltp-pan可以营造出复杂的测试环境.Ltp-pan使用一个活动文件,通常叫做zoo文件来保存哪些测试在运行.这个文件包括pid,tag以及命令行的一部分.当启动ltp-pan,它本身变成了自己的一个标签.当一个测试标签退出,ltp-pan会第一个字符加#的方式重写.这个活动文件可以在多个ltp-pan实例中共享,所以当系统崩溃时,你可以通过查看一个文件,了解哪个用例造成的.

一个Ltp-pan文件包括一个测试tag列表.格式如下:

testtag testprogram -o one -p two other command line options

# This is a comment. It is a good idea to describe the test

# tags in your ltp-pan file. Tests programs can have different

# behaviors depending on the command line options so it is

# helpful to describe what each test tag is meant to verify
or # provoke. # Some more test cases mm01 mmap001 -m 10000 # 40 Mb mmap() test. # Creates a 10000 page mmap, touches all of the map, sync's # it, and munmap()s it. mm03 mmap001 -i 0 -I 1 -m 100 # repetitive mmapping test. # Creates a one page map repetitively for one minute. dup02 dup02 # Negative test for dup(2) with bad fd kill09 kill09 # Basic test for kill(2) fs-suite01 ltp-pan -e -a fs-suite01.zoo -n fs-suite01 -f runtest/fs

测试例子 运行一个测试基本方式是:

$ ltp-pan -a ltp.zoo -n tutor sleep 4

<<<test_start>>>

tag=cmdln stime=971450564

cmdline="sleep 4"

contacts=""

analysis=exit

initiation_status="ok"

<<<test_output>>>

<<<execution_status>>>

duration=103341903 termination_type=exited termination_id=0
corefile=no cutime=0 cstime=0 <<<test_end>>> $ cat ltp.zoo #9357,tutor,pan/ltp-pan -a ltp.zoo -n tutor sleep 4 #9358,cmdln,sleep 4 $

如何实现的: 这个例子展示ltp-pan两个参数,一个活动文件,一个test tag. "sleep 4"测试程序及ltp-pan要执行的参数.这个测试会得到标记“cmdln”。 LTP-run将随机运行一个测试,最终被cmdln,因为指定了唯一测试. 在活动文件,ltp.zoo,ltp-pan写入pid,testlog,运行测试部分命令行.当test tag运行完成,ltp-pan会标记一个"#",代表它可以执行.这时,你能看到cmdln和tutor,如果测试机挡住,你可以读这些文件查找哪个测试导致的.

同时运行一个测试多次.

$ ltp-pan -a ltp.zoo -n tutor -x 3 -s 3 -O /tmp sleep 1

<<<test_start>>>

tag=cmdln stime=971465653

cmdline="sleep 1"

contacts=""

analysis=exit

initiation_status="ok"

<<<test_output>>>

<<<execution_status>>>

duration=103326814 termination_type=exited termination_id=0
corefile=no cutime=1 cstime=0 <<<test_end>>> <<<test_start>>> tag=cmdln stime=971465653 cmdline="sleep 1" contacts="" analysis=exit initiation_status="ok" <<<test_output>>> <<<execution_status>>> duration=103326814 termination_type=exited termination_id=0
corefile=no cutime=0 cstime=1 <<<test_end>>> <<<test_start>>> tag=cmdln stime=971465653 cmdline="sleep 1" contacts="" analysis=exit initiation_status="ok" <<<test_output>>> <<<execution_status>>> duration=103326814 termination_type=exited termination_id=0
corefile=no cutime=0 cstime=0 <<<test_end>>>

如何工作的? 在这个例子中运行了另一个命令行,但是测试执行了3遍(-s 3)并且保持了3个test tags在同一时间执行(-x 3). -O 参数是指定临时文件保存目录,并且为每个缓冲结果设定标签.可以看到cmdln运行了3次.如果 -O 没有指定,则3次结果被混合,就没有意义了.

Scanner Ltp-scanner 是一个测试结果分析工具,它可以理解rts风格的输出.最终生成一个汇总结果显示哪个用例pass,哪个用例fail.

测试流程参见下图:

二.LTP文件结构

从 http://ltp.sourceforge.net/下载LTP测试源码包

LTP的目录结构基本上分为文档目录(doc)、测试驱动程序目录(pan)、测试脚本目录(testscripts)、测试用例库(testcase)、测试命令文件目录(runtest)、头文件目录(include)、库目录(lib)等。

* Doc:该目录是说明文件和帮助文档的所在地,这个目录中对LTP的内容和每个工具都有详细的说明。
* Pan:该目录存储的是LTP测试套件的测试驱动程序pan。
* Testscripts:该目录中存储的是可执行的测试脚本,不同方面的测试脚本的集合。
* Testcase:该目录存储了所有LTP测试套件中所使用的测试用例的源码。
* Runtest:该目录中的每个文件都是要执行的测试用例的命令集合,每个文件针对测试的不同方面。
* Include:LTP测试套件的头文件目录,定义了LTP自身的数据结构和函数结构。
* Lib:LTP测试套件运行时自身需要的库文件,定义了LTP自身的各种函数。

各个文件结构之间的联系: ---->testscripts中ltpstress.sh ---->runtest(stress.part1,stress.part2,stress.part3) ---->pan后台运行 ---->最终运行Testcase中的各个测试案例

其中runtest中 stree.part1,stree.part2,stree.part3中的测试命令或脚本 如 mmstress;来源于testcase/bin 中mmstress;而testcase/bin 中mmstress 可执行脚本或命令来源于/testcase中如 kernel,network, pounder21, commands 等源代码编译生成的, mmstress:kernel/mem/mtest05/mmstress.c

stress.partn中测试命令如何看? 这些命令文件包含测试用例的tag和带有参数的测使用里,格式如下: #tag test case test1 test1 -l 10 mtest01 mtest01 -m 20 fork01 fork01

三.LTP测试方法

测试方法有两个的阶段:一个是“初始测试”,一个是“压力测试”。 初始测试是开始测试的必要条件。初始测试包括 LTP 测试套件在硬件和操作系统上成功运转,这些硬件和操作系统将用于可靠性运转。LTP 测试套件包附带的驱动程序脚本 runalltest.sh 用于验证内核。这个脚本串行地运行一组成包的测试,并报告全部结果。也可以选择同时并行地运行几个实例。默认地,这个脚本执行:

* 文件系统压力测试。
* 硬盘 I/O 测试。
* 内存管理压力测试。
* IPC 压力测试。
* SCHED测试。
* 命令功能的验证测试。
* 系统调用功能的验证测试。

压力测试可以验证产品在系统高使用率时的健壮性。作为 runalltest.sh 的补充,特别设计了一个名为 ltpstress.sh 的测试场景,在使用网络与内存管理的同时并行地运行大范围的内核组件,并在测试系统上生成高压力负荷。ltpstress.sh 也是 LTP 测试套件的一部分。这个脚本并行地运行相似的测试用例,串行地运行不同的测试用例,这样做是为了避免由于同时访问同一资源或者互相干扰而引起的间歇性故障。默认地,这个脚本执行:

* NFS 压力测试。
* 内存管理压力测试。
* 文件系统压力测试。
* 数学 (浮点) 测试。
* 多线程压力测试。
* 硬盘 I/O 测试。
* IPC (pipeio, semaphore) 测试。
* 系统调用功能的验证测试。
* 网络压力测试。

四.测试组合的选择

所选择的测试的组合必须给系统的资源带来足够的压力。Linux 内核的四个主要方面可以影响系统的 响应和执行时间:    CPU:用于在机器的 CPU(s)上处理数据的时间。 Memory:用于自真实存储器中读写数据的时间。 I/O:用于自磁盘存储器读写数据的时间。 Networking:用于自网络读写数据的时间。

系统资源利用率评价阶段通常需要多次尝试才能得到合适的测试组合,并得到期望水平的利用率。在这个评价过程中,sar 工具也应该在运行。在评价运行的结论中,您应该收集并评价所有四种资源的利用率水平。 具体的测试组合修改方法。

修改方法一: runtest中 stress.part1,stress.part2,stress.part3。

如修改stress.part1中有这样一个测试mem02,根据阅读testcases/kernel/mem/mem/mem02.c 源代码,可将他修改为mem02 -m 15,意思是测试15m内存。 同样的也可以在 stress.part1,stress.part2,stress.part3 中添加、删除一些测试, 如我们测试时就把 stress.part3中关于swap交换分区的去掉

#swapoff01 swapoff01
#swapoff02 swapoff02
#swapon01 swapon01
#swapon02 swapon02
#swapon03 swapon03

修改方法二:

前面提到的初始测试或者压力测试都是测试的默认的,如果想测试其他的或者自己的测试案例,需要修改testcase的

Makefile,因为通过它的Makefile可以看到

SUBDIRS = ls */Makefile | sed "s/Makefile//g" | grep -v open | grep -v pounder | grep -v DOTS | grep -v kdump | grep -v realtime

sed 's//:/ /g' :想把文本中的冒号替换成空格

grep -v:显示所有与指定模式不匹配的行

也就是说open,pounder,DOTS,kdump,realtime没有测试,当然你可以选上或者,添加上自己的测试案例。

五.工具介绍

Gcov,lcove:

分析代码覆盖率

sar: 帮助我们掌握系统资源的使用情况,特别是内存和CPU 的使用情况, 是UNIX系统使用者应该掌握的工具之一 在我们的测试中,sar工具每 10 秒(当然时间间隔可以修改)钟截取一次系统利用率的快照,并保存到结果文件。 针对sar生成的sar.data使用方法: sar -u sar.data //查看cpu使用情况 sar -r sar.data //看看memory,swap使用情况 …………………… Top:

跟sar差不多的功能,这里我们就用sar 了。

其他

什么是稳定性和可靠性?

稳定性反映的是系统不会出现异常情况;可靠性反映的是系统能够保持正常运行而不受外界影响的能力。 系统的稳定性和可靠性通常以连续运转时间和系统的可靠运行时间来度量。

什么是压力测试?

压力测试是一种破坏性的测试,即系统在非正常的、超负荷的条件下的运行情况 。用来评估在超越最大负载的情况下系统将如何运行,是系统在正常的情况下对某种负载强度的承受能力的考验 。

为什么要进行压力测试?

通常我们用压力测试来判断系统的稳定性和可靠性。

Top^

Comments

Linux Test Project(一)的更多相关文章

  1. Linux USB Project

    转自:http://www.linux-usb.org/ Welcome to the home of the Linux USB Project This web site was created ...

  2. [转贴]LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project

    https://blog.csdn.net/melody157398/article/details/24354415   LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---I ...

  3. linux测试工程介绍(Linux Test Project)

    http://ltp.sourceforge.net/ Linux Test Project, 后台很硬,由SGI™ 发起, IBM维护,所以质量有保障. 里面介绍了很多工具,对于一般的基准测试应该是 ...

  4. [fw]linux测试工程介绍(Linux Test Project)

    http://ltp.sourceforge.net/ Linux Test Project, 后台很硬,由SGI™ 发起, IBM维护,所以质量有保障. 里面介绍了很多工具,对于一般的基准测试应该是 ...

  5. LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project

    LTP--linux稳定性测试 linux性能测试 ltp压力测试 ---IBM 的 linux test project Peter盼 2014-04-23 11:25:49  20302  收藏  ...

  6. 3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习

    3.1.5 LTP(Linux Test Project)学习(五)-LTP代码学习 Hello小崔 ​ 华为技术有限公司 Linux内核开发 2 人赞同了该文章 LTP代码学习方法主要介绍两个步骤, ...

  7. Linux内核project导论——linux学习和职业曲线(刚開始学习的人,中级,高级都可參考)

    Linux世界介绍 给自己定级 门外汉: 不会安装操作系统 不会用虚拟机(安装和使用) 入门级: 熟悉常见的发行版,甚至装过而且能用一些特殊发行版(比如kali)做过一些简单的图形界面的使用. 会一些 ...

  8. Linux内核project导论——网络:Filter(LSF、BPF、eBPF)

    概览 LSF(Linux socket filter)起源于BPF(Berkeley Packet Filter).基础从架构一致.但使用更简单.LSF内部的BPF最早是cBPF(classic).后 ...

  9. Linux内核project导论——前言

    想要研究linux内核.使用linux内核,首先要知道linux内核能做到什么,提供了什么.我看过非常多刚開始学习的人一进入公司就開始使用linux内核开发内核模块.使用的不管是通信方式.内存接口还是 ...

  10. Linux内核project导论——网络:Netfilter概览

    简单介绍 最早的内核包过滤机制是ipfwadm.后来是ipchains.再后来就是iptables/netfilter了. 再往后,也就是如今是nftables. 只是nftables与iptable ...

随机推荐

  1. 热更新解决方案--xlua学习笔记

    一.热更新方案简介 在Unity游戏工程中,C#代码(编译型语言)资源和Resources文件夹下的资源打包后都不可以更改,因此这部分内容不能进行热更新,而lua代码(解释型语言)逻辑不需要进行预编译 ...

  2. lms微服务框架主机介绍

    目录 概念 .net的通用主机 .net的web主机 lms的业务主机类型 用于托管业务应用的普通主机 1. 创建一个应用台程序 2. 安装Silky.Lms.NormHost包 3. 注册LMS服务 ...

  3. 通过Dapr实现一个简单的基于.net的微服务电商系统(五)——一步一步教你如何撸Dapr之状态管理

    状态管理和上一章的订阅发布都算是Dapr相较于其他服务网格框架来讲提供的比较特异性的内容,今天我们来讲讲状态管理. 目录:一.通过Dapr实现一个简单的基于.net的微服务电商系统 二.通过Dapr实 ...

  4. 【NCRE】三级网络技术 选择题易错点记录(1)

    部分易错点 连接到一个集线器的多个节点不能同时发送数据帧 嵌入式安装插座用来连接双绞线 异步串行端口 PPP 同步串行端口 PPP/HPLC 对于频繁改变位置并使用DHCP获取IP地址的DNS客户端, ...

  5. redis实际应用-限流

    为什么要做限流 首先让我们先看一看系统架构设计中,为什么要做"限流". 旅游景点通常都会有最大的接待量,不可能无限制的放游客进入,比如故宫每天只卖八万张票,超过八万的游客,无法买票 ...

  6. Typora+PicGo+阿里云写博客笔记

    Typora+PicGo+阿里云写博客笔记 选择这三个工具的理由 我一直有在使用typora使用mardown写作,毕竟typora很香,可以实时预览,非常丝滑. 配合上PicGo这个图床工具简直绝了 ...

  7. 实现spaCy实体标注模型

    命名实体识别是指对现实世界中某个对象的名称的识别.与词性标注一样,是自然语言处理的技术基础之一.它的作用主要是通过模型识别出文本中需要的实体,也可以推导出实体之间的关系(实体消歧). 本文介绍的是运用 ...

  8. (数据科学学习手札119)Python+Dash快速web应用开发——多页面应用

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  9. 09- monkey命令详解

    安装模拟器 如果你没有手机可以安装个模拟器,如果有手机了,忽略此步骤. 1.下载模拟器:http://www.xyaz.cn/ 2.安装:直接默认安装. 3.打开安卓模拟器,设置-关于手机-点击版本号 ...

  10. POJ1151基本的扫描线求面积

    题意:      给定n个矩形的对角坐标,分别是左下和右上,浮点型,求矩形覆盖的面积. 思路:       基本的线段树扫描线求面积,没有坑点,不解释了,提示一点,有的题尤其是线段树扫描线的题需要离散 ...