陳征
(中國電子科學研究院,北京石景山,100041)
消息中間件能夠提供跨網絡、硬件和操作系統的透明的應用服務[2]。它屬于整個系統中最重要的軟件配置項之一。企業針對各項目開發出了支持在不同操作系統(如Windows、Linux等)上運行的消息中間件。針對該軟件,目前的測試流程是:測試人員部署各操作系統上的測試環境,然后手工編寫測試腳本在不同版本上編譯執行。當前測試流程產生如下問題:①不同操作系統上的軟件提供的功能重復性較高,測試人員需手工在不同平臺上重復執行相同的測試,進行全面的測試工作需要較長時間和較多的人力資源,在有限的時間里測試工作量大,很難保證軟件的質量;②該消息中間件在安裝時需要進行復雜的參數配置才能啟動,在環境準備上花費了大量時間。
針對該消息中間件的特點,要實現軟件測試的自動化,需要一個強大的自動化測試框架作為支撐,而STAF提供了構建復雜分布式測試環境的有效解決方案,在安裝了STAF的機器上可以實現以下功能:隨時啟動、停止測試機上的任一程序,獲得測試機的狀態,在測試機之間互傳文件,提供不同操作語言API接口,適應多種操作系統[3]。結合STAF的外部服務STAX,在STAF的基礎上幫助用戶靈活操縱框架實現測試用例的分發、執行、部署,使測試任務更方便的分發到相應測試機去完成測試用例的執行、測試結果的收集[4,5]。STAF的開源、跨平臺、支持多語言并且基于可重用組件的特性[6],使得構建消息中間件的自動化測試系統可行。
企業開發的消息中間件,主要功能是屏蔽操作系統平臺的差異性,提供跨網絡、硬件和操作系統的透明的應用服務,根據提供的統一API接口,實現上層應用的通信、參數配置等功能。該消息中間件軟件對不同的操作系統提供統一的調用接口,格式如下:

調用接口執行失敗時返回結果為0,成功是返回結果為1。如果軟件返回的錯誤碼為0,代表無錯誤;如果為其他值,則代表相應的錯誤信息。
該消息中間件具有以下幾個特點:
(1)產品支持多個版本,對應不同平臺均有相應的軟件發布版本可供使用,且各軟件版本之間功能重復性較高;
(2)產品配置、環境搭建復雜。
針對該消息中間件軟件,傳統的測試流程如圖1所示。首先,測試人員需要將不同平臺版本的待測試消息中間件產品以及測試腳本從SVN服務器中下載到相應操作系統平臺;第二步,人工部署測試環境,包括軟件的安裝配置操作以及測試腳本的編譯工作;第三步,人工執行測試,包括啟動消息中間件軟件,運行測試腳本,記錄測試結果;第四步,人工收集并分析測試結果,分別在各個平臺上使用EXCEL表記錄測試執行情況,并將整理結果移植Word文檔中完成測試報告的編寫。

