李青 楊曉娟 朱博 張新玲
摘要:Autotest是一個(gè)開源自動(dòng)化測(cè)試框架,能夠大規(guī)模、完全自動(dòng)化地完成Linux底層系統(tǒng)測(cè)試,處理測(cè)試過(guò)程中出現(xiàn)的內(nèi)核錯(cuò)誤、硬件死機(jī)、網(wǎng)絡(luò)故障等。Autotest易于集成現(xiàn)有的內(nèi)核和硬件測(cè)試,便于測(cè)試人員編寫簡(jiǎn)單的測(cè)試用例和加入分析工具進(jìn)行測(cè)試結(jié)果分析。Autotest框架實(shí)現(xiàn)分布式處理大量Linux內(nèi)核測(cè)試,不僅能充分測(cè)試Linux內(nèi)核和硬件的穩(wěn)定性、可靠性和健壯性,還能有效提高測(cè)試效率。
關(guān)鍵詞關(guān)鍵詞:自動(dòng)化測(cè)試;Linux內(nèi)核;分布式;開源框架
DOIDOI:10.11907/rjdk.161123
中圖分類號(hào):TP306文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào)文章編號(hào):16727800(2016)007001403
隨著軟件行業(yè)的日益成熟,軟件自動(dòng)化測(cè)試成為保障軟件質(zhì)量、加速軟件開發(fā)的重要手段?,F(xiàn)存的自動(dòng)化測(cè)試框架主要是針對(duì)上層軟件的測(cè)試,被測(cè)對(duì)象與底層平臺(tái)分離,需假設(shè)底層平臺(tái)穩(wěn)定可靠。而當(dāng)?shù)讓悠脚_(tái)本身成為被測(cè)對(duì)象時(shí),以上假設(shè)將不成立。目前針對(duì)底層系統(tǒng)的自動(dòng)化測(cè)試技術(shù)還不成熟。因此,內(nèi)核測(cè)試一般采用人工方式,測(cè)試效率較低。
Autotest是完全自動(dòng)化開源測(cè)試框架,針對(duì)包括內(nèi)核和硬件的底層系統(tǒng)進(jìn)行測(cè)試,提供終端到終端的自動(dòng)化功能和性能測(cè)試,使測(cè)試者能夠在不了解內(nèi)部框架的情況下,簡(jiǎn)單進(jìn)行基本測(cè)試和集成測(cè)試。Autotest設(shè)計(jì)之初是為了解決開源的Linux系統(tǒng)測(cè)試不足的需求,隨著功能的不斷拓展,Autotest能夠執(zhí)行許多不同的測(cè)試,增加新的結(jié)果分析工具,集成已存在的測(cè)試框架,展現(xiàn)了強(qiáng)大的包容性、擴(kuò)展性和易用性。
1幾種測(cè)試框架介紹
1.1AutoBench
IBM Autobench是針對(duì)Linux系統(tǒng)的開源測(cè)試框架,基于httperf的Perl腳本編寫而成,構(gòu)建和引導(dǎo)測(cè)試腳本運(yùn)行。通過(guò)該框架,用戶能夠便捷地設(shè)置測(cè)試用例的執(zhí)行環(huán)境和參數(shù),并行執(zhí)行測(cè)試。但是,該框架的測(cè)試控制機(jī)制和錯(cuò)誤處理機(jī)制不夠健全,擴(kuò)展性和維護(hù)性較差,不利于用戶二次開發(fā)。
1.2Linux Test Project
Linux Test Project(LTP)是目前較為流行的Linux功能測(cè)試和性能測(cè)試框架,主要用來(lái)測(cè)試Linux內(nèi)核基本特性。它提供測(cè)試套件,用戶能夠驗(yàn)證Linux的可靠性、耐用性和穩(wěn)定性,亦可針對(duì)不同的測(cè)試目的和LTP中的接口函數(shù)進(jìn)一步開發(fā)新測(cè)試用例。但是,它缺乏對(duì)測(cè)試結(jié)果的分析以及對(duì)日志的解析工作,本質(zhì)僅是多個(gè)測(cè)試的集合,因此LTP并不能作為通用和完全自動(dòng)化測(cè)試內(nèi)核的框架。
1.3Xentest
Xentest是一個(gè)專門針對(duì)Xen虛擬化測(cè)試的自動(dòng)化測(cè)試框架,通過(guò)在Xen上運(yùn)行Linux下的標(biāo)準(zhǔn)測(cè)試套件對(duì)底層虛擬化進(jìn)行測(cè)試。但Xentest只能緊密圍繞Xen,不能成為內(nèi)核或硬件測(cè)試的通用框架。
1.4Crackerjack
CrackerJack是一個(gè)完整的內(nèi)核自動(dòng)化測(cè)試框架,主要目標(biāo)是通過(guò)回歸測(cè)試尋找不同內(nèi)核版本間不相容的API。它是一個(gè)很有價(jià)值的測(cè)試工具,但是功能太過(guò)狹隘。
1.5其它工具
Linux自動(dòng)化測(cè)試框架研究逐漸深入。張達(dá)運(yùn)等提出一種基于Lua的Linux內(nèi)核測(cè)試工具,降低了Linux內(nèi)核及驅(qū)動(dòng)接口測(cè)試的編程難度。韓濤等設(shè)計(jì)一種Linux下自動(dòng)化測(cè)試執(zhí)行管理工具,通過(guò)對(duì)測(cè)試過(guò)程和測(cè)試資源進(jìn)行管理,提高了測(cè)試效率。
2Autotest框架研究
2.1總體架構(gòu)
Autotest采用分層結(jié)構(gòu)以滿足不同規(guī)模集群的測(cè)試需求。Autotest框架從上到下主要分為4層,如圖1所示。
(1)用戶接口:包括Web接口、命令行接口和DJANGO。作用是便于用戶與Autotest交互,包括管理作業(yè)、管理Client主機(jī)、查看結(jié)果等。
(3)Serve端:包括調(diào)度數(shù)據(jù)庫(kù)和AutoServ服務(wù)。主要任務(wù)是分配和調(diào)度測(cè)試作業(yè)執(zhí)行。調(diào)度數(shù)據(jù)庫(kù)用于選擇要執(zhí)行的作業(yè),開啟Autoserv進(jìn)程;Autoserv用于管理Client中運(yùn)行的作業(yè)、檢查Client工作狀態(tài)、修復(fù)失效的Client節(jié)點(diǎn)、管理作業(yè)的執(zhí)行情況等。
(4)Client端:實(shí)際執(zhí)行測(cè)試。執(zhí)行單個(gè)測(cè)試任務(wù)或者作為集群中的一個(gè)測(cè)試節(jié)點(diǎn)執(zhí)行測(cè)試。
Autotest框架工作流程如圖2所示。測(cè)試Linux系統(tǒng)發(fā)布新版本,首先將測(cè)試任務(wù)導(dǎo)入AutoServ測(cè)試作業(yè)隊(duì)列中;AutoServ負(fù)責(zé)將測(cè)試任務(wù)下達(dá)到Client端,在Client端安裝測(cè)試環(huán)境,如Linux新版本等,并執(zhí)行測(cè)試任務(wù);測(cè)試結(jié)束后將結(jié)果發(fā)送到結(jié)果分析工具中分析,如存在缺陷則為系統(tǒng)打補(bǔ)丁。整個(gè)過(guò)程中Client端作為Autotest系統(tǒng)的最底層,在單個(gè)機(jī)器上運(yùn)行簡(jiǎn)單的測(cè)試。Server端作為指揮中心,自動(dòng)安裝和執(zhí)行客戶端,協(xié)調(diào)多機(jī)測(cè)試。
2.2Autotest Client
Client端主要用于測(cè)試本地Linux系統(tǒng)內(nèi)核,包含多種常見的Linux內(nèi)核測(cè)試用例,用戶可直接使用這些測(cè)試用例,亦可進(jìn)行二次開發(fā)或者重新創(chuàng)建測(cè)試用例。Client端采用Python編寫而成,提供C語(yǔ)言的編譯和執(zhí)行工具,使得每個(gè)測(cè)試用例均可與額外的C語(yǔ)言編寫資源捆綁,易于集成已實(shí)現(xiàn)的測(cè)試工具。Autotest框架提供了標(biāo)準(zhǔn)化接口,在Client端編寫測(cè)試用例時(shí),均能調(diào)用該框架中的接口實(shí)現(xiàn)功能,例如作業(yè)控制、錯(cuò)誤處理機(jī)制、結(jié)果收集和分析機(jī)制等,用戶無(wú)需手動(dòng)定義這些機(jī)制。
Client端僅為測(cè)試單個(gè)計(jì)算機(jī)Linux底層系統(tǒng)提供基礎(chǔ)功能。以往測(cè)試不同硬件配置下的內(nèi)核,要在多臺(tái)物理設(shè)備上安裝Client端,手動(dòng)執(zhí)行測(cè)試并收集分散在不同物理設(shè)備中的測(cè)試結(jié)果,這對(duì)于大規(guī)模計(jì)算機(jī)集群測(cè)試十分復(fù)雜且低效。為解決此問(wèn)題,Autotest的Server端應(yīng)運(yùn)而生。Server端圍繞Client端設(shè)計(jì)一個(gè)單獨(dú)的層。AutoServ進(jìn)程通過(guò)SSH遠(yuǎn)程連接被測(cè)對(duì)象,自動(dòng)安裝Autotest Client端執(zhí)行作業(yè),并將結(jié)果從被測(cè)機(jī)返回。用戶可以任意設(shè)置被測(cè)對(duì)象的數(shù)量,同時(shí)將結(jié)果收集到Server端分析。
Server端提供了恢復(fù)失敗測(cè)試系統(tǒng)機(jī)制。AutoServ通過(guò)監(jiān)聽串行控制臺(tái)、網(wǎng)絡(luò)控制臺(tái)和系統(tǒng)日志的輸出,與外接服務(wù)相互作用,收集被測(cè)機(jī)的故障信息。最壞的情況下,AutoServ進(jìn)程可以記錄失敗作業(yè)運(yùn)行的測(cè)試和發(fā)生故障的測(cè)試機(jī)最后的已知狀態(tài)。在被測(cè)機(jī)出現(xiàn)故障導(dǎo)致系統(tǒng)崩潰時(shí),AutoServ首先嘗試把機(jī)器返回到已知的良好狀態(tài),然后對(duì)被測(cè)機(jī)重新安裝。最后,將已修復(fù)的故障機(jī)重置到具有最小的人為干預(yù)的工作狀態(tài)。
2.4前端與調(diào)度器
Autoserv作為一個(gè)獨(dú)立的應(yīng)用程序,不能滿足擴(kuò)展到數(shù)千個(gè)測(cè)試機(jī)和實(shí)現(xiàn)共享機(jī)器池有效利用的要求。為了滿足這些需求,Autotest框架將Autoserv頂層封裝為共享服務(wù),用戶通過(guò)一個(gè)基于Web或基于命令行的界面,與中央服務(wù)器實(shí)例交互,而不是直接執(zhí)行Client端或Server端。
前端是一個(gè)Web應(yīng)用程序調(diào)度測(cè)試,監(jiān)控執(zhí)行中的測(cè)試并管理測(cè)試機(jī)器。調(diào)度器是在AutoServ運(yùn)行的一個(gè)進(jìn)程,其目的是為了執(zhí)行和監(jiān)控Autoserv進(jìn)程上運(yùn)行的后臺(tái)程序。調(diào)度器連續(xù)匹配可用的機(jī)器和預(yù)定的測(cè)試作業(yè),開啟Autoserv進(jìn)程執(zhí)行這些作業(yè),并監(jiān)視流程完成。在整個(gè)執(zhí)行過(guò)程中,更新數(shù)據(jù)庫(kù)中每個(gè)作業(yè)的狀態(tài),跟蹤作業(yè)進(jìn)度。完成后,調(diào)度器調(diào)用解析器將Autoserv的結(jié)果記錄到測(cè)試結(jié)果數(shù)據(jù)庫(kù)。調(diào)度器與前端通過(guò)該數(shù)據(jù)庫(kù)交互,執(zhí)行已計(jì)劃的測(cè)試作業(yè)。最后,用戶進(jìn)行結(jié)果分析。
當(dāng)測(cè)試規(guī)模擴(kuò)展到成千上萬(wàn)臺(tái)機(jī)器時(shí),自動(dòng)化測(cè)試平臺(tái)的健康管理變得至關(guān)重要。調(diào)度器啟動(dòng)特殊Autoserv流程,在每次作業(yè)前檢查機(jī)器運(yùn)行狀況,在數(shù)據(jù)庫(kù)中標(biāo)記不能被修復(fù)的機(jī)器。此外,調(diào)度器定期復(fù)檢已知宕機(jī)的機(jī)器,捕捉可能發(fā)生的任何手動(dòng)修復(fù)。所有Autoserv進(jìn)程如果在一個(gè)Server端上運(yùn)行,性能會(huì)嚴(yán)重下降。調(diào)度器支持對(duì)正在運(yùn)行的進(jìn)程全局限制,以避免整個(gè)系統(tǒng)停頓。
Autotest可以自動(dòng)生成控制文件運(yùn)行選定的測(cè)試,通過(guò)前端Web頁(yè)面選擇測(cè)試用例,指定內(nèi)核安裝和選擇有效的分析工具,從而使Autotest輕松運(yùn)行比較復(fù)雜的測(cè)試,而不需要投入很多精力編寫控制文件。
3實(shí)驗(yàn)
3.1測(cè)試方法與背景
實(shí)驗(yàn)平臺(tái)由1臺(tái)服務(wù)器及20臺(tái)常規(guī)計(jì)算機(jī)搭建而成。Serve端主機(jī)使用浪潮英信SA5212L型服務(wù)器,Client端使用浪潮VITE2230型計(jì)算機(jī),詳細(xì)配置如表1所示。
3.2測(cè)試結(jié)果
在不同規(guī)模的計(jì)算機(jī)集群上測(cè)試每個(gè)計(jì)算機(jī)內(nèi)存讀寫速率,圖3為通過(guò)Serve端啟動(dòng)20個(gè)Client同時(shí)進(jìn)行內(nèi)存讀寫時(shí),每個(gè)計(jì)算機(jī)的平均內(nèi)存讀寫速率,同時(shí)啟動(dòng)20個(gè)Client端執(zhí)行完測(cè)試所需時(shí)間結(jié)果,如圖4所示。顯然,Autotest通過(guò)Serve端同時(shí)啟動(dòng)大型集群上的Client端進(jìn)行測(cè)試和在單個(gè)計(jì)算機(jī)上測(cè)試所消耗的時(shí)間相近。而逐個(gè)執(zhí)行相同數(shù)量計(jì)算機(jī)節(jié)點(diǎn)上的單機(jī)測(cè)試,時(shí)間消耗遠(yuǎn)高于使用Autotest框架進(jìn)行測(cè)試。
4結(jié)語(yǔ)
Autotest強(qiáng)大、穩(wěn)健,入門容易,便于理解和維護(hù)。Autotest適用于各種測(cè)試規(guī)模,分布式測(cè)試性能穩(wěn)定可靠、效率高。同時(shí),Autotest測(cè)試框架易于集成已有的測(cè)試工具和測(cè)試結(jié)果分析工具,方便測(cè)試使用和開發(fā)測(cè)試用例。開源的Autotest正吸引越來(lái)越多的人加入框架的開發(fā)與維護(hù),使之成為更加完善和強(qiáng)大的自動(dòng)化測(cè)試工具。
參考文獻(xiàn)參考文獻(xiàn):
KAMALESH BIBULAL,BALBIR SINGH.Keeping the Linux kernel honest[J].In Linux Symposium,2008(1):1929.
MARTIN BLIGH,ANDY P WHITCROFT.Fully automated testing of the Linux kernel[J].In Linux Symposium,2006(1):113125.
Linux test project\[EB/OL\].http://ltp.sourceforge.net.
SUBRATA MODAK,BALBIR SINGH.Building a robust Linux kernel piggybacking the Linux test project[J].In Linux Symposium,2008(2):91100.
朱巖.應(yīng)用Linux Test Project組件測(cè)試Linux內(nèi)核應(yīng)用研究[J].中國(guó)測(cè)試,2009,35(5):5558.
DAVID BERRERA,LI GE,STEPHANIE GLASS,et al.Testing the Xen hypervisor and Linux virtual machines[J].In Linux Symposium,2005(1):271288.
HIRO YOSHIOKA.Regression test framework and kernel execution coverage[J].In Linux Symposium,2007(2):285296.
張達(dá)運(yùn),汪漢新.基于Lua的Linux內(nèi)核測(cè)試工具開發(fā)[J].計(jì)算機(jī)工程,2011,37(11):283284.
韓濤,高靜.Linux下自動(dòng)化測(cè)試執(zhí)行管理工具的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19(4):112115.
Autotest\[EB/OL\].https://github.com/autotest
責(zé)任編輯(責(zé)任編輯:杜能鋼)