文/黃榮 張劍平 高偉松
隨著航空技術的快速發展, 電子裝備的多樣化和復雜化程度不斷提高, 對相應的測試設備提出了越來越高的測試要求,使得測試設備更新速度加快、自動化程度日益提高。
為了滿足各種復雜電子裝備的測試需求,科研院所相繼研制了各種專用的測試設備。然而在電子裝備快速發展的歷程中,這種專用測試設備的研制,就顯露出了其浪費系統資源、更新速度慢、升級困難等諸多缺點。因此,隨著各種測試設備研制需求的不斷增加,一種模塊化、通用化的測試設備就越顯重要。
模塊化通用測試設備研制需求是基于軍品研究所2017年產品測試類基礎設施配置需求統計分析以及各型號軟件測試要求(如實時性要求、安全性測試、強度測試等)獲取。本文將從模塊化通用測試設備系統方案、軟件ETest_RT 平臺簡介、自動化測試三個方面進行描述。
模塊化測試設備由主控計算機以及五大類、共九種測試模塊構建,如圖1所示。主控計算機是通用測試設備的核心,通過以太網向各種測試模塊發送測試要求,同時接收各測試模塊反饋的信息,判斷產品工作狀態,生成測試報告。各種測試模塊按照主控計算機的指令,向被測產品提供相應信號,并采集被測產品回送的信號,或與被測產品建立通訊,實現產品測試,并向主控計算機反饋被測產品數據信息。模塊化通用測試設備系統采用ETestStudio 作為進行此次項目建設的基礎開發平臺。

圖1:模塊化通用測試設備系統組成框圖
模塊化測試設備平臺硬件包括主控計算機與測試模塊,主控計算機采用工控計算機,測試模塊采用PCI 構架的測控計算機,兩者之間采用以太網絡相連,硬件架構見圖1。模塊化測試設備平臺中的應用軟件主要包括測試設計子系統、測試運行子系統、測試監控與分析子系統。主控計算機和測試模塊均安裝ETestStudio 軟件,其中主控計算機主要執行測試方案設計、硬件環境配置、接收測試模塊返回數據進行監控,而測試模塊則負責按照主控計算機設計的方案執行并反饋數據至主控計算機,主控計算機配置為軟件服務端,測試模塊配置為軟件客戶端,兩者之間的通信如圖2所示。
如圖2所示,在主控計算機上的客戶端控制服務中配置各個測試模塊為客戶端,如各客戶端(測試模塊)IP 地址配置等,兩者之間的數據傳輸采用TCP/IP 以太網協議。通過主控計算機的設備規劃功能,將每個測試模塊中的信號采集設備與對應的客戶端建立關系。當主控計算機上測試客戶端發送測試指令時,測試模塊可以自動接收指令,并調用信號采集設備對應的API 函數,驅動信號采集設備向被測系統發送出模擬信號。這種方式不受網絡通信標準的影響,測試穩定性較高。
對于總線測試模塊,可分為高速總線、通用總線及專用總線測試模塊,每個測試模塊配置相應數量的總線模塊,故在使用模塊化通用測試設備后,僅需根據各型號通訊總線情況配置相應數量總線測試模塊,通過以太網與主控計算機建立連接,在主控計算機配置各測試模塊IP 地址,設計測試方案,并設計監控軟件。則測試模塊則會按照主控計算機設計的腳本自動運行。在執行過程中可通過監控軟件查看總線數據收發情況。因數據接收發送測試腳本均在測試模塊中運行,通過在測試腳本中設置時間來保證數據實時性要求。而對于測試擴展,則可通過多通道或多測試模塊運行,通過測試腳本設計來保證1 拖4 的要求。
ETest_RT的應用軟件由測試設計子系統、測試運行子系統、測試監控與分析子系統和測試輔助工具軟件組成。詳見圖3軟件功能架構。
該系統功能包含設計工作臺和設備資源管理。設計工作臺主要對待測產品及其對外接口進行建模,進行協議編輯及分析、創建測試監控軟件、建立硬件規劃、創建及管理測試用例,確定測試要準備的接口設備數量。其中創建的監控軟件對應于之前使用的測試軟件,區別在于該軟件開發是在ETest_RT 平臺基礎上開發,且該軟件僅需綁定屬性及綁定相應測試腳本等圖形操作開發,無需進行單獨編程。整個產品測試的核心在于測試腳本的設計,測試腳本能夠按照自定的時序控制方式實現向待測產品的數據交互和數據自動解析,將比特流解析成具有意義的用戶數據。設備資源管理軟件模塊提供了系統支持的測試設備及通道的管理功能,提供了系統設備擴展的接口。

