李自豪 徐先良 歐國恩
自動測試技術(shù)的誕生可追溯到20 世紀(jì)80 年代,發(fā)展到如今,已經(jīng)廣泛應(yīng)用于各領(lǐng)域的系統(tǒng)測試中,且技術(shù)逐漸趨于成熟,相關(guān)的自動測試工具層出不窮。在國內(nèi),自動測試正處于高速發(fā)展階段,越來越多的企業(yè)意識到自動測試的重要性。
本文基于美國國家儀器公司(NI) 開發(fā)的測試管理軟件TestStand 進(jìn)行測試系統(tǒng)的開發(fā),結(jié)合TestStand 的功能特點與既有測試經(jīng)驗,設(shè)計并實現(xiàn)了基于Teststand 的列控車載系統(tǒng)自動測試方案。
基于Teststand 的列控車載系統(tǒng)既有測試方案主要包含2 部分:被測車載設(shè)備和仿真測試環(huán)境,如圖1 所示,其中被測車載設(shè)備為真實車載。為了滿足測試需求,搭建了模擬真實運行環(huán)境的仿真測試環(huán)境。該測試系統(tǒng)中包括了TBTS 仿真車接口系統(tǒng)、軌旁仿真系統(tǒng)、RBC 模擬器、GNSS/GNSSIMU 模擬器、DTS 模擬器、HOT 模擬器、DRU 模擬器等[1],以下是各個模擬器在測試系統(tǒng)中的作用[2]。
1) TBTS 仿真車接口系統(tǒng):為車載提供電源控制,模擬列車IO 接口和車輛操作控制的軟件。
2) 軌旁仿真系統(tǒng):處理列車位置及占用邏輯,為軌旁設(shè)備提供列車位置信息。
圖1 基于Teststand 的列控車載系統(tǒng)既有測試方案
3)RBC 模擬器:與車載建立并維持通信,向車載發(fā)送進(jìn)路及限速信息。
4)GNSS/GNSSIMU 模擬器:用來接收軌旁發(fā)送的列車區(qū)間位置信息,計算相應(yīng)的GPS 坐標(biāo),并發(fā)送給車載。
5)DTS 模擬器:存儲數(shù)據(jù)庫數(shù)據(jù),與車載建立連接并配合進(jìn)行發(fā)車測試。
6)HOT 模擬器:與車載建立連接并向車載發(fā)送管壓信息。
7) DRU 模擬器:與車載建立連接,接收、記錄并顯示車載日志,將其以json 格式保存到本地。
在測試過程中,測試人員需要手動操作上述模擬器,并且需要時刻觀察車輛狀態(tài),選擇合適的時機(jī)控制車輛的速度和加速度,這對測試人員提出了較高的要求,需要盡可能地避免失誤。
基于Teststand 的列控車載系統(tǒng)自動測試方案,與傳統(tǒng)的人工測試不同,它將測試環(huán)境進(jìn)行模塊化管理[3],如圖2 所示。自動測試環(huán)境主要由被測車載設(shè)備、仿真測試環(huán)境和自動測試系統(tǒng)3 部分組成。其中,自動測試系統(tǒng)由TestStand 序列執(zhí)行引擎、TestManager 測試管理器和SimControl 模擬器控制器3 部分組成。
圖2 基于Teststand 的列控車載系統(tǒng)自動測試方案
2.1.1 功能
TestStand 在自動測試系統(tǒng)中的主要功能是實現(xiàn)測試序列的編輯與執(zhí)行,并在測試完成后生成測試報告[4]。
2.1.2 接口
TestStand 提供的接口可供外部程序調(diào)用,以使用其測試引擎。
2.1.3 原理
TestStand 內(nèi)置了條件執(zhí)行語句、循環(huán)語句、Goto 語句,能夠?qū)崿F(xiàn)序列的選擇、循環(huán)、跳轉(zhuǎn),靈活地控制序列邏輯及執(zhí)行流程;TestStand 的嵌套、分層和復(fù)用機(jī)制,能夠生成較為復(fù)雜的序列結(jié)構(gòu)。在序列執(zhí)行的時序控制方面,TestStand 提供了延時語句。
2.2.1 功能
TestManager 的主要功能是發(fā)送操作指令,接收車輛信息、股道信息、模擬器狀態(tài)等信息,并進(jìn)行存儲。
2.2.2 接口
TestManager 提供調(diào)用TestStand 引擎的接口,以及發(fā)送操作命令、接收車輛信息的接口。
2.2.3 原理
TestManager 提供了用戶界面,通過調(diào)用TestStand 引擎來實現(xiàn)測試序列的執(zhí)行與報告的生成;通過網(wǎng)絡(luò)向模擬器控制腳本發(fā)送操作指令,來實現(xiàn)模擬器軟件的自動控制。
2.3.1 功能
Sim Control 實現(xiàn)了控制模擬器軟件的功能。
2.3.2 接口
Sim Control 提供了接收來自TestManager 的操作指令的接口;提供了與操作各個模擬器的接口函數(shù)。
2.3.3 原理
Sim Control 通過網(wǎng)絡(luò)接收來自TestManager 的模擬器操作指令,借助AutoIt 編寫操作腳本,通過操作控件句柄或控制鼠標(biāo)和鍵盤,實現(xiàn)對RBC 模擬器、GNSS/GNSSIMU 模擬器、DTS 模擬器、HOT 模擬器和DRU 模擬器的操作;同樣可借助AutoIt 讀取各模擬器界面上的信息,通過網(wǎng)絡(luò)發(fā)送給TestManager。
Sim Control 模擬器控制器工作原理見圖3。
圖3 Sim Control 模擬器控制器工作原理
2.4.1 功能
DMI Operator 實現(xiàn)對DMI 軟件的操作。
2.4.2 接口
DMI Operator 提供了接收來自TestManager 的按鍵指令的接口,以及操作各個模擬器的接口函數(shù)。
2.4.3 原理
DMI Operator通過網(wǎng)絡(luò)接收來自TestManager的模擬器按鍵指令,在進(jìn)行協(xié)議轉(zhuǎn)換后,DMI Operator將按鍵指令發(fā)送給DMI;同時,DMI 也將車輛狀態(tài)信息透傳給DMI Operator,DMI Operator 將這些車輛狀態(tài)信息保存到本地。在Test Manager 需要時,可向DMI Operator 發(fā)送請求信息。
基于Teststand 的列控車載系統(tǒng)自動測試主要實現(xiàn)測試過程中所有人工操作的自動化,包括模擬器操作、DMI 操作、列車運行控制、測試序列管理、測試報告生成、數(shù)據(jù)分析、屏幕錄制7 個功能模塊。
3.1.1 模擬器操作
在當(dāng)前的測試環(huán)境中,包含了多個模擬器。在測試過程中,模擬器的開啟、關(guān)閉、文件配置、按鈕點擊、文本輸入等操作均由系統(tǒng)進(jìn)行自動操作。
3.1.2 DMI 操作
當(dāng)前測試環(huán)境中DMI 軟件的啟動、關(guān)閉及按鍵的點擊均為自動操作。當(dāng)DMI 需要進(jìn)行文字輸入時,系統(tǒng)能夠自動切換數(shù)字或字母。
3.1.3 列車運行控制
在車輛運行過程中,車輛的速度由自動測試系統(tǒng)控制,DMI 會以200 ms 的周期向TestManager發(fā)送循環(huán)消息,包含車輛當(dāng)前速度、允許速度等信息,綜合這些信息計算出當(dāng)前的目標(biāo)速度和加速度,并在仿真車上進(jìn)行設(shè)置。
3.1.4 測試序列管理
TestStand 提供了編輯和執(zhí)行測試序列的平臺,序列之間可以進(jìn)行相互調(diào)用,實現(xiàn)了序列的復(fù)用[5]。
3.1.5 測試報告生成
TestStand 內(nèi)置了多種測試報告模板,將測試序列中所有需要輸出的判定點加入到報告模板中。在測試過程中,這些判定點(Pass/Fail Test) 會將實際輸出值與期望值進(jìn)行對比,如果相同,則表示該判定點通過(Pass);否則,判定點失?。‵ail)。測試序列執(zhí)行完成后,這些判定點的結(jié)果會輸出到測試報告中,并以HTML/ATML/XML格式保存至本地[6]。
3.1.6 數(shù)據(jù)分析
測試序列在執(zhí)行過程中,自動測試系統(tǒng)會將JRU(列車數(shù)據(jù)記錄單元)記錄的車輛運行狀態(tài)等各項信息與真實線路數(shù)據(jù)表以公里標(biāo)為基準(zhǔn)進(jìn)行比對,比對結(jié)果記錄并保存到日志中。
3.1.7 屏幕錄制
在測試序列開始時開啟屏幕錄制,結(jié)束時停止屏幕錄制,并將視頻保存到本地。
在TestStand 中,一個完整的測試序列分為3 個部分:Setup(準(zhǔn)備)、Main(主步驟)、Cleanup(清理)。其中,Setup 部分包含了測試所需環(huán)境的準(zhǔn)備步驟,Main 為測試主體,Cleanup 包含測試環(huán)境清理步驟。本系統(tǒng)的運行流程主要分為5 個步驟:環(huán)境初始化、測試準(zhǔn)備、測試中、測試結(jié)束和環(huán)境“清理”,見圖4。
在該自動測試系統(tǒng)中,Sim Control 由多個控制腳本組成[7],采用Python 語言開發(fā),使用AutoIt Window Info 工具可以檢測模擬器窗體及控件是否可識別,針對不同情況采用不同的控制方式。
圖4 測試流程
1)句柄操作方式。對于使用標(biāo)準(zhǔn)Windows 控件開發(fā)用戶界面的模擬器,在控制腳本程序中引入PyAutoIt 庫,使用AutoIt 方法進(jìn)行句柄操作。由于軟件的窗體與控件的句柄都是唯一的,所以可以通過句柄實現(xiàn)精準(zhǔn)控制,包括點擊、拖拽、輸入等操作。
2)像素定位方式。當(dāng)窗體中的控件無法識別時,可通過控件相對窗體的像素偏移來對控件進(jìn)行定位,使用PyAutoIt 中的方法,對特定像素點進(jìn)行點擊操作。當(dāng)某個控件存在顏色變化時,也可以通過獲取特定像素點的顏色,來獲取該控件的狀態(tài)。
3)網(wǎng)絡(luò)協(xié)議方式。當(dāng)窗體中的控件無法識別,且需要進(jìn)行文本輸入操作時,需要模擬器與SimControl 通過網(wǎng)絡(luò)通信實現(xiàn)操控。
以上幾種方式可以混合使用,例如模擬器的窗體均可使用句柄進(jìn)行操作。當(dāng)模擬器中的控件為標(biāo)準(zhǔn)控件與第三方控件混合使用時,使用句柄對標(biāo)準(zhǔn)控件進(jìn)行操作,通過像素定位或者網(wǎng)絡(luò)協(xié)議對第三方控件進(jìn)行操控。
基于TestStand 平臺,并以測試用例為范本,完成測試序列的編寫。本系統(tǒng)提供了豐富的元操作可供調(diào)用,例如,模擬器啟動、關(guān)閉、車載上電、加車、刪車、設(shè)置車輛目標(biāo)速度、加速度、設(shè)置牽引、制動、DMI 按鍵點擊、DMI 文字輸入、設(shè)置道岔、辦理發(fā)車、接車進(jìn)路、設(shè)置信號機(jī)狀態(tài)等一系列的基礎(chǔ)操作,測試人員可以通過編寫通用子序列,供其他序列進(jìn)行調(diào)用。以下為測試序列參考示例。
1)初始化:啟動HOT 模擬器、DTS 模擬器、GNSS/GNSSIMU 模擬器、本站及前方站的RBC模擬器和DRU 模擬器,通過TBTS 仿真車接口軟件給車載設(shè)備上電。
2)開始錄屏。
3)設(shè)置道岔、信號機(jī):設(shè)置相應(yīng)進(jìn)路的道岔和信號機(jī)狀態(tài),并辦理發(fā)車和接車進(jìn)路。
4) 添加列車:在本站添加列車并設(shè)置變量,例如股道號、列車長度、偏移距離、車次號、上下行方向、司控端等信息。
5)開始記錄數(shù)據(jù):控制DRU 模擬器開始接收并記錄數(shù)據(jù)。
6)發(fā)車測試:操作DMI 按鍵,進(jìn)行發(fā)車測試(調(diào)用發(fā)車測試子序列)。
7)完整性測試:操作DMI 按鍵,進(jìn)行完整性測試(調(diào)用完整性測試子序列)。
8)車輛行駛:序列采用while 循環(huán)進(jìn)行控制,通過不斷獲取車輛信息和股道信息,動態(tài)地調(diào)整TBTS 中車輛的加速度和目標(biāo)速度,實現(xiàn)車輛的“自動駕駛”。
9) RBC 模擬器換站:當(dāng)車輛行駛到前方站后,啟動下一站的RBC 模擬器,關(guān)閉上一站RBC模擬器。
10)停車:當(dāng)車輛到達(dá)車站后,TestStand 根據(jù)站內(nèi)信號機(jī)控制車輛速度,使車輛停止行駛。
11)清理工作:如果車輛需要繼續(xù)行駛,則重復(fù)(8)(9)(10)步驟;否則,當(dāng)車輛停穩(wěn)后跳出循環(huán),刪除列車并停止DRU 模擬器數(shù)據(jù)記錄,停止錄屏并關(guān)閉所有模擬器。
12)行車數(shù)據(jù)分析:Sim Control 對DRU 模擬器記錄的json 數(shù)據(jù)進(jìn)行解析分析,并將結(jié)果返回給TestStand,作為測試結(jié)果的一個判定節(jié)點。
13) 生成測試報告:完成以上所有步驟后,TestStand 將所有判定節(jié)點輸出到測試報告中,并保存到本地。
對應(yīng)TestStand 中測試序列的3 個部分,Setup、Main 和Cleanup,在上述示例中,Setup 中包含步驟1,Main 中包含步驟2~12,Cleanup 中包含步驟13。
基于Teststand 的列控車載系統(tǒng)自動測試方案實現(xiàn)了測試過程的自動化,使用TestStand 測試引擎及AutoIt 自動操作腳本進(jìn)行系統(tǒng)開發(fā),其中TestStand 提供了測試序列的編輯與執(zhí)行、測試報告生成等功能,AutoIt 實現(xiàn)了對測試過程中各個軟件的自動控制。本系統(tǒng)相較于傳統(tǒng)人工測試,提高了測試效率及測試質(zhì)量,節(jié)省了時間和人力成本,對于測試要求較高的軌道交通信號行業(yè)具有實際意義。為進(jìn)一步提高系統(tǒng)的測試效率及自動化程度,未來可從以下幾方面進(jìn)行功能完善和優(yōu)化:①充分利用TestStand 支持并行測試的特性,實現(xiàn)多個用例同時測試[8];②引入機(jī)械裝置模擬人手點按DMI按鍵;③引入監(jiān)控設(shè)備,對DMI 進(jìn)行拍攝,并通過圖像識別實時地獲取DMI 顯示內(nèi)容;④引入自動部署功能;⑤利用算法優(yōu)化測試路徑,提高測試效率[9]。