摘要:針對CBTC系統(tǒng)數(shù)據(jù)轉(zhuǎn)換工具測試中由于數(shù)據(jù)量大、回歸輪次多等原因?qū)е碌暮臅r、耗力的現(xiàn)狀,提出了一種自動化測試框架,旨在提高測試效率,縮短測試時間,減少人為錯誤。該自動化測試框架易于擴(kuò)展,可以靈活地應(yīng)用到各個項目中。
關(guān)鍵詞:自動化測試框架;測試腳本;數(shù)據(jù)轉(zhuǎn)換
0? ? 引言
基于通信的列車控制(Communication Based Train Control,簡稱CBTC)系統(tǒng)已經(jīng)成為城市軌道交通信號系統(tǒng)的發(fā)展方向[1]。數(shù)據(jù),作為CBCT系統(tǒng)中的核心組成部分,肩負(fù)著為整個CBTC系統(tǒng)的運行提供線路數(shù)據(jù)信息、子系統(tǒng)數(shù)據(jù)信息等重要功能。為了快速準(zhǔn)確地生成數(shù)據(jù),數(shù)據(jù)轉(zhuǎn)換工具應(yīng)運而生,該工具提供了子系統(tǒng)設(shè)計數(shù)據(jù)的生成、系統(tǒng)數(shù)據(jù)和子系統(tǒng)設(shè)計數(shù)據(jù)的安全校驗以及子系統(tǒng)應(yīng)用數(shù)據(jù)的生成等功能。由于生成數(shù)據(jù)的安全性和準(zhǔn)確性是CBTC系統(tǒng)安全連續(xù)運行的重要保證,因此需要對數(shù)據(jù)轉(zhuǎn)換工具進(jìn)行充分有效的測試。
在項目執(zhí)行過程中發(fā)現(xiàn),目前的數(shù)據(jù)轉(zhuǎn)換工具測試存在以下問題:
(1)手工黑盒測試回歸效率低。
(2)由于數(shù)據(jù)量大,手動測試存在偶然性和不確定性。
(3)回歸的覆蓋率不足,容易遺漏問題。在項目執(zhí)行過程中,由于執(zhí)行進(jìn)度和交付時間緊等原因,測試策略通常是回歸測試,也就是根據(jù)需求變更和代碼變更挑選回歸范圍,在回歸覆蓋率和測試時間之間折中,但這樣很容易遺漏問題。
本文針對前面提到的數(shù)據(jù)轉(zhuǎn)換工具測試中由于數(shù)據(jù)量大、回歸輪次多等原因?qū)е碌暮臅r、耗力的現(xiàn)狀,提出一種自動化測試框架,旨在:
(1)降低回歸成本,減少人力和時間投入;
(2)提高回歸覆蓋率,每一輪測試都可以做到全回歸;
(3)提高回歸的穩(wěn)定性,使測試結(jié)果確定。
1? ? CBTC系統(tǒng)數(shù)據(jù)轉(zhuǎn)換工具概述
圖1是CBTC信號系統(tǒng)的架構(gòu),包括列車自動監(jiān)控子系統(tǒng)(簡稱“ATS子系統(tǒng)”)、區(qū)域控制器(簡稱“ZC子系統(tǒng)”)、聯(lián)鎖子系統(tǒng)(簡稱“CBI子系統(tǒng)”)和車載子系統(tǒng)(簡稱“OBCU子系統(tǒng)”)[2]。
下面簡單介紹一下各子系統(tǒng)的功能:
(1)ATS子系統(tǒng)完成列車運行監(jiān)控、報警顯示、進(jìn)路排列和運行圖的調(diào)整等功能,還可以提供近期的列車運行記錄的查詢。
(2)OBCU子系統(tǒng)是控制列車運行和保證列車實現(xiàn)移動閉塞制式的關(guān)鍵設(shè)備。
(3)ZC子系統(tǒng)是重要的地面控制設(shè)備,主要功能是對本區(qū)域內(nèi)運行的列車進(jìn)行管理,同時考慮列車進(jìn)路、道岔狀態(tài)、線路限速以及其他障礙物的條件,向列車發(fā)送“移動授權(quán)”。
(4)CBI子系統(tǒng)是為了保證行車安全,在進(jìn)路、道岔和信號機之間存在的相互制約關(guān)系。主要負(fù)責(zé)采集道岔、信號機、屏蔽門、緊急按鈕等的狀態(tài)信息,并控制它們,完成列車進(jìn)路的辦理和取消。
每個子系統(tǒng)都需要軌旁數(shù)據(jù)(比如線路上道岔、軌道等軌旁設(shè)備的信息)和子系統(tǒng)數(shù)據(jù)(比如站臺信息、進(jìn)路信息等)的支持,而子系統(tǒng)軟件運行時則要讀取特定格式(比如二進(jìn)制或者XML格式)的文件,數(shù)據(jù)轉(zhuǎn)換工具的作用就是將軌旁數(shù)據(jù)和子系統(tǒng)數(shù)據(jù)根據(jù)各子系統(tǒng)的設(shè)計要求,轉(zhuǎn)換成規(guī)定格式的設(shè)計數(shù)據(jù)。下面簡單介紹一下數(shù)據(jù)轉(zhuǎn)換工具。
CBTC系統(tǒng)數(shù)據(jù)轉(zhuǎn)換工具是用于系統(tǒng)設(shè)計和數(shù)據(jù)轉(zhuǎn)換的軟件平臺,功能包括:
(1)導(dǎo)入、導(dǎo)出軌旁數(shù)據(jù);
(2)導(dǎo)入、導(dǎo)出系統(tǒng)參數(shù);
(3)導(dǎo)入、導(dǎo)出子系統(tǒng)設(shè)計數(shù)據(jù);
(4)數(shù)據(jù)校驗,工具可以檢查出源數(shù)據(jù)的格式錯誤,并正確報警。
該工具的輸入數(shù)據(jù)是軌旁數(shù)據(jù)和子系統(tǒng)設(shè)計數(shù)據(jù),多為Excel格式;輸出為子系統(tǒng)數(shù)據(jù),多為二進(jìn)制格式。
為了確保系統(tǒng)運行正常,一定要保證轉(zhuǎn)換前后數(shù)據(jù)的一致性。
2? ? 自動化測試框架概述
框架是整個或部分系統(tǒng)的可重用設(shè)計,表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實例間交互的方法;另一種定義認(rèn)為,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。前者是從應(yīng)用方面給出的定義,而后者是從目的方面給出的定義。從框架的定義可以了解,框架可以是被重用的基礎(chǔ)平臺,也可以是組織架構(gòu)類的東西。其實后者更為貼切,因為框架本來就是組織和歸類所用的。
自動化測試框架可以提供自動化測試執(zhí)行和管理功能的架構(gòu)模塊,測試完成后統(tǒng)計測試結(jié)果。自動化測試框架需要滿足以下幾個要求:
(1)自動化測試更便于實施,也就是說,寫測試腳本要方便,要讓不怎么懂技術(shù)的測試人員也可以寫自動化測試腳本。
(2)解決自動化測試腳本本身存在的問題,如異常處理和場景恢復(fù)等[3]。一個自動化測試框架在批量執(zhí)行腳本的情況下,不論遇到什么情況,如腳本運行錯誤、腳本質(zhì)量錯誤、測試環(huán)境異常、被測設(shè)備死機或掛起等,都要有能力重新清理測試環(huán)境,使測試環(huán)境恢復(fù)到最初始的狀態(tài),并執(zhí)行接下來需要執(zhí)行的腳本。
(3)易于維護(hù)。自動化測試是為了提高效率,因此測試框架和測試腳本都要易于維護(hù),不能讓維護(hù)變成另一種工作量。
(4)可重用性[4],在框架里,可以實現(xiàn)一些通用功能,簡化腳本開發(fā)過程。
(5)測試報告美觀易讀。
因此,自動化測試框架應(yīng)具備以下功能:
(1)Log:日志記錄和管理功能,針對不同情況,設(shè)置不同的日志級別,方便定位問題。
(2)Report:生成測試報告。
(3)Common:公共函數(shù)、方法以及通用操作的管理,遵循高內(nèi)聚、低耦合的原則,為編寫腳本提供便利。
(4)TestCase:測試用例管理功能。
(5)Harness:提供多種測試用例的執(zhí)行方式,方便測試人員執(zhí)行腳本;還負(fù)責(zé)異常梳理和場景恢復(fù)。
3? ? 針對數(shù)據(jù)轉(zhuǎn)換工具的自動化測試框架
3.1? ? 測試框架架構(gòu)
測試框架架構(gòu)如圖2所示,其中DataTool為被測體,測試框架包括:
(1)Log:提供日志功能,設(shè)置不同的日志級別,可以在案例執(zhí)行過程中寫入日志,方便定位問題。
(2)Harness:提供了測試案例的管理方式和執(zhí)行方式。
(3)TestCase:提供腳本編寫的模板,測試人員可以基于框架編寫測試腳本。
(4)Common:提供一些可重用功能,以簡化腳本編寫難度。
(5)Report:測試結(jié)束生成測試報告,提供簡潔明了的測試結(jié)果和測試日志。
(6)ExcelReader:針對數(shù)據(jù)轉(zhuǎn)換工具開發(fā)的Excel讀取和修改模塊,用來讀取數(shù)據(jù)工具的輸入數(shù)據(jù)。
(7)BinaryReader:針對數(shù)據(jù)轉(zhuǎn)換工具開發(fā)的二進(jìn)制文件讀取模塊,用來讀取和解析數(shù)據(jù)工具的輸出數(shù)據(jù)。
對于數(shù)據(jù)轉(zhuǎn)換的測試流程為:測試腳本分別讀取輸入數(shù)據(jù)和輸出數(shù)據(jù),依據(jù)一定的規(guī)則進(jìn)行運算,然后將輸入數(shù)據(jù)和輸出數(shù)據(jù)進(jìn)行比對,記錄日志。
對于數(shù)據(jù)校驗的測試流程為:根據(jù)測試目的,修改輸入數(shù)據(jù),運行數(shù)據(jù)轉(zhuǎn)換工具讀取修改后的輸入數(shù)據(jù),通過測試腳本讀取報警內(nèi)容,和期望結(jié)果進(jìn)行比對,記錄日志。
3.2? ? Log功能
Log功能提供如下接口:
(1)LogPass(string msg):記錄測試通過。
(2)LogFail(string msg):記錄測試失敗。
(3)LogInfo(InfoType iType,string msg):記錄測試日志,其中日志類型分為Info、Error、Debug和Highlight四種類型,方便測試人員定位問題。
測試人員可以在編寫腳本時調(diào)用Log模塊記錄日志,還可以通過該模塊根據(jù)判據(jù)記錄測試結(jié)果。
3.3? ? Harness功能
Harness模塊提供了如下3個主要功能:
(1)測試腳本管理:該模塊提供了測試腳本的編寫模板,測試人員可以根據(jù)模板編寫腳本,如果有其他需求,該框架也可以很簡便地擴(kuò)展。
(2)測試腳本執(zhí)行:該模塊支持多種執(zhí)行方式,使用模塊提供的命令行,可以按照測試人員分類執(zhí)行,也可以按照測試類別分類執(zhí)行。
(3)測試場景恢復(fù):測試框架還支持在腳本執(zhí)行前后進(jìn)行特定的場景恢復(fù)操作,保證腳本之間的獨立性。
3.4? ? TestCase功能
在該測試框架中,每個測試腳本均為一個命名唯一的函數(shù),且都有唯一的屬性,Harness模塊會根據(jù)該屬性讀取并執(zhí)行測試腳本。這樣,測試人員只需要關(guān)注腳本編寫本身,極大地降低了對測試人員編碼水平的要求。
測試人員編寫腳本時可以根據(jù)測試目的調(diào)用Common和Log模塊提供的接口。
3.5? ? Common功能
Common模塊提供了一些可復(fù)用的功能,封裝成統(tǒng)一的接口,供測試腳本調(diào)用,降低了腳本編寫難度。主要功能包含:
(1)支持多種數(shù)據(jù)類型的結(jié)果比對,并生成日志;
(2)讀取二進(jìn)制文件,支持大小端,并且按照規(guī)定的格式解析二進(jìn)制文件;
(3)讀取XML文件;
(4)讀取和修改Excel文件,這樣,測試人員可以通過接口調(diào)用來修改Excel文件,而非人工操作,極大地提高了測試效率和測試準(zhǔn)確率。
3.6? ? Report功能
Report模塊提供了兩種形式的報告:txt格式和xml格式。
(1)txt格式的測試報告包含測試腳本執(zhí)行過程中生成的日志,如圖3所示。
(2)xml格式的測試報告提供了測試結(jié)果總結(jié),如圖4所示,包含測試環(huán)境、測試時間、測試腳本名稱和測試結(jié)果,執(zhí)行失敗的腳本會高亮。測試報告的內(nèi)容和格式也可以根據(jù)測試需求進(jìn)行修改和擴(kuò)展。
4? ? 結(jié)語
數(shù)據(jù)工具自動化測試框架可以用于數(shù)據(jù)工具測試,作為框架,它的結(jié)構(gòu)是開放的,使用時可以根據(jù)測試的需要對其進(jìn)行擴(kuò)展和改進(jìn),可靈活運用到各種項目中。在項目執(zhí)行過程中,通過使用該工具,可以極大地提高測試效率和測試準(zhǔn)確率,對測試人員的代碼水平也沒有太高的要求。
[參考文獻(xiàn)]
[1] 2009—2012年中國城市軌道交通線網(wǎng)規(guī)劃及行業(yè)設(shè)備報告[R].
[2] IEEE Standard for User Interface Requirements in Communications-Based Train Control (CBTC) Systems: 1474.2—2003[S],2003.
[3] KELLY M.Choosing a test automation framework[EB/OL]. [2020-03-20].https://www.ibm.com/developerworks/rational/library/591.html.
[4] NAGLE C.Test Automation Frameworks[EB/OL].[2020-03-
20].http://safsdev.sourceforge.net/FRAMESDataDriven-TestAutomationFrameworks.htm.
收稿日期:2020-03-24
作者簡介:胡甜(1982—),女,湖北紅安人,博士,工程師,軟件測試主管,研究方向:嵌入式軟件白盒測試、軟件自動化測試。