表1

圖2:通信方式

圖3:軟件功能架構

圖4:RS232 接口仿真模型設計
該系統功能包含測試運行服務軟件、運行態執行端實時上位機、運行態執行端實時下位機。測試運行服務軟件包括測試調度臺(如用于調度哪個測試模塊進行通訊)、運行服務器和數據中心,它們是與客戶端軟件(測試模塊中軟件)相配合,驅動測試數據,進行自動化測試執行。運行態執行端是實現實時性的關鍵子系統,包括實時上位機和實時下位機。
數據監控器則以虛擬儀表或圖表方式顯示當前測試數據,與VC 及LabWindows 所開發的測試軟件界面相似。測試數據分析提供了對測試過程中數據的記錄,可以實現對歷史測試數據的查詢,并自動按照一定的模板格式創建測試用例單。
工具軟件提供了嵌入式系統測試時部分常用的軟件工具,主要包含計算器、曲線數據生成工具、協議模板管理等
本章節從自動化測試技術介紹、測試方案搭建、測試軟件開發以及測試方案執行四個方面進行介紹。
軟件測試自動化主要是通過使用自動測試工具,按照設計的機制,自動對被測系統進行測試的一種技術,它具有良好的可操作性、高效率和可重復性等特點。測試自動化是軟件測試中提高測試效率、測試覆蓋率和測試可靠性的重要手段。本文介紹的自動化測試均是基于Python 語言編寫的測試腳本。
軟件測試自動化存在如下優點:
(1)節省人力資源,降低測試成本。如在回歸測試中,如果使用的是手工方式,就需要大量的人力測試原有功能,而在自動化測試中,可以利用測試工具將原測試用例保存下來,重新運行一遍就可以了,這樣就節省了大量的人力資源;
(2)增強測試的穩定性和可靠性。通過測試工具進行自動測試,減少測試人員的過程干預,保證測試的穩定性。同時減少手工測試時人員可能產生的漏測或失誤。
(3)完備測試方法和手段。系統測試的基本要求是被測系統能盡量運行在真實的環境中,這要求嵌入式軟件必須實現實時、閉環、非侵入的系統測試,但如果完全依賴于真實的運行環境,由于很難創造各類可能會引起嵌入式軟件故障的輸入條件,導致對嵌入式軟件的測試很難達到充分性要求。就比如對數據從發送到接收的時效性、各總線數據按一定時序發送等測試手段。
以ETest_RT 平臺基礎上新建測試方案,首先須進行仿真模型搭建,對顯示器的通訊進行分析,以圖形化方式建立模型圖,如圖4RS232 接口仿真模型設計所示。
完成模型圖設計后,則是對每一路通訊協議進行定義,通過給定的ICD 格式用DPD 語言進行描述,以RS232 協議為例,協議見表1所示。
該協議共包含四個部分:數據包頭、命令、數據、校驗和,分別用DPD 語言描述:
(1)數據包頭:0xaa 0x55 兩個字節,需要用16 位無符號整形StandardUInt16 定義,也可以用兩個StandardUInt8 定義。
(2)命令:一個字節,需要用8 位無符號整形StandardUInt8 定義
(3)數據:一個字節,需要用8 位無符號整形StandardUInt8 定義
(4)校驗和:需要用校驗字段類型定義,并指定校驗算法、校驗位長度、以及校驗范圍
即該協議定義格式為:
Protocol Main
Segment 數據包頭 StandardUInt16 Default=0xaa55 ByteOrder=Big #數據包頭
Segment 命令 StandardUInt8 Default=0 #0x00:日模式 0x0a:夜模式
Segment 數據 StandardUInt8 Default=0 #0-255
Segment 校驗和 CRC Algorithm=CRC_SUM_8 BitCount=8 #校驗位
End
(1)Protocol、End:固定格式
(2)Main:協議名稱,可自定義
(3)Segment:定義協議字段關鍵字
(4)數據包頭:該字段的名稱,自定義
(5)StandardUInt16:該字段的數據類型,根據協議格式選擇不同的數據類型
(6)Default:為默認值
(7)ByteOrder:字節序(僅針對多字節數據),0xaa 為低字節,賦值時為0xaa55,則字節序為Big(大端模式);如果賦值為0x55aa,則字節序為Small(小端模式)
(8)校驗字段:用CRC 定 義,Algorithm 為校驗算法(提供常用算法,也可以自定義),BitCount 為校驗位長度
協議定義完成后,則需將實際連接的測試模塊與仿真模型中所使用的總線進行綁定,配置相應的波特率、通道等屬性,此時前期的準備工作已完成,后續則是開展測試的執行工作,具體見下文。
ETest_RT 可以用直觀的方式在測試過程中顯示測試數據。設計工作臺中提供了對測試監控界面的設計功能,用戶可以在監控設計面板上添加數據監控控件,并通過綁定協議字段或協議字段的計算公式,從而可以在監控運行時直觀地顯示測試數據的變化。在測試軟件開發時類似于VC 及LabWindows 進行圖形化界面設計,但區別在于其無需編寫代碼,只需綁定協議定義的屬性或綁定下面所涉及的腳本即可完成數據發送及接收的顯示,設計界面見圖5所示。

