代云華,余立建,廖新良
(1.西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都 610031; 2.電子科技大學(xué) 軟件學(xué)院,成都 611731)
數(shù)據(jù)通信技術(shù)的快速發(fā)展對自動化測試技術(shù)提出了更高的要求,在保障自動化測試高可靠性的前提下,高效率的自動化測試成了近年來自動化測試發(fā)展的主要瓶頸[1]。目前一般的自動化測試系統(tǒng)[2]包含任務(wù)管理模塊、任務(wù)調(diào)度模塊、用例執(zhí)行模塊、設(shè)備管理模塊和日志服務(wù)器模塊,如圖1。任務(wù)管理模塊主要提供對測試任務(wù)的添加、刪除、查看等管理;任務(wù)調(diào)度模塊主要是按照一定的調(diào)度算法對提交的各測試任務(wù)或測試任務(wù)中的各測試用例進(jìn)行排序,使測試任務(wù)或測試用例按照排好的順序先后執(zhí)行;用例執(zhí)行模塊主要是運(yùn)行調(diào)度后測試任務(wù)中的測試用例;設(shè)備管理模塊主要是提供對設(shè)備的添加、刪除、查看等功能;日志服務(wù)器模塊主要是將測試過程產(chǎn)生的日志及測試結(jié)果發(fā)送給相關(guān)的測試人員??梢钥闯?,自動化測試效率的提高主要集中在任務(wù)調(diào)度模塊。
圖1 自動化測試系統(tǒng)結(jié)構(gòu)圖
為了提高自動化測試的效率,大部分公司的自動化測試系統(tǒng)都支持并行運(yùn)行的多個(gè)測試任務(wù),每個(gè)測試任務(wù)完成一組測試用例,這種方式也稱為基于任務(wù)調(diào)度的自動化測試[3],如圖2。與以往手工測試或串行的自動化測試方法相比,測試效率提高了許多倍。這種并行運(yùn)行多個(gè)測試任務(wù)的方式有以下特點(diǎn):
圖2 基于任務(wù)調(diào)度的自動化測試
(1)基于優(yōu)先級的方式調(diào)度任務(wù)。將需要運(yùn)行的任務(wù)按照之前自定義的任務(wù)優(yōu)先級來排序,優(yōu)先級相同的任務(wù)再按提交任務(wù)的時(shí)間先后來排序。優(yōu)先級越高,空閑設(shè)備若滿足該測試任務(wù)的要求就先執(zhí)行該測試任務(wù),若空閑設(shè)備不滿足,則讓低優(yōu)先級的任務(wù)先運(yùn)行起來,這樣可以提高設(shè)備的利用率。同時(shí)一旦平臺中設(shè)備滿足測試任務(wù)的需求,測試任務(wù)便可運(yùn)行,這樣多個(gè)任務(wù)可以并行獨(dú)立的運(yùn)行。
(2)測試設(shè)備的最大化占用。在測試任務(wù)運(yùn)行之前,需要給該測試任務(wù)分配所需的測試設(shè)備,對所需測試設(shè)備的選取采用讀取該測試任務(wù)包含的所有測試拓?fù)渲袑υO(shè)備的需求,包括設(shè)備類型、設(shè)備的接口類型、設(shè)備連接數(shù)等信息,統(tǒng)計(jì)出該測試任務(wù)對測試設(shè)備的最大需求數(shù)量,選出符合要求的設(shè)備。
(3)測試用例串行運(yùn)行。測試任務(wù)中包含的所有測試用例按照預(yù)先編寫的測試套件中的先后順序依次執(zhí)行,每運(yùn)行一個(gè)測試用例,都需要根據(jù)該測試用例所需的測試設(shè)備從之前任務(wù)所占用的設(shè)備中選出本測試用例所需的測試設(shè)備,然后根據(jù)選出的測試設(shè)備構(gòu)造拓?fù)洵h(huán)境,再執(zhí)行預(yù)先編寫好的本測試用例的測試腳本。
(4)測試設(shè)備的互斥訪問。一臺測試設(shè)備只能被一個(gè)測試任務(wù)占用,不能被多個(gè)測試任務(wù)同時(shí)占用,測試任務(wù)運(yùn)行結(jié)束后能主動釋放占用的測試設(shè)備,供其它測試任務(wù)繼續(xù)使用。
從上述分析可以看出,采用基于任務(wù)調(diào)度的方式,以測試用例為最小的測試腳本單位,每執(zhí)行一個(gè)測試用例都需要重新選擇一次測試設(shè)備,重新構(gòu)造一次拓?fù)?,只有?dāng)一個(gè)測試用例執(zhí)行完時(shí),才能執(zhí)行下一個(gè)測試用例,這樣大大降低了自動化測試的高效性;另外在測試任務(wù)執(zhí)行前,測試設(shè)備的選取是以最大化的占用方式,既節(jié)省了每個(gè)測試用例在整個(gè)平臺中選擇測試設(shè)備所帶來的麻煩,又使得每個(gè)測試用例占用的測試設(shè)備與測試任務(wù)占有的設(shè)備相比通常要少很多,會形成該測試任務(wù)實(shí)際上占用了很多的測試設(shè)備,但大部分時(shí)間卻只用到了其中的少部分,其它因測試設(shè)備不足而無法運(yùn)行起來的測試任務(wù)卻被阻塞了;再者,只有平臺中空閑的設(shè)備滿足了測試任務(wù)最大的設(shè)備需求后,測試任務(wù)才能運(yùn)行,否則一直處于等待狀態(tài),這樣大大降低了設(shè)備的利用率。
在自動化測試系統(tǒng)中,每一個(gè)需要測試的任務(wù)(如一個(gè)協(xié)議vlan)包括許多需要測試的功能點(diǎn),這些功能點(diǎn)即為一個(gè)測試用例,一個(gè)測試用例包含了測試該功能點(diǎn)需要搭建的拓?fù)洵h(huán)境及在該拓?fù)洵h(huán)境下測試該功能點(diǎn)的具體步驟(測試腳本)。因此,一個(gè)測試任務(wù)包含多個(gè)測試用例,每個(gè)測試用例包含一個(gè)拓?fù)?,各測試用例的拓?fù)溆锌赡苁且粯拥?,一般情況下,一個(gè)測試任務(wù)只有幾個(gè)拓?fù)?,即一個(gè)拓?fù)鋵?yīng)多個(gè)測試用例,對于拓?fù)湎嗤臏y試用例,需要的測試設(shè)備是相同的,因此,可以將它們歸為一類,在運(yùn)行時(shí)只用分配一次設(shè)備,構(gòu)造一次拓?fù)浼纯伞?/p>
這樣,對于一個(gè)測試任務(wù),就可以以拓?fù)錇榛締挝粊韯澐譁y試用例,即基于拓?fù)湔{(diào)度的方式,如圖3。這種方式有以下特點(diǎn):
圖3 基于拓?fù)湔{(diào)度的自動化測試
(1)各測試任務(wù)并行運(yùn)行相互獨(dú)立,延續(xù)了基于任務(wù)調(diào)度方式的思想,采用優(yōu)先級方式調(diào)度測試任務(wù)。
(2)各測試拓?fù)溟g的運(yùn)行相互獨(dú)立,即各拓?fù)溥x擇設(shè)備、構(gòu)造拓?fù)洹⑦\(yùn)行腳本等都是互不干擾的;測試拓?fù)湟灿袃?yōu)先級關(guān)系,各測試拓?fù)浒凑兆远x的優(yōu)先級排序,優(yōu)先級相同的按照測試拓?fù)滟Y源需求高低來排序,資源需求相同就任選其中的一個(gè)測試拓?fù)洹?/p>
(3)在一個(gè)測試拓?fù)渲?,先選擇本測試拓?fù)渌璧臏y試設(shè)備,根據(jù)選出的測試設(shè)備構(gòu)造拓?fù)洌缓筮\(yùn)行各測試用例的腳本。一個(gè)測試拓?fù)浒鄠€(gè)測試用例,采用串行的方式運(yùn)行,無需重新選擇測試設(shè)備和構(gòu)造拓?fù)洌苯友赜蒙蟼€(gè)測試用例搭建的拓?fù)洵h(huán)境。
(4) 測試任務(wù)的狀態(tài)由所包括的各拓?fù)涞臓顟B(tài)決定,只有當(dāng)測試任務(wù)中的所有拓?fù)渌臏y試用例都執(zhí)行完后,測試任務(wù)才算執(zhí)行完。
與基于任務(wù)調(diào)度方式相比,基于拓?fù)湔{(diào)度方式具有以下優(yōu)點(diǎn):
(1)在測試設(shè)備滿足的情況下,一個(gè)測試任務(wù)中的多個(gè)測試用例并行運(yùn)行,大大減少了該測試任務(wù)的總體測試時(shí)間。
(2)從為每個(gè)測試用例分配設(shè)備、構(gòu)造拓?fù)涞綖椴煌耐負(fù)浞峙湓O(shè)備、構(gòu)造拓?fù)?,?jié)約了系統(tǒng)為測試腳本準(zhǔn)備測試拓?fù)洵h(huán)境的時(shí)間。
(3)只要平臺中空閑的測試設(shè)備滿足測試任務(wù)中的某個(gè)測試拓?fù)涞脑O(shè)備需求,測試任務(wù)便可運(yùn)行起來,而基于任務(wù)調(diào)度方式只有當(dāng)平臺中空閑的測試設(shè)備滿足測試任務(wù)的最大設(shè)備需求時(shí),測試任務(wù)才會運(yùn)行,否則一直處于等待狀態(tài)。相比之下,基于拓?fù)湔{(diào)度的方式大大提高了設(shè)備的利用率。
(4)一般情況下,自動化測試非常容易受環(huán)境的影響,含多個(gè)測試用例的測試任務(wù)經(jīng)常不能一次性全完成,采用原來串行運(yùn)行測試用例的方式,由于測試時(shí)間過長,受環(huán)境影響的概率相應(yīng)增加,采用基于拓?fù)湔{(diào)度的方式,由于測試時(shí)間相對更短,也減少了受環(huán)境影響的概率。
根據(jù)以上對拓?fù)湔{(diào)度方式的分析,本文在圖1的基礎(chǔ)上將任務(wù)調(diào)度模塊進(jìn)行細(xì)化,分成了任務(wù)調(diào)度模塊、拓?fù)湔{(diào)度模塊和任務(wù)狀態(tài)更新模塊,如圖4。任務(wù)調(diào)度模塊的主要功能是在測試任務(wù)隊(duì)列中根據(jù)測試任務(wù)的優(yōu)先級選出一個(gè)測試任務(wù);拓?fù)湔{(diào)度模塊的主要功能是為任務(wù)調(diào)度模塊選出的測試任務(wù)所包含的每個(gè)測試拓?fù)?,根?jù)優(yōu)先級分配測試設(shè)備;任務(wù)狀態(tài)更新模塊主要功能是根據(jù)測試任務(wù)中各測試拓?fù)洳粩喔淖兊倪\(yùn)行狀態(tài),更新測試任務(wù)的狀態(tài)。
圖4 任務(wù)調(diào)度模塊的設(shè)計(jì)
本文的自動化測試系統(tǒng)采用了目前非常成熟、流行的TCL[4]開發(fā)語言在linux系統(tǒng)上開發(fā),使用SlickEdit開發(fā)工具,所有測試參數(shù)使用XML[5]語言,使系統(tǒng)具有協(xié)議描述能力強(qiáng)、靈活性好、移植性好的特點(diǎn),充分保證了通用性和持續(xù)性。
利用拓?fù)湔{(diào)度方式實(shí)現(xiàn)的自動化測試系統(tǒng)在自動化測試平臺上測試各模塊,在平臺測試設(shè)備充分的情況下,測試結(jié)果如表2。與基于任務(wù)調(diào)度方式的測試結(jié)果相比,節(jié)省了測試時(shí)間,提高了自動化測試的效率。
表2 各模塊測試時(shí)間統(tǒng)計(jì)
本文給出了一種基于拓?fù)湔{(diào)度方式設(shè)計(jì)自動化測試系統(tǒng)的方法,該方法應(yīng)用到實(shí)際的自動化測試系統(tǒng)中,大大減少了測試任務(wù)的總體運(yùn)行時(shí)間,使自動化測試平臺中的測試設(shè)備得到了充分的利用,降低了測試任務(wù)受環(huán)境的影響,提高了自動化測試效率和可靠性。
[1]郭偉斌,郭錫坤. 自動化測試的研究和探討[J].電腦開發(fā)與應(yīng)用,2008,21(12):10-12.
[2]柳 勝. 軟件自動化測試框架設(shè)計(jì)與實(shí)踐[M]. 北京:人民郵電出版社,2009.
[3]侯亞榮,張書杰,李 健,等. 一種實(shí)時(shí)系統(tǒng)任務(wù)調(diào)度方法[P]. 中國專利:200710176704. 2008-03-19.
[4]WelchBrent B. The complete Tcl/Tk training course[M]. 北京:電子工業(yè)出版社,2001.
[5]DalviDinar,GrayJoe,英 宇. NET XML高級編程[M].北京:清華大學(xué)出版社,2002.