軟件測試中多種測試linux內核的方法
簡單地說,Linux是一套免費使用和自由傳播的類Unix操作系統。這個系統是由世界各地的成千上萬的程序員設計和實現的。其目的是建立不受任何商品化軟件的版權制約、全世界都能自由使用的Unix兼容產品。
多種測試linux內核的方法 軟件測試 1. 在平時的工作中使用內核的測試版本. 2. 在新內核上運行專用的測試套件,比如LTP. 3. 新內核安裝後,做些非常規的事情. 4. 新內核安裝後,測試系統的性能. 當然,測試過程它們可以混合運用,所以可以認為它們是測試過程的不同階段。 階段一:內核的冒煙測試 內核測試的第一階段很簡單:我們嘗試著啟動內核,然後把它用在平時的工作中。 ? 在以全功能配置啟動系統之前,推薦先用init=/bin/bash命令行參數來啟動內核。它使得內核只啟動一個bash進程。這樣,你可以檢查在最小配置下是否能正常掛載和卸載文件系統,然後,你可以測試一些更加復雜的內核功能,比如掛起到disk或RAM的緩沖。這種情況下,唯一被掛載了的模塊是位於initrd映象中的那些模塊。提到 了initrd映象。通常,你可以參考你的boot loader文檔來獲取更多關於手工向內核傳遞命令行的信息(我們的觀點是,如果使用的是GRUB,會更容易操作些。) ? 接著,建議以runlevel 2來啟動系統(通常,是通過把數字2作為命令行參數傳遞給內核),這時,網絡服務器和X服務器還沒啟動(你的系統有可能為這個用途使用的是另一個runlevel,盡管不大可能,所以你應該查看/etc/inittab文件確認一下)。在這個配置下,你可以檢查網絡接口是否能工作,你還可以嘗試手工啟動X服務器來確認它不會崩潰掉。 ? 最後,根據需要,你可以把系統啟動到runlevel 5(也就是全功能)或者3(也就是除了X,全功能開啟) 現在,你已經可以按平時的樣子使用系統一段時間了。但是,如果想快點測試內核,你可以執行一些典型的操作,比如下載一些文件,讀取郵件,浏覽一些站點,抓取一些音軌(我們假設,使用的是合法買來的音頻CD),刻錄一張CD或DVD等等操作來連續地檢查是否有任何一項會出錯。出錯的話,就意味著內核有問題存在了 。 階段二(自動測試) 測試的下一階段是,使用專門設計的程序來檢查特定的內核子系統能否正常工作。我們還執行內核的退化以及性能測試。後者對於內核開發員(還有我們)來說,相當地重要,因為它使得我們能識別出損害性能的改變。比如,如果我們把內核從2.6.x-rc1升級到2.6.x-rc2後,有種文件系統的性能卻降低了10%,查找導致這種情況發生的補丁無疑是個好主意。 關於內核的自動測試,我們推薦你使用AutoTest 套件(http://test.kernel.org/autotest/)。該套件包含了很多測試應用程序以及統計工具,而且相當簡單的用戶界面。 為了安裝AutoTest你以root帳戶可以進入到/usr/local 目錄並運行 # svn checkout svn://test.kernel.org/autotest/trunk autotest 雖然通常不推薦以root帳戶運行類似命令,但這個命令應該是安全的,除非你不信任你的DNS服務器,因為它只是下載一些文件,並保存到/usr/local下。除此之外,你還得以root帳戶運行AutoTest,因為它的一些測試要求超級用戶權限才能完成。所以,你不應該在生產系統上使用AutoTest:在極端情況下,保存在進行特權級測試的系統中的數據可能會受到損壞甚至毀壞,我們相信你不喜歡你的產品數據會發生這種情況。 根據設計,AutoTest是非交互式性的,所以一旦啟動,你就不需要再關心它了(當然了,如果有壞事真的發生了,你就要不得不恢復系統了,但這是另外一個話題)。要啟動測試,你可以到/usr/local/autotest/client目錄下 (我們假設AutoTest被安裝到了/usr/local下),然後以root身份執行: # bin/autotest tests/test_name/control 這裡,test_name是位於目錄/usr/local/autotest/client/tests中的目錄名稱,該目錄中含有你想要進行的測試。控制文件tests/test_name/control包含了為AutoTest准備的指令。最簡單的情況下,只需要一個這樣的指令,也就是: job.run_test(’test_name’) 這裡,test_name是包含控制文件的目錄名稱。更加復雜的控制文件的內容可能類似下面: job.run_test(’pktgen’, ’eth0’, 50000, 0, tag=’clone_skb_off’) job.run_test(’pktgen’, ’eth0’, 50000, 1, tag=’clone_skb_on’) 這裡,測試名稱後面的字符串表示的是應當要傳遞到測試程序的參數。你可以修改這些參數,但是首先要閱讀測試程序的文檔以及腳本tests/test_name/test_name.py(比如tests/pktgen/pktgen.py)。實際上AutoTest就是使用該腳本來啟動測試的(可能你已經注意到, AutoTest腳本是用Python語言寫的)。腳本sts/test_name/test_name.py的執行結果保存在目錄results/default/test_name/中,該目錄中的status文件包含著標識測試是否已經成功完成的信息。想取消正在進行的測試,按Ctrl+C即可。 如果你想連續運行一串測試,最好的做法是准備單獨一個文件,該文件中包含著多個AutoTest的指令。這個文件中的指令和上面提到的控制文件中的指令類似。比如,文件samples/all_tests包含有運行所有可以測試指令,其中前五行如下 job.run_test(’aiostress’) job.run_test(’bonnie’) job.run_test(’dbench’) job.run_test(’fio’) job.run_test(’fsx’) 要運行這個文件中的指令所請求的全部測試,你可以做使用命令bin/autotest samples/all_tests。但是要記得這要花很長的時間才能完成。類似地,要運行定制的一串測試,得把為AutoTest准備的指令們放到一個文件裡面,然後給這個文件起個名稱,這個名稱將作為命令行的一個參數傳遞給autotest.要並行地運行幾個測試,你得准備一個特殊的控制文件,這個控制文件包含的指令如下: def kernbench(): job.run_test(’kernbench’, 2, 5) def dbench(): job.run_test(’dbench’) job.parallel([kernbench], [dbench]) 在測試執行的過程序中,在任何時間裡,你都可以通過按Ctrl+C來停止它們。 為了造福那些不喜歡命令行和配置文件的朋友,ATCC (AutoTest Control Center )已經被發明出來了。如果你運行它,比如通過命令ui/menu,將會得到一個用菜單驅動的簡單界面,你可以通過界面選擇測試和profiling工具,浏覽測試結果,還可以通過它來限制范圍,配置它們。 如果你厭煩了AutoTest套件中包含的一系列工具,可以訪問站點http://ltp.sourceforge.net/tooltable.php 。該站點有可以用於linux內核測試的全面的工具清單。 階段三 容錯性測試 你的新內核已經通過了測試的前兩個階段了嗎?現在,可以開始實驗了。那就是,做一些任何一個正常人在普通工作中都不會做的蠢事,因為沒人會知道那些蠢事會導致內核崩潰。那到底需要做些什麼事呢?好的,如果存在一個“標准的”程序的話,那它當然早就被包含在一些測試套件中了。 例如,第三階段可以從拔掉和重插USB設備開始。從理論上講,重插一個USB設置不應該會產生任何事情,至少從用戶的角度看來。如果USB子系統存在bug,連續進行很多次這樣的測試就可能會導致內核崩潰(這個測試如果出現問題,說明了之前未曾有人在類似系統配置下嘗試這個測試)。 接下來,你可以編寫一個腳本,連續讀取/proc目錄中文件的內容,等等。一句話,在這階段,你應該做些普通用戶永遠不會做的事(或者極常少做:為什麼有人會不斷重復地掛載和卸載某個文件系統呢?)