圖5:測試軟件設計界面
在完成上述步驟后,則進入測試的核心工作即測試腳本設計,測試腳本以Python 語言基礎,遵循Python 語法規則,用縮進代表語句塊。
Python 是一種解釋型、面向對象、動態數據類型的高級程序設計語言。具有開發效率高,語言簡潔,易閱讀,描述能力強、跨平臺、復用性良好,與C 或C++性能相同等特點。測試腳本包括了對嵌入式系統測試特性的描述,主要有測試輸入(發送數據)、獲取測試反饋(接收數據)以及執行時間控制等。
仍然以上述RS232 為例,在腳本中訪問協議字段的方法:數據連接對象名稱.字段名.Value,例如:COMW.命令.Value,就可以對其進行賦值、打印操作。在數據的發送與讀取有:數據連接對象.Write()、數據連接對象.BlockRead()(阻塞讀取方式)、數據連接對象.Read()(非阻塞讀取方式),即該腳本即可寫成如下所示:
def Main():
for i in range(1000):
COMW.數據包頭.Value = 0xaa55#給協議字段賦值
COMW.命令.Value = 0x00
COMW.數據.Value = 1
COMW.Write() #將數據組包并發送出去
COMR.BlockRead() #讀取返回的數據,并解析
print COMR.亮度.Value#打印讀取的數據值
print COMR.加熱狀態.Value
print COMR.日夜模式.ValueAPI.Common.Timer.Normal.Sleep(20) #延時,每隔20ms 發送一幀數據
Main()
該腳本實現了定時20ms 進行數據發送,其中只需將COMW、COMR 與監控軟件綁定即可實現監控軟件顯示,在腳本中設計可通過加載各種函數庫實現各種功能,通過if 語句判定用例是否通過,以及通過文本記錄整個測試過程中。包括在什么時間點發送什么數據接收什么數據結果怎么樣均能通過測試腳本設計。對于測試測試人員可以依據腳本設計復雜時序以達到性能、安全性、強度測試等要求內容。而且在腳本設計完成后,過程中腳本執行可無需人員在旁。對于回歸測試或者系統產品可直接借用測試腳本只需進行相應內容修改即可。但這也同時對測試工程師的技術要求提高。