• 了解LTP 测试工具

1.概述

  LTP(LinuxTest Project)是SGI、IBM、OSDL和Bull合作的项目,目的是为开源社区提供一个测试套件,用来验证Linux系统可靠性、健壮性和稳定性。LTP测试套件是测试Linux内核和内核相关特性的工具的集合。该工具的目的是通过把测试自动化引入到Linux内核测试,提高Linux的内核质量。LTP提供了验证linux系统稳定性的标准,设计标准的压力场景,通过对linux系统进行压力测试,对系统的功能、性能进行分析,并以此确定linux系统的可靠性、健壮性和稳定性。

1.1.源目录结构
在这里插入图片描述

2.安装

  官网地址为:https://github.com/linux-test-project/ltp/releases

2.1. 编译

  从官方网站下载最新的LTP测试套件包,解压后进入ltp源目录。查看ltp INSTALL文件搭建编译环境,编译成功后会自动安装到/opt/ltp目录下。

  编译参考:https://github.com/linux-test-project/ltp

2.2.目录

  LTP编译成功后,包含三大部分:测试案例、测试脚本、测试驱动。

  • 测试案例目录为testcases/,testcases/包含了测试案例和案例脚本;
  • 测试脚本主要目录为testscripts/,里面包含了文件系统,磁盘,内核,内存等测试脚本;
  • 测试驱动目录为bin/,该目录存放了ltp各种驱动脚本,如ltp-pan,ltp-scanner等。

  安装ltp目录介绍:

xxx:/opt/ltp$ ls
bin         output   runltp   scenario_groups  testcases    ver_linux
IDcheck.sh  results  runtest  share            testscripts  Version

在这里插入图片描述
3.LTP执行原理

  从一个测试命令文件(或脚本)中读取所测条目需要执行的命令行,然后等待该项测试的结束,并记录详细的测试输出。默认状态下pan会随机的选择一个命令行来运行,可以指定在同一时间要执行测试的次数。pan会记录测试产生的详细的格式复杂的输出,但它不进行数据的整理和统计,数据整理统计的工作由scanner来完成,scanner是一个测试结果分析工具,它会理解pan的输出格式,并通过表格的形式总结测试passed或failed的情况。

  简单地说,LTP测试套件通过执行测试脚本runalltests.sh(或runltp或runltplite.sh)或testscripts内的测试脚本,调用驱动程序pan执行testcases内的测试项目,输出测试结果,并利用scanner整理数据。

4.测试

  什么是稳定性和可靠性?什么是压力测试?为什么要进行压力测试?

  稳定性和可靠性:

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

  压力测试:

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

参考:
http://113.16.175.50/%D1%A7%CF%B0%D7%CA%C1%CF/linux/Linux%D1%B9%C1%A6%B2%E2%CA%D4%D3%EBLTP%CC%E5%CF%B5%BD%E1%B9%B9.txt

4.1.概述

  • 第一阶段——初始测试,主要用于测试系统的可靠性,包括LTP测试套件在硬件和操作系统上24小时的成功运转。

  • 第二阶段——压力测试,主要验证产品在系统高使用率时的健壮性。

4.1.1.初始测试

  初始测试使用的脚本是runltp,在执行runltp脚本的时,可以指定参数添加你需要的测试的项目(在/testscripts内)。初始测试是对linux系统主要项目(不是全部)进行测试。包括:

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

初始测试的测试脚本是runalltests.sh或runltp(runltp默认执行的内容与runalltests相同)。

4.1.2.runltp 命令

用法:./runltp [option] [command]

-a EMAIL_TO    发送所有的报告到指定的邮箱
-c NUM_PROCS    添加后台测试CPU的进程数,默认1
-C FAILCMDFILE    失败案例存储文件
-d IMPDIR    临时存储目录,默认/tmp
-D NUM_PROCS,NUM_FILES,NUM_BYTES,CLEAN_FLA    run LTP under additional background Load on Secondary Storage (Seperate by comma)
    [NUM_PROCS   = no. of processes creating Storage Load by spinning over write()]
    [NUM_FILES   = Write() to these many files (Defaults to 1 when value 0 or undefined)]
    [NUM_BYTES   = write these many bytes (defaults to 1GB, when value 0 or undefined)]
    [CLEAN_FLAG  = unlink file to which random data written, when value 1]
-e     输出目前LTP版本的日期
-f CMDFILES    执行用户自定义的测试案例,用“ ,”隔开(CMDFILES指runtest内的驱动程序)
-g HTMLFILE    添加html格式的输出文件HTMLFILE
-h    帮助信息
-i NUM_PROCS    添加后台测试IO bus总线的进程数
-l LOGFILE    记录测试日志的文件
-m NUM_PROCS,CHUNKS,BYTES,HANGUP_FLAG     run LTP under additional background Load on Main memory (Seperate by comma)
    [NUM_PROCS   = no. of processes creating main Memory Load by spinning over malloc()]
    [CHUNKS      = malloc these many chunks (default is 1 when value 0 or undefined)]
    [BYTES       = malloc CHUNKS of BYTES bytes (default is 256MB when value 0 or undefined) ]
    [HANGUP_FLAG = hang in a sleep loop after memory allocated, when value 1]