圖1 消息中間件軟件目前測試過程
從目前測試現狀來看,測試工作仍以手動測試為主,只有少部分執行測試功能是調用自動化測試腳本執行。測試前期測試版本的獲取、人工搭建基于不同操作系統平臺的測試環境、安裝配置不同平臺上相應產品以及針對不同系統版本的測試腳本進行編譯都需要人工參與,耗費了測試人員大量的時間;另外,不同版本消息中間件提供的功能重復性較高,測試人員需要在不同操作系統平臺上執行相同的測試,工作量很大。尤其是在項目進度緊張的情況下,會耗費大量的人力資源。
分析上述現狀的原因,是因為對現有的測試過程中的測試資源,包括待測產品、測試腳本以及測試環境資源缺乏規范性和組織性。測試過程以人工操作為主,并沒有合適的框架支撐整個測試過程,將一些重復性高的測試任務自動化。分析目前測試活動的整個過程,仍有可改進的部分。
以企業自研的消息中間件為測試對象,利用STAF/STAX技術,設計一個自動化測試系統MOMSTAF(Message—oriented Middleware Software Testing Automation Framework,以下簡稱MOMSTAF),該系統實現消息中間件軟件的測試過程自動化進行,包括制定并部署待測消息中間件軟件測試任務、自動執行消息中間件軟件測試用例、自動監控軟件測試過程以及自動收集并統計軟件測試執行結果的功能。
該系統主要考慮以下幾個方面:
(1)消息中間件軟件測試全過程的自動執行
本系統將充分考慮測試人員在執行企業自研消息中間件軟件測試過程中的各個環節,將日常測試工作分為以下五個基本流程:
(a)測試計劃階段:完成自研消息中間件軟件測試任務的制定,確定測試范圍,包括選擇要測試的消息中間件版本、確定待測版本的操作系統類型、選擇要執行的消息中間件測試項;
(b)測試準備階段:根據測試計劃階段確定的測試范圍,完成消息中間件測試任務的部署,包括選擇匹配的測試主機、啟動測試主機、下載待測消息中間件及測試腳本到測試主機、部署待測軟件、編譯測試腳本;
(c)測試執行階段:在測試準備階段完成之后,在各測試主機上執行測試腳本。在測試用例執行過程中,提供人機界面方便測試人員實時監控各測試主機的執行情況,方便測試人員掌握測試執行進度;
(d)測試結果統計階段:收集各個測試主機的測試執行結果,給出整個測試結果的統計信息(統計出通過與失敗的測試用例,以及失敗的原因);
(e)測試環境清理階段:在測試用例執行完畢并對測試結果做出統計后,完成測試環境的清理,恢復測試環境的初始態。
(2)測試任務部署在虛擬機中執行,節約測試資源,簡化測試環境搭建
由于企業自研的消息中間件適用于多操作系統平臺(如:Windows、Linux平臺),為了達到在硬件資源緊張的情況下,有效節約測試資源,滿足自研消息中間件產品在不同操作系統上執行測試的要求。因此在MOMSTAF自動化測試系統的設計過程中,需要將消息中間件軟件測試任務部署到虛擬機中執行,通過在虛擬機上執行測試任務,解決測試人員在測試消息中間件時測試資源不足的問題。另外,將待測消息中間件需要考慮跨平臺通信的各種測試場景,如點對點通信以及多對一的通信場景,通過使用虛擬機有效的簡化了測試環境的搭建。
根據以上對MOMSTAF自動化測試系統的業務需求分析結果,提出適用于當前被測軟件自動化測試系統的架構設計方案,該系統總體架構設計劃分為三層,從上至下依次為表示層、業務邏輯層、數據層,這種架構明確了責任的劃分,使系統更加易于維護和擴展。 MOMSTAF系統體系架構圖如圖2所示。
表示層位于最上層,該層向測試人員提供友好的人機交互界面,主要為測試人員提供測試的操作界面,接收測試人員輸入的操作,監控自動化測試執行的進度,方便測試人員使用MOMSTAF自動化測試系統執行自研消息中間件的測試工作。

圖2 自動化測試系統架構圖
業務邏輯層位于表示層和數據層之間,包括測試任務管理模塊、監聽管理模塊、測試用例管理模塊、結果統計模塊、虛擬機管理模塊和日志管理模塊。這些模塊實現了MOMSTAF自動化測試系統的整個自動化測試過程。在執行自動化測試的過程中,STAF自動化測試框架提供測試服務,并由其外部執行引擎STAX統一調度整個自動化測試過程。

圖3 自動化測試系統功能模塊圖
數據層主要用來存放自研消息中間件的測試任務、測試結果以及自動化測試系統運行時的日志等信息。
經分析,初步將MOMSTAF自動化測試系統分為測試任務管理模塊、監聽管理模塊、測試用例管理模塊、結果統計模塊、虛擬機管理模塊、日志管理模塊六個部分,這些模塊整合了自動化測試的整個過程:制定測試任務、檢查測試任務、分發測試任務、部署測試任務、執行測試任務、監聽測試過程、收集并總結測試結果等。具體的功能模塊劃分如圖3所示。
測試任務管理模塊主要實現在自研消息中間件軟件自動化測試過程中對測試任務的管理。包括以下幾部分:第一,測試任務制定,確定要執行的測試任務,包括選擇被測軟件版本、確定待測版本的操作系統類型、選擇要執行的測試用例。第二,測試任務分發,該功能實現將制定好并完成檢查的測試任務分發到相應測試主機(測試任務的檢查由監聽管理模塊中的任務狀態監聽實現,檢查過程見圖5),等待部署測試任務。第三,測試任務部署,主要實現在收到測試調度機的測試部署的命令后,分別從產品服務器和測試服務器中下載相應待測消息中間件以及測試腳本,并完成軟件的安裝以及測試腳本的編譯。第四,測試任務執行,接收測試調度機的測試執行命令后,開始進行自動化測試,在測試執行過程中,向測試主機反饋測試進度情況。測試任務管理的時序圖如圖4所示。

