陳征
(中國(guó)電子科學(xué)研究院,北京石景山,100041)
消息中間件能夠提供跨網(wǎng)絡(luò)、硬件和操作系統(tǒng)的透明的應(yīng)用服務(wù)[2]。它屬于整個(gè)系統(tǒng)中最重要的軟件配置項(xiàng)之一。企業(yè)針對(duì)各項(xiàng)目開發(fā)出了支持在不同操作系統(tǒng)(如Windows、Linux等)上運(yùn)行的消息中間件。針對(duì)該軟件,目前的測(cè)試流程是:測(cè)試人員部署各操作系統(tǒng)上的測(cè)試環(huán)境,然后手工編寫測(cè)試腳本在不同版本上編譯執(zhí)行。當(dāng)前測(cè)試流程產(chǎn)生如下問題:①不同操作系統(tǒng)上的軟件提供的功能重復(fù)性較高,測(cè)試人員需手工在不同平臺(tái)上重復(fù)執(zhí)行相同的測(cè)試,進(jìn)行全面的測(cè)試工作需要較長(zhǎng)時(shí)間和較多的人力資源,在有限的時(shí)間里測(cè)試工作量大,很難保證軟件的質(zhì)量;②該消息中間件在安裝時(shí)需要進(jìn)行復(fù)雜的參數(shù)配置才能啟動(dòng),在環(huán)境準(zhǔn)備上花費(fèi)了大量時(shí)間。
針對(duì)該消息中間件的特點(diǎn),要實(shí)現(xiàn)軟件測(cè)試的自動(dòng)化,需要一個(gè)強(qiáng)大的自動(dòng)化測(cè)試框架作為支撐,而STAF提供了構(gòu)建復(fù)雜分布式測(cè)試環(huán)境的有效解決方案,在安裝了STAF的機(jī)器上可以實(shí)現(xiàn)以下功能:隨時(shí)啟動(dòng)、停止測(cè)試機(jī)上的任一程序,獲得測(cè)試機(jī)的狀態(tài),在測(cè)試機(jī)之間互傳文件,提供不同操作語言API接口,適應(yīng)多種操作系統(tǒng)[3]。結(jié)合STAF的外部服務(wù)STAX,在STAF的基礎(chǔ)上幫助用戶靈活操縱框架實(shí)現(xiàn)測(cè)試用例的分發(fā)、執(zhí)行、部署,使測(cè)試任務(wù)更方便的分發(fā)到相應(yīng)測(cè)試機(jī)去完成測(cè)試用例的執(zhí)行、測(cè)試結(jié)果的收集[4,5]。STAF的開源、跨平臺(tái)、支持多語言并且基于可重用組件的特性[6],使得構(gòu)建消息中間件的自動(dòng)化測(cè)試系統(tǒng)可行。
企業(yè)開發(fā)的消息中間件,主要功能是屏蔽操作系統(tǒng)平臺(tái)的差異性,提供跨網(wǎng)絡(luò)、硬件和操作系統(tǒng)的透明的應(yīng)用服務(wù),根據(jù)提供的統(tǒng)一API接口,實(shí)現(xiàn)上層應(yīng)用的通信、參數(shù)配置等功能。該消息中間件軟件對(duì)不同的操作系統(tǒng)提供統(tǒng)一的調(diào)用接口,格式如下:
調(diào)用接口執(zhí)行失敗時(shí)返回結(jié)果為0,成功是返回結(jié)果為1。如果軟件返回的錯(cuò)誤碼為0,代表無錯(cuò)誤;如果為其他值,則代表相應(yīng)的錯(cuò)誤信息。
該消息中間件具有以下幾個(gè)特點(diǎn):
(1)產(chǎn)品支持多個(gè)版本,對(duì)應(yīng)不同平臺(tái)均有相應(yīng)的軟件發(fā)布版本可供使用,且各軟件版本之間功能重復(fù)性較高;
(2)產(chǎn)品配置、環(huán)境搭建復(fù)雜。
針對(duì)該消息中間件軟件,傳統(tǒng)的測(cè)試流程如圖1所示。首先,測(cè)試人員需要將不同平臺(tái)版本的待測(cè)試消息中間件產(chǎn)品以及測(cè)試腳本從SVN服務(wù)器中下載到相應(yīng)操作系統(tǒng)平臺(tái);第二步,人工部署測(cè)試環(huán)境,包括軟件的安裝配置操作以及測(cè)試腳本的編譯工作;第三步,人工執(zhí)行測(cè)試,包括啟動(dòng)消息中間件軟件,運(yùn)行測(cè)試腳本,記錄測(cè)試結(jié)果;第四步,人工收集并分析測(cè)試結(jié)果,分別在各個(gè)平臺(tái)上使用EXCEL表記錄測(cè)試執(zhí)行情況,并將整理結(jié)果移植Word文檔中完成測(cè)試報(bào)告的編寫。
圖1 消息中間件軟件目前測(cè)試過程
從目前測(cè)試現(xiàn)狀來看,測(cè)試工作仍以手動(dòng)測(cè)試為主,只有少部分執(zhí)行測(cè)試功能是調(diào)用自動(dòng)化測(cè)試腳本執(zhí)行。測(cè)試前期測(cè)試版本的獲取、人工搭建基于不同操作系統(tǒng)平臺(tái)的測(cè)試環(huán)境、安裝配置不同平臺(tái)上相應(yīng)產(chǎn)品以及針對(duì)不同系統(tǒng)版本的測(cè)試腳本進(jìn)行編譯都需要人工參與,耗費(fèi)了測(cè)試人員大量的時(shí)間;另外,不同版本消息中間件提供的功能重復(fù)性較高,測(cè)試人員需要在不同操作系統(tǒng)平臺(tái)上執(zhí)行相同的測(cè)試,工作量很大。尤其是在項(xiàng)目進(jìn)度緊張的情況下,會(huì)耗費(fèi)大量的人力資源。
分析上述現(xiàn)狀的原因,是因?yàn)閷?duì)現(xiàn)有的測(cè)試過程中的測(cè)試資源,包括待測(cè)產(chǎn)品、測(cè)試腳本以及測(cè)試環(huán)境資源缺乏規(guī)范性和組織性。測(cè)試過程以人工操作為主,并沒有合適的框架支撐整個(gè)測(cè)試過程,將一些重復(fù)性高的測(cè)試任務(wù)自動(dòng)化。分析目前測(cè)試活動(dòng)的整個(gè)過程,仍有可改進(jìn)的部分。
以企業(yè)自研的消息中間件為測(cè)試對(duì)象,利用STAF/STAX技術(shù),設(shè)計(jì)一個(gè)自動(dòng)化測(cè)試系統(tǒng)MOMSTAF(Message—oriented Middleware Software Testing Automation Framework,以下簡(jiǎn)稱MOMSTAF),該系統(tǒng)實(shí)現(xiàn)消息中間件軟件的測(cè)試過程自動(dòng)化進(jìn)行,包括制定并部署待測(cè)消息中間件軟件測(cè)試任務(wù)、自動(dòng)執(zhí)行消息中間件軟件測(cè)試用例、自動(dòng)監(jiān)控軟件測(cè)試過程以及自動(dòng)收集并統(tǒng)計(jì)軟件測(cè)試執(zhí)行結(jié)果的功能。
該系統(tǒng)主要考慮以下幾個(gè)方面:
(1)消息中間件軟件測(cè)試全過程的自動(dòng)執(zhí)行
本系統(tǒng)將充分考慮測(cè)試人員在執(zhí)行企業(yè)自研消息中間件軟件測(cè)試過程中的各個(gè)環(huán)節(jié),將日常測(cè)試工作分為以下五個(gè)基本流程:
(a)測(cè)試計(jì)劃階段:完成自研消息中間件軟件測(cè)試任務(wù)的制定,確定測(cè)試范圍,包括選擇要測(cè)試的消息中間件版本、確定待測(cè)版本的操作系統(tǒng)類型、選擇要執(zhí)行的消息中間件測(cè)試項(xiàng);
(b)測(cè)試準(zhǔn)備階段:根據(jù)測(cè)試計(jì)劃階段確定的測(cè)試范圍,完成消息中間件測(cè)試任務(wù)的部署,包括選擇匹配的測(cè)試主機(jī)、啟動(dòng)測(cè)試主機(jī)、下載待測(cè)消息中間件及測(cè)試腳本到測(cè)試主機(jī)、部署待測(cè)軟件、編譯測(cè)試腳本;
(c)測(cè)試執(zhí)行階段:在測(cè)試準(zhǔn)備階段完成之后,在各測(cè)試主機(jī)上執(zhí)行測(cè)試腳本。在測(cè)試用例執(zhí)行過程中,提供人機(jī)界面方便測(cè)試人員實(shí)時(shí)監(jiān)控各測(cè)試主機(jī)的執(zhí)行情況,方便測(cè)試人員掌握測(cè)試執(zhí)行進(jìn)度;
(d)測(cè)試結(jié)果統(tǒng)計(jì)階段:收集各個(gè)測(cè)試主機(jī)的測(cè)試執(zhí)行結(jié)果,給出整個(gè)測(cè)試結(jié)果的統(tǒng)計(jì)信息(統(tǒng)計(jì)出通過與失敗的測(cè)試用例,以及失敗的原因);
(e)測(cè)試環(huán)境清理階段:在測(cè)試用例執(zhí)行完畢并對(duì)測(cè)試結(jié)果做出統(tǒng)計(jì)后,完成測(cè)試環(huán)境的清理,恢復(fù)測(cè)試環(huán)境的初始態(tài)。
(2)測(cè)試任務(wù)部署在虛擬機(jī)中執(zhí)行,節(jié)約測(cè)試資源,簡(jiǎn)化測(cè)試環(huán)境搭建
由于企業(yè)自研的消息中間件適用于多操作系統(tǒng)平臺(tái)(如:Windows、Linux平臺(tái)),為了達(dá)到在硬件資源緊張的情況下,有效節(jié)約測(cè)試資源,滿足自研消息中間件產(chǎn)品在不同操作系統(tǒng)上執(zhí)行測(cè)試的要求。因此在MOMSTAF自動(dòng)化測(cè)試系統(tǒng)的設(shè)計(jì)過程中,需要將消息中間件軟件測(cè)試任務(wù)部署到虛擬機(jī)中執(zhí)行,通過在虛擬機(jī)上執(zhí)行測(cè)試任務(wù),解決測(cè)試人員在測(cè)試消息中間件時(shí)測(cè)試資源不足的問題。另外,將待測(cè)消息中間件需要考慮跨平臺(tái)通信的各種測(cè)試場(chǎng)景,如點(diǎn)對(duì)點(diǎn)通信以及多對(duì)一的通信場(chǎng)景,通過使用虛擬機(jī)有效的簡(jiǎn)化了測(cè)試環(huán)境的搭建。
根據(jù)以上對(duì)MOMSTAF自動(dòng)化測(cè)試系統(tǒng)的業(yè)務(wù)需求分析結(jié)果,提出適用于當(dāng)前被測(cè)軟件自動(dòng)化測(cè)試系統(tǒng)的架構(gòu)設(shè)計(jì)方案,該系統(tǒng)總體架構(gòu)設(shè)計(jì)劃分為三層,從上至下依次為表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)層,這種架構(gòu)明確了責(zé)任的劃分,使系統(tǒng)更加易于維護(hù)和擴(kuò)展。 MOMSTAF系統(tǒng)體系架構(gòu)圖如圖2所示。
表示層位于最上層,該層向測(cè)試人員提供友好的人機(jī)交互界面,主要為測(cè)試人員提供測(cè)試的操作界面,接收測(cè)試人員輸入的操作,監(jiān)控自動(dòng)化測(cè)試執(zhí)行的進(jìn)度,方便測(cè)試人員使用MOMSTAF自動(dòng)化測(cè)試系統(tǒng)執(zhí)行自研消息中間件的測(cè)試工作。
圖2 自動(dòng)化測(cè)試系統(tǒng)架構(gòu)圖
業(yè)務(wù)邏輯層位于表示層和數(shù)據(jù)層之間,包括測(cè)試任務(wù)管理模塊、監(jiān)聽管理模塊、測(cè)試用例管理模塊、結(jié)果統(tǒng)計(jì)模塊、虛擬機(jī)管理模塊和日志管理模塊。這些模塊實(shí)現(xiàn)了MOMSTAF自動(dòng)化測(cè)試系統(tǒng)的整個(gè)自動(dòng)化測(cè)試過程。在執(zhí)行自動(dòng)化測(cè)試的過程中,STAF自動(dòng)化測(cè)試框架提供測(cè)試服務(wù),并由其外部執(zhí)行引擎STAX統(tǒng)一調(diào)度整個(gè)自動(dòng)化測(cè)試過程。
圖3 自動(dòng)化測(cè)試系統(tǒng)功能模塊圖
數(shù)據(jù)層主要用來存放自研消息中間件的測(cè)試任務(wù)、測(cè)試結(jié)果以及自動(dòng)化測(cè)試系統(tǒng)運(yùn)行時(shí)的日志等信息。
經(jīng)分析,初步將MOMSTAF自動(dòng)化測(cè)試系統(tǒng)分為測(cè)試任務(wù)管理模塊、監(jiān)聽管理模塊、測(cè)試用例管理模塊、結(jié)果統(tǒng)計(jì)模塊、虛擬機(jī)管理模塊、日志管理模塊六個(gè)部分,這些模塊整合了自動(dòng)化測(cè)試的整個(gè)過程:制定測(cè)試任務(wù)、檢查測(cè)試任務(wù)、分發(fā)測(cè)試任務(wù)、部署測(cè)試任務(wù)、執(zhí)行測(cè)試任務(wù)、監(jiān)聽測(cè)試過程、收集并總結(jié)測(cè)試結(jié)果等。具體的功能模塊劃分如圖3所示。
測(cè)試任務(wù)管理模塊主要實(shí)現(xiàn)在自研消息中間件軟件自動(dòng)化測(cè)試過程中對(duì)測(cè)試任務(wù)的管理。包括以下幾部分:第一,測(cè)試任務(wù)制定,確定要執(zhí)行的測(cè)試任務(wù),包括選擇被測(cè)軟件版本、確定待測(cè)版本的操作系統(tǒng)類型、選擇要執(zhí)行的測(cè)試用例。第二,測(cè)試任務(wù)分發(fā),該功能實(shí)現(xiàn)將制定好并完成檢查的測(cè)試任務(wù)分發(fā)到相應(yīng)測(cè)試主機(jī)(測(cè)試任務(wù)的檢查由監(jiān)聽管理模塊中的任務(wù)狀態(tài)監(jiān)聽實(shí)現(xiàn),檢查過程見圖5),等待部署測(cè)試任務(wù)。第三,測(cè)試任務(wù)部署,主要實(shí)現(xiàn)在收到測(cè)試調(diào)度機(jī)的測(cè)試部署的命令后,分別從產(chǎn)品服務(wù)器和測(cè)試服務(wù)器中下載相應(yīng)待測(cè)消息中間件以及測(cè)試腳本,并完成軟件的安裝以及測(cè)試腳本的編譯。第四,測(cè)試任務(wù)執(zhí)行,接收測(cè)試調(diào)度機(jī)的測(cè)試執(zhí)行命令后,開始進(jìn)行自動(dòng)化測(cè)試,在測(cè)試執(zhí)行過程中,向測(cè)試主機(jī)反饋測(cè)試進(jìn)度情況。測(cè)試任務(wù)管理的時(shí)序圖如圖4所示。
圖4 測(cè)試任務(wù)管理時(shí)序圖
監(jiān)聽管理模塊主要實(shí)現(xiàn)MOMSTAF自動(dòng)化測(cè)試系統(tǒng)在執(zhí)行自研消息中間件的整個(gè)自動(dòng)化測(cè)試過程中的監(jiān)聽管理。實(shí)現(xiàn)的功能包括:第一,啟動(dòng)監(jiān)聽,開啟監(jiān)聽管理。第二,關(guān)閉監(jiān)聽,結(jié)束自動(dòng)化測(cè)試任務(wù)后,關(guān)閉監(jiān)聽管理。第三,任務(wù)狀態(tài)監(jiān)聽,主要實(shí)現(xiàn)對(duì)測(cè)試任務(wù)中的待測(cè)版本以及相應(yīng)虛擬機(jī)的狀態(tài)監(jiān)聽,監(jiān)聽待測(cè)版本在代碼服務(wù)器中是否存在、虛擬機(jī)的狀態(tài)是否為未被占用的狀態(tài),任務(wù)狀態(tài)監(jiān)聽活動(dòng)圖如圖5所示。第四,測(cè)試進(jìn)度監(jiān)聽,主要實(shí)現(xiàn)在測(cè)試的過程中,實(shí)時(shí)監(jiān)聽各個(gè)測(cè)試主機(jī)的測(cè)試執(zhí)行進(jìn)度。第五,異常處理監(jiān)聽,提供異常處理監(jiān)聽機(jī)制,監(jiān)聽并定位系統(tǒng)錯(cuò)誤位置信息。
圖5 任務(wù)狀態(tài)監(jiān)聽活動(dòng)圖
圖6 測(cè)試結(jié)果判定流程圖
測(cè)試用例管理模塊主要實(shí)現(xiàn)對(duì)自研消息中間件軟件測(cè)試用例的管理,包括對(duì)消息中間件軟件測(cè)試用例的增加、刪除、修改、查詢操作,同時(shí)為了保證測(cè)試服務(wù)器中的測(cè)試腳本與測(cè)試用例的一致性,還應(yīng)實(shí)現(xiàn)測(cè)試用例的同步功能,即MOMSTAF自動(dòng)化測(cè)試系統(tǒng)后臺(tái)定期對(duì)測(cè)試用例與測(cè)試腳本進(jìn)行同步更新。
測(cè)試結(jié)果的統(tǒng)計(jì)模塊,實(shí)現(xiàn)的功能包括:測(cè)試結(jié)果統(tǒng)計(jì)、測(cè)試結(jié)果分析、測(cè)試報(bào)告生成。測(cè)試結(jié)果統(tǒng)計(jì)功能主要用于在執(zhí)行被測(cè)軟件測(cè)試結(jié)束時(shí),收集并統(tǒng)計(jì)各測(cè)試主機(jī)的最終執(zhí)行情況,統(tǒng)計(jì)通過與不通過的測(cè)試用例。測(cè)試結(jié)果分析用于對(duì)統(tǒng)計(jì)出的測(cè)試結(jié)果進(jìn)行分析,分析的內(nèi)容包括:各版本消息中間件軟件測(cè)試用例的執(zhí)行通過率與不通過率以及各測(cè)試項(xiàng)執(zhí)行情況柱狀圖。測(cè)試報(bào)告生成,根據(jù)測(cè)試結(jié)果的統(tǒng)計(jì)與分析,生成測(cè)試報(bào)告,同時(shí)實(shí)現(xiàn)將測(cè)試報(bào)告導(dǎo)出以及上傳至服務(wù)器的功能,方便項(xiàng)目相關(guān)人員傳閱以及用于項(xiàng)目數(shù)據(jù)積累。
測(cè)試結(jié)果統(tǒng)計(jì)模塊中判斷測(cè)試用例通過與否的流程圖如圖6所示。首先,測(cè)試腳本執(zhí)行消息中間件API接口函數(shù),測(cè)試腳本執(zhí)行該函數(shù)后,返回接口函數(shù)執(zhí)行結(jié)果以及錯(cuò)誤碼。然后,將接口函數(shù)返回值、錯(cuò)誤碼和測(cè)試腳本調(diào)用該接口函數(shù)時(shí)傳入的不同參數(shù)寫入實(shí)際結(jié)果執(zhí)行文件,寫入順序與預(yù)期結(jié)果文件一致,預(yù)期結(jié)果文件中的內(nèi)容以“接口函數(shù)名、輸入?yún)?shù)、接口函數(shù)返回值、錯(cuò)誤碼”排序,該文件放在當(dāng)前測(cè)試腳本目錄中。最后,將實(shí)際結(jié)果執(zhí)行文件與預(yù)期結(jié)果文件進(jìn)行對(duì)比,如果內(nèi)容一致,則判斷該測(cè)試用例通過,否則,判斷為不通過。
虛擬機(jī)管理模塊主要實(shí)現(xiàn)對(duì)測(cè)試環(huán)境中虛擬機(jī)的管理,主要實(shí)現(xiàn)對(duì)各虛擬機(jī)的檢查、啟動(dòng)、初始化操作。其中,VM虛擬機(jī)檢查功能實(shí)現(xiàn)在接收到監(jiān)聽管理模塊中的任務(wù)狀態(tài)監(jiān)聽消息后,對(duì)VM虛擬機(jī)當(dāng)前的狀態(tài)是否被占用進(jìn)行檢查。如果未被占用則啟動(dòng)虛擬機(jī),否則向測(cè)試調(diào)度機(jī)返回當(dāng)前被占用的信息。VM虛擬機(jī)初始化功能主要實(shí)現(xiàn)在消息中間件軟件測(cè)試任務(wù)執(zhí)行完畢后,執(zhí)行環(huán)境的清理,恢復(fù)環(huán)境初始化狀態(tài),完成初始化操作后關(guān)閉虛擬機(jī)。
圖7 自動(dòng)化測(cè)試系統(tǒng)網(wǎng)絡(luò)拓?fù)鋱D
日志管理模塊主要完成對(duì)消息中間件軟件自動(dòng)化測(cè)試系統(tǒng)運(yùn)行時(shí)的日志信息進(jìn)行記錄。
MOMSTAF自動(dòng)化測(cè)試系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)主要由測(cè)試調(diào)度機(jī)、測(cè)試機(jī)群以及文件服務(wù)器組成。測(cè)試調(diào)度機(jī)主要完成自研消息中間件軟件自動(dòng)化測(cè)試流程的控制與管理。測(cè)試機(jī)群由不同操作系統(tǒng)平臺(tái)的測(cè)試主機(jī)組成(這里的測(cè)試主機(jī)為虛擬機(jī)),主要用來執(zhí)行具體的自動(dòng)化測(cè)試工作。文件服務(wù)器由代碼服務(wù)器Build Sever和測(cè)試服務(wù)器Test Sever組成,分別用來存放不同版本的消息中間件軟件和測(cè)試腳本。該系統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)初步設(shè)計(jì)如圖7所示。
通過使用該自動(dòng)化測(cè)試系統(tǒng),使用機(jī)器代替人來完成復(fù)雜、重復(fù)的勞動(dòng),有效的降低測(cè)試人員在測(cè)試企業(yè)自研的消息中間件時(shí)手工配置環(huán)境的復(fù)雜度,同時(shí)解決在多平臺(tái)下測(cè)試消息中間件軟件時(shí)任務(wù)繁重、測(cè)試內(nèi)容重復(fù)率高的問題,不僅降低測(cè)試人員的工作量,還提高了測(cè)試人員的工作效率,使測(cè)試人員集中精力進(jìn)行消息中間件軟件其他功能點(diǎn)的探索性測(cè)試,保證產(chǎn)品的質(zhì)量。