-N    添加所有的网络测试
-n    添加后台测试网络传输
-o OUTPUTFILE    直接打印测试输出到OUTPUTFILE
-p    人为指定日志格式
-q    打印少的测试输出到屏幕
-r  LTPROOT        
-s  PATTERN    匹配PATTERN执行测试案例
-t  DURATION    给定测试执行时间设置(s,m,h,d)
-T REPETITION    重复执行测试案例
-v    打印多的测试输出到屏幕
-w CMDFILEADDR    使用wget下载用户测试案例集合。
-x INSTALL    并行执行多个测试场景

4.2.压力测试

  在对Linux内核版本稳定性的测试中,需要明确地声明并证明为什么该版本是稳定的或者是不稳定的。不同的 Linux 开发者、用户和发行商会使用他们自己的方法来测试内核的稳定性,但是,如果他们对运行了哪些测试、覆盖的代码、达到的压力级别等的基础信息都没有发布,那么这就会大大降低了结果的价值。

  为此要有一个合适的测试方法来规范Linux内核稳定性的测试,以系统资源的利用率统计为基准制定了一个组合的测试方法,这一组合测试方法的四个步骤是:测试选择、系统资源利用率评价、内核代码覆盖分析以及最终的压力测试评价。

  • 测试选择
      测试选择包括达成两方面目的的测试:
      - 测试应该可以得到 CPU(s)、内存、I/O 和网络等主要内核区域的高水平的资源利用率。
      - 测试应该充分地覆盖内核代码,以帮助支持自其结果中生成的稳定性声明。
  • 评价系统资源利用率
      所选择的测试的组合必须给系统的资源带来足够的压力。Linux 内核的四个主要方面可以影响系统的 响应和执行时间:
      - CPU:用于在机器的 CPU(s)上处理数据的时间。
      - Memory:用于自真实存储器中读写数据的时间。
      - I/O:用于自磁盘存储器读写数据的时间。
      - Networking:用于自网络读写数据的时间。

  系统资源利用率评价阶段通常需要多次尝试才能得到合适的测试组合,并得到期望水平的利用率。当确定测试组合时,过度利用总是一个至关重要的问题。例如,如果选择的组合过于受 I/O 所限,可能会 导致 CPU的测试结果不好,反之亦然。方法的这一部分主要是大量的试验和出错,直到所有资源达到期望水平。

  当选定一个组合后,测试必须长时间运行以准确评价资源的利用率。测试运行的时间长短取决于每个测试的长度。假如多个测试同时运行,则时间必须足够长以使得这些测试中最长的那个可以完成。在这个评价过程中,sar 工具也应该在运行。在评价运行的结论中,您应该收集并评价所有四种资源的利用率水平。

  • 内核代码覆盖率
    获得足够的内核覆盖率是系统压力测试的另一个职责。尽管所选的测试组合充分地利用了四种主要资源,它也有可能只是执行了内核的一小部分。因而,应该对覆盖率进行分析以确保组合可以成为一个系统压力测试,而不是一个系统负载生成器。

  • 最终压力测试
    之所以要执行方法中的这最后一步,是为了对系统压力测试进行核实。在一个被认为是稳定的内核上执行压力测试; 通常,发行版本中的内核可以满足这一要求,但不总是如此。要长时间地执行压力测试,同时运行sar 工具,原因有以下两点:
      - 长时间运行有助于发现组合中的所有问题,否则,在短时间的“取样测试(sniff test)”中这些问题可能会被忽略。
      - sar 生成的数据构成以后测试运行中进行比较的基线。
      
    长时间运行结束后,现在可以基于收集的所有数据来决定这个测试组合是否是系统压力测试的合适候选者。

  LTP工作组在设计Linux 内核压力测试脚本 ltpstress.sh时使用了这一设计方法,为给系统提供足够的压力,LTP工作组对这个组合测试进行了分析,以确定 Linux内核的哪些部分在测试执行中得到了使用。然后,修改了组合测试,在保持期望的高强度系统压力的同时提高代码覆盖率的百分比。最终得到的压力测试涵盖了Linux 内核的足够多部分,有助于稳定性声明,并且有系统使用情况和内核代码覆盖情况的数据来支持它。

  执行安装之后,生成/opt/ltp/testscripts/ltpstress.sh,它可以对linux系统进行压力测试。

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

  在使用ltpstress.sh脚本的之前需要对系统进行配置:

-rsh必须配置完毕并在运行。
-内核支持NFS,并且安装NFS软件,通过网络测试。
-“sar”或"top"工具需要被安装,执行ltpstress时需要添加"sar"或“top”工具。

4.2.1.ltpstress.sh

