Linux Test Project(一)

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

Testing Linux, one syscall at a time.

LTP是從SGI開始的,後由IBM 思科 富士通 SUSE Redhat等組織開發的.該工具的目標是創建一個測試套件用來驗證linux的可靠性,健壯性及穩定性.LTP測試套件包含了linux內核及相關功能的工具.linux

本文主要介紹關於ltp的一些基本信息.git

LTP項目主頁:ltpgithub

Github連接:ltpvim

LTP是一個驗證ltp內核功能和穩定性的測試集.用來支持linux開發過程當中,經過更多的單元測試,減小bug的引入,下降bug對用戶的影響.LTP並非用來作benchmarking測試的,而是更專一與功能,問題迴歸及穩定性測試.LTP一樣不是一個標準測試,標準測試有LSB.網絡

一 基本結構

LTP測試套件是由包含一個基本動做和一個確認基本動做工做是否正常的測試用例組成.這個測試用例一般的測試結果是PASS/FAIL.一個測試程序是包含一個或多個測試用例的可執行程序.測試程序包括相應的測試參數,這些參數包括內存測試容量,臨時文件位置,網絡測試類型等等.Test tags 是用於匹配測試程序和一組命令行參數.Test tags是測試集的基礎.數據結構

編寫測試

編寫一個測試用例比大多數想象的更容易.任何一個你編寫用於驗證內核功能的代碼均可以用來造成一個用例.多線程

測試退出約定app

一般一個簡單的判斷一個測試用例執行結果的方式就是程序的返回值.若是你的測試程序沒有獲得一個預期結果或錯誤結果,程序退出是須要返回一個非零值,如exit1, 一樣若是程序獲得預期的結果,須要返回0,exit(0).一些測試驅動須要去收集這些返回值.若是一個測試程序包含多個測試用例,你不知道那個出錯了,但你會知道程序出錯了.ide

格式化輸出函數

一個簡單方式處理測試結果就是每一個測試用例都輸出一個標準格式的輸出結果.這個格式須要是測試人員和分析工具都能理解的格式,當測試結果都按一個標準格式輸出時工具就可以分析測試結果.

測試工具

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

相關文章
相關標籤/搜索