蔣倩 岳龍 李書杰
摘要:針對(duì)ATS系統(tǒng)在工程化應(yīng)用測(cè)試過程中大批量回歸測(cè)試耗時(shí)耗力的問題,構(gòu)建了一個(gè)自動(dòng)化測(cè)試平臺(tái)。該平臺(tái)的核心模塊仿真管理器提供測(cè)試腳本編寫、構(gòu)造測(cè)試環(huán)境、自動(dòng)加載被測(cè)對(duì)象、自動(dòng)執(zhí)行測(cè)試等功能。在結(jié)合ATS系統(tǒng)功能及內(nèi)部接口特征人工完成測(cè)試腳本的基礎(chǔ)上,可重復(fù)進(jìn)行大批量回歸測(cè)試。本文以ATS應(yīng)用服務(wù)器子系統(tǒng)為例,展示了如何在該平臺(tái)上實(shí)現(xiàn)自動(dòng)化測(cè)試,并總結(jié)了每輪回歸試驗(yàn)的測(cè)試用時(shí)和人力資源消耗情況。試驗(yàn)結(jié)果表明該自動(dòng)化測(cè)試平臺(tái)幫助測(cè)試人員提高測(cè)試效率,幫助研發(fā)人員進(jìn)行缺陷預(yù)防,以減少系統(tǒng)開發(fā)成本、縮短系統(tǒng)開發(fā)周期,為系統(tǒng)持續(xù)集成提供可能性。
關(guān)鍵詞:自動(dòng)化測(cè)試;缺陷預(yù)防;ATS系統(tǒng)
中圖分類號(hào):TP24 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2019)05-0160-03
0 引言
ATS系統(tǒng)(列車自動(dòng)監(jiān)控系統(tǒng))廣泛應(yīng)用于城市軌道交通信號(hào)控制領(lǐng)域,它與ATP系統(tǒng)(列車自動(dòng)防護(hù)系統(tǒng))、ATO系統(tǒng)(列車自動(dòng)駕駛系統(tǒng))合稱ATC系統(tǒng)(列車自動(dòng)運(yùn)行控制系統(tǒng)),共同完成高密度城市軌道交通安全高效運(yùn)輸作業(yè)。ATS系統(tǒng)主要提供列車運(yùn)行監(jiān)督和控制的自動(dòng)化行車調(diào)度指揮功能[1],對(duì)保障軌道交通線路運(yùn)營(yíng)高效率和高質(zhì)量具有重要意義。
目前,湖南中車時(shí)代通信信號(hào)有限公司的ATS系統(tǒng)已投入長(zhǎng)沙地鐵3號(hào)線,長(zhǎng)沙地鐵4號(hào)線的工程應(yīng)用,在項(xiàng)目后期系統(tǒng)已趨于成熟,功能需求不會(huì)發(fā)生重大變更。當(dāng)系統(tǒng)發(fā)生輕微變更時(shí),除對(duì)變更點(diǎn)及其影響范圍進(jìn)行測(cè)試外,為防止變更影響范圍識(shí)別不充分會(huì)期望對(duì)整個(gè)系統(tǒng)進(jìn)行全面的回歸測(cè)試。然而該階段工期緊、任務(wù)重,這就對(duì)測(cè)試效率及測(cè)試資源提出更高要求。為解決這一困難,提出用自動(dòng)化測(cè)試方法代替一部分人工手動(dòng)的測(cè)試方法來(lái)提高測(cè)試效率,解放生產(chǎn)力。
現(xiàn)有的軟件自動(dòng)化測(cè)試工具種類繁多,例STAF,LR(Load Runner)和QTP(QuickTest Professional)等,但是對(duì)于軌道交通信號(hào)系統(tǒng)領(lǐng)域,商業(yè)的自動(dòng)化測(cè)試工具都存在一定的不足,例如,無(wú)法滿足實(shí)時(shí)性要求,無(wú)法支持專用協(xié)議,傾向于單一類型測(cè)試[2][3][4]。本文根據(jù)ATS子系統(tǒng)測(cè)試方法,設(shè)計(jì)出一套通用ATS系統(tǒng)自動(dòng)化測(cè)試平臺(tái)。
1 ATS自動(dòng)化測(cè)試平臺(tái)設(shè)計(jì)
ATS系統(tǒng)自動(dòng)化測(cè)試平臺(tái)采用黑盒測(cè)試的方式,只調(diào)用被測(cè)子系統(tǒng)的接口來(lái)測(cè)試程序的功能。測(cè)試平臺(tái)的結(jié)構(gòu)如圖1所示,由被測(cè)對(duì)象、子系統(tǒng)模擬器和仿真管理器組成。測(cè)試平臺(tái)采用VisualC++軟件開發(fā)。
1.1 仿真管理器
仿真管理器主要提供配置測(cè)試環(huán)境、編譯測(cè)試腳本、加載測(cè)試計(jì)劃、執(zhí)行測(cè)試腳本、生成測(cè)試報(bào)告等功能。人機(jī)界面如圖2所示。
1.1.1 測(cè)試腳本編譯模塊
腳本的編輯環(huán)境和執(zhí)行模塊。測(cè)試人員根據(jù)測(cè)試用例人工在仿真管理器上手動(dòng)編寫測(cè)試腳本,將測(cè)試用例轉(zhuǎn)化為測(cè)試腳本語(yǔ)言。該模塊支持測(cè)試腳本的增加、刪除、重命名、編寫、保存、關(guān)鍵字查找功能。測(cè)試腳本可采用JS和VBS兩種格式來(lái)儲(chǔ)存,需要構(gòu)造發(fā)送的消息和期望接收的消息。該模塊在執(zhí)行測(cè)試腳本的過程中記錄并顯示發(fā)送和接收的消息,根據(jù)測(cè)試腳本中的預(yù)期結(jié)果進(jìn)行比較和判斷,輸出測(cè)試結(jié)果,更新腳本執(zhí)行狀態(tài)。
1.1.2 消息發(fā)送模塊
消息發(fā)送處理模塊根據(jù)測(cè)試腳本中設(shè)置的輸出消息的目的地隊(duì)列和類型,向目標(biāo)隊(duì)列中發(fā)送構(gòu)造好的數(shù)據(jù),可支持批量發(fā)送消息。
1.1.3 消息接收模塊
消息接收處理模塊根據(jù)測(cè)試腳本中設(shè)置的輸入消息的源隊(duì)列和類型,當(dāng)監(jiān)聽到消息隊(duì)列中接收到期望的消息類型時(shí),觸發(fā)消息處理函數(shù)對(duì)消息進(jìn)行反解。該模塊能同時(shí)處理多個(gè)消息源發(fā)送來(lái)的多包消息。
1.1.4 生成測(cè)試報(bào)告模塊
每次測(cè)試計(jì)劃的腳本全部執(zhí)行完畢都會(huì)自動(dòng)生成本次測(cè)試的測(cè)試報(bào)告,記錄和存儲(chǔ)每個(gè)測(cè)試用例的編號(hào),測(cè)試執(zhí)行的開始時(shí)間結(jié)束時(shí)間,測(cè)試結(jié)果,測(cè)試日志以及測(cè)試過程中出現(xiàn)的異常。報(bào)告采用excel格式統(tǒng)一模板輸出,以供測(cè)試人員再次編輯。
1.2 子系統(tǒng)模擬器
由于ATS系統(tǒng)是一個(gè)基于網(wǎng)絡(luò)通信的分布式系統(tǒng),針對(duì)某個(gè)子系統(tǒng)的測(cè)試往往需要其他多個(gè)子系統(tǒng)同時(shí)配合參與,因此,設(shè)計(jì)了子系統(tǒng)模擬器來(lái)構(gòu)造外部測(cè)試環(huán)境。子系統(tǒng)模擬器類似于消息路由器,作為仿真管理器和被測(cè)子系統(tǒng)的通信橋梁,可自定義消息路由規(guī)則和消息收發(fā)隊(duì)列。子系統(tǒng)模擬器是個(gè)只讀對(duì)話框,只顯示收發(fā)的消息信息不可編輯。
1.3 被測(cè)子系統(tǒng)
在該自動(dòng)化測(cè)試平臺(tái)中,被測(cè)對(duì)象可以是ATS系統(tǒng)中某一子系統(tǒng),也可以是多個(gè)子系統(tǒng)的集成,該設(shè)計(jì)可同時(shí)支持ATS子系統(tǒng)階段和系統(tǒng)集成階段的測(cè)試。
2 ATS自動(dòng)化測(cè)試平臺(tái)應(yīng)用
應(yīng)用服務(wù)器子系統(tǒng)為ATS核心服務(wù)器,提供主要處理列車跟蹤識(shí)別,列車調(diào)整,自動(dòng)進(jìn)路,運(yùn)行圖編輯,派班管理等功能。與應(yīng)用服務(wù)器交互的子系統(tǒng)有車站服務(wù)器、通信服務(wù)器、運(yùn)行圖管理客戶端、站場(chǎng)監(jiān)控客戶端等。應(yīng)用服務(wù)器承擔(dān)功能重大,涉及子系統(tǒng)眾多,交互消息復(fù)雜,對(duì)其開展自動(dòng)化測(cè)試顯得尤為重要。本章以應(yīng)用服務(wù)器單個(gè)子系統(tǒng)為被測(cè)對(duì)象,選擇設(shè)置道岔定操功能為例來(lái)詳細(xì)說明如何在該平臺(tái)上實(shí)現(xiàn)自動(dòng)化測(cè)試。
2.1 測(cè)試用例定義
設(shè)置道岔定操功能是指聯(lián)鎖系統(tǒng)與ATS系統(tǒng)通信正常的情況下,ATS系統(tǒng)向聯(lián)鎖系統(tǒng)發(fā)送道岔定操命令,由聯(lián)鎖系統(tǒng)來(lái)實(shí)現(xiàn)將道岔置于定位。從各個(gè)子系統(tǒng)之間相互傳遞消息的順序關(guān)系,可設(shè)計(jì)一條正向測(cè)試用例描述為:采用中心調(diào)度臺(tái)模擬器向應(yīng)用服務(wù)器發(fā)送內(nèi)部消息m,采用車站服務(wù)器模擬器驗(yàn)證應(yīng)用服務(wù)器是否向其發(fā)送正確的內(nèi)部消息n,采用中心調(diào)度臺(tái)模擬器驗(yàn)證應(yīng)用服務(wù)器是否向其發(fā)送正確的記錄事件消息k。
2.2 測(cè)試腳本編寫
在完成測(cè)試用例定義后,即可在仿真管理器中編寫腳本。為便于測(cè)試腳本與測(cè)試用例的追溯,腳本名稱直接采用測(cè)試用例的用例編號(hào)。測(cè)試腳本在編寫過程中要注意以下幾個(gè)關(guān)鍵點(diǎn):
(1)構(gòu)造測(cè)試前置條件。構(gòu)造正確的測(cè)試環(huán)境,離不開對(duì)前置條件的充分理解,只有構(gòu)造了正確的前置條件測(cè)試才是有效的。本條測(cè)試用例中隱藏的前置條件有:中心調(diào)度在客戶端登錄,控制模式為中心控。(2)構(gòu)造輸入消息和監(jiān)聽輸出消息。無(wú)論是構(gòu)造輸入消息還是監(jiān)聽輸出消息,都需要了解兩個(gè)交互子系統(tǒng)之間的內(nèi)部接口協(xié)議,明確消息的每個(gè)字段含義。本條測(cè)試用例中客戶端與應(yīng)用服務(wù)器內(nèi)部消息m的字段有時(shí)間戳、CRC校驗(yàn)、消息ID、消息長(zhǎng)度、控制句柄值、聯(lián)鎖區(qū)編號(hào)等。(3)發(fā)送消息隊(duì)列和接收消息隊(duì)列。如果隊(duì)列配置錯(cuò)誤,則會(huì)導(dǎo)致消息發(fā)不出去或者接收不到,所以明確被測(cè)對(duì)象的收發(fā)隊(duì)列也是測(cè)試執(zhí)行的關(guān)鍵。這個(gè)需要平臺(tái)配置和腳本共同配合解決。從平臺(tái)配置上看,針對(duì)某個(gè)子系統(tǒng)模擬器需要配置四個(gè)隊(duì)列,分別是從被測(cè)節(jié)點(diǎn)接收消息隊(duì)列A,向仿真管理器發(fā)送消息隊(duì)列B,從仿真管理器接收消息隊(duì)列C和向被測(cè)節(jié)點(diǎn)發(fā)送消息隊(duì)列D;針對(duì)仿真管理器,與其交互的所有子系統(tǒng)模擬器的隊(duì)列B都需要配置正確。從測(cè)試腳本上看,需在腳本中寫入正確的隊(duì)列B和D,保持一致則可使消息發(fā)送成功或者監(jiān)聽到期望消息。(4)判定測(cè)試通過條件。被測(cè)對(duì)象輸出的消息是待驗(yàn)證的消息,在測(cè)試過程中需實(shí)時(shí)監(jiān)聽,一旦收到消息反解后,需根據(jù)消息字段含義對(duì)其關(guān)鍵字段進(jìn)行驗(yàn)證,以確保被測(cè)對(duì)象輸出消息的正確性。本條測(cè)試用例中內(nèi)部消息n和記錄事件消息k是驗(yàn)證對(duì)象。驗(yàn)證的內(nèi)容包含消息n的消息ID、聯(lián)鎖區(qū)編號(hào)、控制句柄值等,消息k的消息ID、報(bào)警等級(jí)等。
2.3 測(cè)試用例執(zhí)行
完成腳本編寫后便可在仿真管理器上直接執(zhí)行測(cè)試腳本。執(zhí)行腳本可以一次執(zhí)行一條腳本,也可以一次執(zhí)行一個(gè)文件夾下的所有腳本,也可以按測(cè)試計(jì)劃執(zhí)行腳本。在仿真管理器上,執(zhí)行腳本開始時(shí)會(huì)打印開始時(shí)間和被執(zhí)行腳本名稱,執(zhí)行腳本過程中會(huì)根據(jù)腳本打印出關(guān)鍵消息以及出現(xiàn)的異常,執(zhí)行腳本結(jié)束后會(huì)打印執(zhí)行完畢的時(shí)間和執(zhí)行結(jié)果。在子系統(tǒng)模擬器上,會(huì)打印出收發(fā)消息的時(shí)間,隊(duì)列名稱和消息內(nèi)容。針對(duì)本條測(cè)試用例,選擇當(dāng)前測(cè)試腳本點(diǎn)擊執(zhí)行,執(zhí)行成功后在被執(zhí)行腳本名稱前更新一個(gè)畫勾的圖標(biāo)顯示測(cè)試通過。
2.4 測(cè)試結(jié)果分析
執(zhí)行本條腳本共耗時(shí)2s,針對(duì)該功能還需定義很多反向測(cè)試用例,例如,發(fā)送CRC錯(cuò)誤,消息長(zhǎng)度錯(cuò)誤,時(shí)間戳錯(cuò)誤的內(nèi)部消息m,發(fā)送被篡改的內(nèi)部消息m,未登陸的客戶端發(fā)送內(nèi)部消息m等。事實(shí)上,對(duì)于該功能我們共定義了13條測(cè)試用例,只需要一個(gè)操作耗時(shí)78s即可完成測(cè)試,大大節(jié)省了人工成本和時(shí)間成本。
當(dāng)系統(tǒng)功能趨于穩(wěn)定時(shí),工人編寫的測(cè)試腳本利用率極高,只需人工啟動(dòng)本次測(cè)試計(jì)劃就可以開展自動(dòng)測(cè)試。測(cè)試過程無(wú)需人工參與,選擇非工作時(shí)間執(zhí)行測(cè)試,既可以節(jié)省人工成本又可以節(jié)省時(shí)間成本。測(cè)試腳本一旦創(chuàng)建對(duì)測(cè)試執(zhí)行人員要求較低,可釋放更多的人力用于維護(hù)測(cè)試腳本和開展進(jìn)一步測(cè)試開發(fā)工作。當(dāng)軟件變更不影響系統(tǒng)功能時(shí),研發(fā)人員在完成軟件變更發(fā)布給測(cè)試人員前對(duì)其進(jìn)行全功能自動(dòng)化測(cè)試,便可以提前發(fā)現(xiàn)軟件缺陷,對(duì)軟件缺陷進(jìn)行預(yù)防,避免一次無(wú)用發(fā)布。
3 結(jié)語(yǔ)
ATS系統(tǒng)自動(dòng)化測(cè)試平臺(tái)的意義在于,第一,執(zhí)行測(cè)試的過程無(wú)需人工參與無(wú)需上班時(shí)間,有效節(jié)省了人工成本和時(shí)間成本;第二,有效杜絕修改一個(gè)缺陷引入更多缺陷;第三,在發(fā)布前由研發(fā)人員執(zhí)行自動(dòng)化測(cè)試可有效預(yù)防缺陷發(fā)生;第四,針對(duì)業(yè)主不斷提出的新需求,可縮短開發(fā)周期。然而,該測(cè)試平臺(tái)仍存在一定的局限,當(dāng)功能發(fā)生變更則需要人工重新編寫測(cè)試用例和測(cè)試腳本,維護(hù)成本較高。在未來(lái),ATS系統(tǒng)自動(dòng)化測(cè)試平臺(tái)仍有很多工作可以開展,例如:與現(xiàn)有的缺陷管理系統(tǒng)結(jié)合將測(cè)試發(fā)現(xiàn)的缺陷自動(dòng)錄入系統(tǒng),或通過e-mail將測(cè)試結(jié)果通知指定人員;與現(xiàn)有的配置管理系統(tǒng)結(jié)合對(duì)編譯完成的代碼自動(dòng)下載部署,自動(dòng)執(zhí)行測(cè)試腳本;與測(cè)試用例結(jié)合探討自動(dòng)生成測(cè)試腳本的方法等;與人機(jī)交互界面結(jié)合探討UI功能測(cè)試。
參考文獻(xiàn)
[1] 趙威.城市軌道交通列車自動(dòng)監(jiān)控系統(tǒng)的研究[J].鐵路通信信號(hào)工程技術(shù)(RSCE),2008,5(5):30-32.
[2] 傅李育.軌交信號(hào)系統(tǒng)自動(dòng)化測(cè)試集成平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[M].上海:上海交通大學(xué),2013.
[3] 高璐瑤.安全苛求軟件的自動(dòng)化測(cè)試技術(shù)研究[M].杭州:浙江大學(xué),2013.
[4] 王丹.CBTC系統(tǒng)的自動(dòng)化測(cè)試研究[M].北京:北京交通大學(xué),2010.