圖4 測試任務管理時序圖
監聽管理模塊主要實現MOMSTAF自動化測試系統在執行自研消息中間件的整個自動化測試過程中的監聽管理。實現的功能包括:第一,啟動監聽,開啟監聽管理。第二,關閉監聽,結束自動化測試任務后,關閉監聽管理。第三,任務狀態監聽,主要實現對測試任務中的待測版本以及相應虛擬機的狀態監聽,監聽待測版本在代碼服務器中是否存在、虛擬機的狀態是否為未被占用的狀態,任務狀態監聽活動圖如圖5所示。第四,測試進度監聽,主要實現在測試的過程中,實時監聽各個測試主機的測試執行進度。第五,異常處理監聽,提供異常處理監聽機制,監聽并定位系統錯誤位置信息。

圖5 任務狀態監聽活動圖

圖6 測試結果判定流程圖
測試用例管理模塊主要實現對自研消息中間件軟件測試用例的管理,包括對消息中間件軟件測試用例的增加、刪除、修改、查詢操作,同時為了保證測試服務器中的測試腳本與測試用例的一致性,還應實現測試用例的同步功能,即MOMSTAF自動化測試系統后臺定期對測試用例與測試腳本進行同步更新。
測試結果的統計模塊,實現的功能包括:測試結果統計、測試結果分析、測試報告生成。測試結果統計功能主要用于在執行被測軟件測試結束時,收集并統計各測試主機的最終執行情況,統計通過與不通過的測試用例。測試結果分析用于對統計出的測試結果進行分析,分析的內容包括:各版本消息中間件軟件測試用例的執行通過率與不通過率以及各測試項執行情況柱狀圖。測試報告生成,根據測試結果的統計與分析,生成測試報告,同時實現將測試報告導出以及上傳至服務器的功能,方便項目相關人員傳閱以及用于項目數據積累。
測試結果統計模塊中判斷測試用例通過與否的流程圖如圖6所示。首先,測試腳本執行消息中間件API接口函數,測試腳本執行該函數后,返回接口函數執行結果以及錯誤碼。然后,將接口函數返回值、錯誤碼和測試腳本調用該接口函數時傳入的不同參數寫入實際結果執行文件,寫入順序與預期結果文件一致,預期結果文件中的內容以“接口函數名、輸入參數、接口函數返回值、錯誤碼”排序,該文件放在當前測試腳本目錄中。最后,將實際結果執行文件與預期結果文件進行對比,如果內容一致,則判斷該測試用例通過,否則,判斷為不通過。
虛擬機管理模塊主要實現對測試環境中虛擬機的管理,主要實現對各虛擬機的檢查、啟動、初始化操作。其中,VM虛擬機檢查功能實現在接收到監聽管理模塊中的任務狀態監聽消息后,對VM虛擬機當前的狀態是否被占用進行檢查。如果未被占用則啟動虛擬機,否則向測試調度機返回當前被占用的信息。VM虛擬機初始化功能主要實現在消息中間件軟件測試任務執行完畢后,執行環境的清理,恢復環境初始化狀態,完成初始化操作后關閉虛擬機。

圖7 自動化測試系統網絡拓撲圖
日志管理模塊主要完成對消息中間件軟件自動化測試系統運行時的日志信息進行記錄。
MOMSTAF自動化測試系統網絡結構主要由測試調度機、測試機群以及文件服務器組成。測試調度機主要完成自研消息中間件軟件自動化測試流程的控制與管理。測試機群由不同操作系統平臺的測試主機組成(這里的測試主機為虛擬機),主要用來執行具體的自動化測試工作。文件服務器由代碼服務器Build Sever和測試服務器Test Sever組成,分別用來存放不同版本的消息中間件軟件和測試腳本。該系統網絡結構初步設計如圖7所示。
通過使用該自動化測試系統,使用機器代替人來完成復雜、重復的勞動,有效的降低測試人員在測試企業自研的消息中間件時手工配置環境的復雜度,同時解決在多平臺下測試消息中間件軟件時任務繁重、測試內容重復率高的問題,不僅降低測試人員的工作量,還提高了測試人員的工作效率,使測試人員集中精力進行消息中間件軟件其他功能點的探索性測試,保證產品的質量。