-d datefile    指定sar或top记录文件,默认是/tmp/ltpstress.data
-i  #(in sec)    指定sar或top快照时间间隔,默认是10s
-I  iofile    记录"iostat"结果到isofile默认是/tmp/ltpstress.iostat
-l  logfile    记录测试结果到logfile,默认是/tmp/ltpstress
-m #(in Mb)    指定最小的内存使用
-n     不对网络进行压力测试
-S    用 sar捕捉数据
-T    利用LTP修改过的top工具捕捉数据
-t duration    指定时间的设置

例如:

./ltpstress.sh -d /tmp/sardata -l /tmp/ltpstress.log -I /tmp/iofile -i 5 -m 128 -t 24 -S 

                -d:指定sar或top记录文件,默认/tmp/ltpstress.data

-l:记录测试结果到/tmp/ltpstress.log (小写L)

-I:记录"iostat"结果到iofile,默认是/tmp/ltpstress.iostat (大写i)

-i:指定sar或top快照时间间隔,默认为10-m: 指定最小的内存使用,默认为: RAM + 1/2 swap

-n:不对网络进行压力测试

-S :用sar捕捉数据

-T:利用LTP修改过的top工具捕捉数据

-t: 指定测试时间    

4.3.常用测试命令

README.md:
 53 ------------------------------------------------------------------------------
 54 Shortcut to running a single test
 55 If you need to execute a single test you actually do not need to compile
 56 the whole LTP, if you want to run a syscall testcase following should work.
 57 
 58 ```
 59 $ cd testcases/kernel/syscalls/foo
 60 $ make
 61 $ PATH=$PATH:$PWD ./foo01
 62 ```
 63 
 64 Shell testcases are a bit more complicated since these need a path to a shell
 65 library as well as to compiled binary helpers, but generally following should
 66 work.
 67 
 68 ```
 69 $ cd testcases/lib
 70 $ make
 71 $ cd ../commands/foo
 72 $ PATH=$PATH:$PWD:$PWD/../../lib/ ./foo01.sh
 73 ```
 74 
 75 Open Posix Testsuite has it's own build system which needs Makefiles to be
 76 generated first, then compilation should work in subdirectories as well.
 77 
 78 ```
 79 $ cd testcases/open_posix_testsuite/
 80 $ make generate-makefiles
 81 $ cd conformance/interfaces/foo
 82 $ make
 83 $ ./foo_1-1.run-test
 84----------------------------------------------------------------------------------------

107 To run all the test suites
108 
109 ```
110 $ cd /opt/ltp
111 $ ./runltp
112 ```
113 
114 Note that many test cases have to be executed as root.
115 
116 To run a particular test suite
117 
118 ```
119 $ ./runltp -f syscalls
120 ```
121 
122 To run all tests with `madvise` in the name
123 
124 ```
125 $ ./runltp -f syscalls -s madvise
126 ---------------------------------------------------------------------------------------------


136 Each test case has its own executable or script, these can be executed
137 directly
138 
139 ```
140 $ testcases/bin/abort01
141 ```
142 
143 Some have arguments
144 
145 ```
146 $ testcases/bin/fork13 -i 37
147 ```
148 
149 The vast majority of test cases accept the -h (help) switch
150 
151 ```
152 $ testcases/bin/ioctl01 -h
153 ```
154 
155 Many require certain environment variables to be set
156 
157 ```
158 $ LTPROOT=/opt/ltp PATH="$PATH:$LTPROOT/testcases/bin" testcases/bin/wc01.sh
159 ```

4.3.1.详细参数命令参考:

  • https://www.cnblogs.com/seaBiscuit0922/p/7096394.html
./runltp -p -l /tmp/resultlog.20111207 -d /tmp -o /tmp/ltpscreen.20111207 -t 24h            
          -p:人为指定日志格式,保证日志为可读格式                       
          -l:记录测试日志的文件
          -d:指定临时存储目录,默认为/tmp
          -o:直接打印测试输出到/tmp/ltpscreen.20111207
          -t:指定测试的持续时间
          -t 60s = 60 seconds
          -t 45m = 45 minutes
          -t 24h = 24 hours
          -t 2d  = 2 days

4.4.An example test case

  • https://lwn.net/Articles/630542/

README.kernel_config

参考:

  • https://lwn.net/Articles/625969/
  • http://ltp.sourceforge.net/documentation/how-to/ltp.php
  • https://blog.csdn.net/zhang_danf/article/details/43764457
  • https://blog.csdn.net/a1317480843/article/details/80006028
  • https://docs.windriver.com/bundle/Wind_River_Linux_Platform_Developer_Testing_Tutorials_8.0_1/page/ubz1554295452308.html
  • http://113.16.175.50/%D1%A7%CF%B0%D7%CA%C1%CF/linux/Linux%D1%B9%C1%A6%B2%E2%CA%D4%D3%EBLTP%CC%E5%CF%B5%BD%E1%B9%B9.txt
Logo

更多推荐