趙 鑫,岳 青,易冬陽(yáng),韓春艷
(成都國(guó)信安信息產(chǎn)業(yè)基地有限公司,四川 成都 610000)
接口測(cè)試是測(cè)試系統(tǒng)組件間接口的一種測(cè)試,主要用于檢測(cè)外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)子系統(tǒng)之間的交互點(diǎn)。測(cè)試的重點(diǎn)是要檢查數(shù)據(jù)的交換、傳遞和控制管理過(guò)程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。嵌入式系統(tǒng)在開(kāi)展接口測(cè)試和密碼綜合性測(cè)試時(shí)[1],主要受到兩個(gè)因素影響。一是被測(cè)接口的通信協(xié)議各異,發(fā)送和接收的協(xié)議數(shù)據(jù)需結(jié)合通信協(xié)議,人工逐個(gè)字節(jié)地比對(duì)協(xié)議數(shù)據(jù)內(nèi)容,才能清楚數(shù)據(jù)內(nèi)容含義,同時(shí)響應(yīng)數(shù)據(jù)需編寫(xiě)相應(yīng)的測(cè)試代碼進(jìn)行測(cè)試。該方式對(duì)測(cè)試人員專(zhuān)業(yè)編程設(shè)計(jì)能力有較高要求,同時(shí)受測(cè)試周期長(zhǎng)、測(cè)試資源占用率高的影響,對(duì)整體的測(cè)試任務(wù)形成了技術(shù)和效率瓶頸。二是被測(cè)系統(tǒng)的設(shè)備接口形態(tài)不同,更換被測(cè)設(shè)備需要同時(shí)更換測(cè)試設(shè)備,“一測(cè)一換”增加了測(cè)試的繁瑣度。
通用接口協(xié)議測(cè)試工具以“一對(duì)多”“集成化”“自動(dòng)化”為目標(biāo),使用可配置的XML文件格式描述通信接口協(xié)議,并利用PXI總線易擴(kuò)展、熱插拔、高可靠性的特性進(jìn)行設(shè)計(jì),實(shí)現(xiàn)了對(duì)E1、K、RS232C、RS422、USB3.0、以太網(wǎng)接口及相關(guān)協(xié)議的一致性測(cè)試和接口性能的可靠性測(cè)試。針對(duì)不同接口的測(cè)試,只需讀取配置完成的XML格式的接口協(xié)議和用例流程驅(qū)動(dòng)配置文件,就可進(jìn)行字節(jié)級(jí)別的協(xié)議數(shù)據(jù)解析和自動(dòng)應(yīng)答,整體壓縮了測(cè)試周期,簡(jiǎn)化了測(cè)試環(huán)境,突破了效率瓶頸。
通用接口協(xié)議測(cè)試工具總體分為三部分——上位機(jī)、下位機(jī)和接口驅(qū)動(dòng)程序。通用接口協(xié)議測(cè)試工具設(shè)計(jì)過(guò)程采用模塊化、層次化、可擴(kuò)展的設(shè)計(jì)理念,構(gòu)建了靈活開(kāi)放的技術(shù)體系架構(gòu)。當(dāng)后期新增測(cè)試對(duì)象時(shí),只需制作新接口模塊適配單元和編制新的協(xié)議,編寫(xiě)狀態(tài)機(jī)操作代碼,就可完成新接口的測(cè)試。工具系統(tǒng)架構(gòu)如圖1所示。
圖1 工具系統(tǒng)架構(gòu)
上位機(jī)的運(yùn)行環(huán)境為Window7,運(yùn)行框架為.net FrameWork 4.0,采用C#語(yǔ)言開(kāi)發(fā)。上位機(jī)技術(shù)框架的選擇基于兩點(diǎn):一是Windows 7包含.NET Framework4.0托管代碼編程模型,上位機(jī)的運(yùn)行無(wú)需安裝其他Windows組件;二是C#是一種面向?qū)ο蟮恼Z(yǔ)言,可以用來(lái)構(gòu)建在.NET Framework上運(yùn)行的各種應(yīng)用程序。它與Windows軟件(Win32 DLL)交互,可以通過(guò)一個(gè)“互操作”的過(guò)程來(lái)實(shí)現(xiàn)。
上位機(jī)總體分為5個(gè)部分——界面管理模塊、用例驅(qū)動(dòng)器、載荷生成器、協(xié)議解析器和結(jié)果分析器,模塊關(guān)系如圖2所示。
圖2 上位機(jī)模塊關(guān)系
上位機(jī)各模塊工作以用例驅(qū)動(dòng)器為核心。用例驅(qū)動(dòng)器、協(xié)議解析器、結(jié)果分析器三個(gè)核心模塊使用了可擴(kuò)展標(biāo)記語(yǔ)言(XML)描述其存儲(chǔ)結(jié)構(gòu)??蓴U(kuò)展標(biāo)記語(yǔ)言(XML)具有可擴(kuò)展性、結(jié)構(gòu)化和靈活性,同時(shí)具備定義嚴(yán)格、語(yǔ)法明確、表示方便等特點(diǎn)[2],使得XML語(yǔ)言非常適合用來(lái)描述三個(gè)核心模塊。用XML語(yǔ)言描述和組織測(cè)試用例,用例驅(qū)動(dòng)器讀取用例文件驅(qū)動(dòng)測(cè)試流程運(yùn)行,能夠使測(cè)試數(shù)據(jù)、測(cè)試流程、接口協(xié)議相分離,有利于測(cè)試數(shù)據(jù)的維護(hù)與重用。
界面管理模塊主要以圖形化的界面提供給用戶使用,包括接口協(xié)議編輯、用例編輯、載荷數(shù)據(jù)管理和測(cè)試結(jié)果顯示等功能。
載荷生成器用于生成流程中使用的載荷,載荷根據(jù)指定的協(xié)議模板填充到測(cè)試數(shù)據(jù)指定位置。載荷生成有兩種方式:一是由用戶定義生成規(guī)則(隨機(jī)或是重復(fù));二是直接導(dǎo)入測(cè)試數(shù)據(jù)文件。載荷支持4種格式:二進(jìn)制、十六進(jìn)制、八進(jìn)制、BCD碼。
上位機(jī)和下位機(jī)的通信依賴于接口驅(qū)動(dòng)程序。接口驅(qū)動(dòng)程序使用C++語(yǔ)言編寫(xiě),編譯生成動(dòng)態(tài)鏈接庫(kù)提供給上位機(jī)調(diào)用。動(dòng)態(tài)鏈接庫(kù)負(fù)責(zé)上位機(jī)和下位機(jī)通信專(zhuān)有協(xié)議數(shù)據(jù)解析,包括5個(gè)接口——設(shè)備卡檢測(cè)、設(shè)備卡打開(kāi)、發(fā)送數(shù)據(jù)、接收數(shù)據(jù)、設(shè)備卡關(guān)閉。
下位機(jī)是通用多接口協(xié)議的測(cè)試設(shè)備,包括零槽、機(jī)箱和接口協(xié)議測(cè)試卡。設(shè)計(jì)框圖如圖3所示。
圖3 下位機(jī)總體設(shè)計(jì)
零槽和接口協(xié)議測(cè)試卡通過(guò)機(jī)箱背板的CPCI接口進(jìn)行通信。零槽為主控制板,搭載Windows7操作系統(tǒng)和控制軟件。機(jī)箱為設(shè)備供電,并提供分別與零槽和接口協(xié)議測(cè)試卡通信連接的CPCI接口。接口協(xié)議測(cè)試卡提供被測(cè)設(shè)備電源進(jìn)行協(xié)議通信、數(shù)據(jù)處理和控制軟件進(jìn)行交互。
零槽包括第一PXI總線[3]模塊、主控模塊、USB接口模塊和以太網(wǎng)接口模塊。第一PXI總線模塊通過(guò)CPCI接口與機(jī)箱背板連接;主控模塊通過(guò)印刷電路與第一PXI總線模塊、USB接口模塊和以太網(wǎng)接口模塊的輸入輸出端相連,主控模塊采用Windows7操作系統(tǒng),安裝控制軟件;USB接口模塊通過(guò)USB口與外部設(shè)備連接;以太網(wǎng)模塊接口模塊通過(guò)以太網(wǎng)口實(shí)現(xiàn)網(wǎng)絡(luò)訪問(wèn),實(shí)現(xiàn)10/100/1 000 Mb/s自適應(yīng)。
接口協(xié)議測(cè)試卡包括第二PXI總線模塊、數(shù)據(jù)處理與接口控制模塊、接口模塊和電源模塊。第二PXI總線模塊通過(guò)CPCI接口與機(jī)箱背板連接;數(shù)據(jù)處理與接口控制模塊包括接口配置單元和數(shù)據(jù)處理單元,接口配置單元和數(shù)據(jù)處理單元通過(guò)印刷電路與接口模塊相連;接口配置單元設(shè)置當(dāng)前測(cè)試所需接口類(lèi)型和通信速率,數(shù)據(jù)處理單元將數(shù)據(jù)進(jìn)行臨時(shí)存儲(chǔ),然后封裝處理后發(fā)送,確保正常通信;接口模塊包括異步串行接口單元、同步串行接口單元、IO控制接口單元、總線接口單元、顯示屏接口單元、自定義鍵盤(pán)接口單元、音頻接口單元和基帶接口單元;接口模塊的一端通過(guò)定制線纜與被測(cè)設(shè)備連接,另一端通過(guò)印刷電路與數(shù)據(jù)處理與接口控制模塊連接;電源模塊通過(guò)印刷電路與CPIO接口連接,將機(jī)箱電源轉(zhuǎn)換為+5 V、+12 V、5 V、-10 V、-12 V五種電源,由定制線纜連接至被測(cè)設(shè)備[4]。
接口協(xié)議模板使用XML語(yǔ)言描述,用戶在界面管理模塊實(shí)現(xiàn)自定義。接口協(xié)議模板定義如圖4所示。
圖4 接口協(xié)議模板
標(biāo)簽 1:<ProtocolTemplet></ProtocolTemplet> 模板開(kāi)始和結(jié)束標(biāo)記。
name表示模板名稱。
tstart=”1”表示載荷的開(kāi)始位置(開(kāi)始字節(jié)),tend=”0”表示載荷的結(jié)束位置(結(jié)束字節(jié))。
標(biāo)簽2:<P></P>關(guān)鍵字定義協(xié)議的組成。
length用十進(jìn)制表示長(zhǎng)度,以字節(jié)為單位。Length是必須定義項(xiàng),如果不具備,那么必須包含MaxLength和MinLength的定義。
type表示類(lèi)型,必須定義。Type有三種類(lèi)型:FixValue(固定值)、CalcValue(計(jì)算值)和InputValue(輸入值)。
name表示名稱,必須定義,且不重復(fù)。
inputtype表示輸入類(lèi)型。當(dāng)type=”InputValue”時(shí),定義輸入項(xiàng)類(lèi)型。
Inputtype有三個(gè)取值:LongInput(長(zhǎng)文本)、ShortInput(短文本)和FileInput(文件導(dǎo)入)。
rule表示計(jì)算值規(guī)則,當(dāng)type=”CalcValue” 時(shí),必須定義rule。
rule有3種取值:FrameCount(計(jì)算幀長(zhǎng))、DataCount(計(jì)算target目標(biāo)長(zhǎng)度)和CRC(使用動(dòng)態(tài)鏈接庫(kù)計(jì)算target目標(biāo)校驗(yàn)碼)。
當(dāng) type=”CalcValue”、rule=”CRC” 時(shí),DllName=”動(dòng)態(tài)鏈接庫(kù)路徑”,F(xiàn)uncName=”函數(shù)名稱”。
target目標(biāo)標(biāo)簽只針對(duì)rule為DataCount/CRC時(shí)生效。
target為CRC時(shí),可以計(jì)算一個(gè)區(qū)間的CRC,用target=”name3-name4”表示。
測(cè)試用例主要包含用例基本信息配置、狀態(tài)機(jī)節(jié)點(diǎn)、配置協(xié)議和狀態(tài)機(jī)配置4個(gè)主要部分。測(cè)試用例配置示意圖如圖5所示。
測(cè)試用例設(shè)計(jì)時(shí),每一個(gè)狀態(tài)節(jié)點(diǎn)均包含一個(gè)狀態(tài)機(jī)。設(shè)計(jì)三要素為——事件、轉(zhuǎn)換狀態(tài)和操作。本設(shè)計(jì)中定義見(jiàn)表1。
圖5 測(cè)試用例配置
表1 狀態(tài)機(jī)設(shè)計(jì)要素定義
狀態(tài)機(jī)支持的函數(shù)定義參見(jiàn)表2。
所有狀態(tài)機(jī)完成定義后,形成最終的測(cè)試用例。每一測(cè)試用例使用XML格式的文件存儲(chǔ),便于后續(xù)修改。
結(jié)果分析器模板使用XML語(yǔ)言描述,用于自動(dòng)解析有特殊含義的載荷,方便結(jié)果顯示,易于閱讀。結(jié)果分析器模板定義如圖6所示。
標(biāo)簽說(shuō)明:
標(biāo) 簽 1:<ResultDictionary></ResultDictionary>結(jié)果分析模板的開(kāi)始和結(jié)束標(biāo)記。
標(biāo)簽2:<Rule></Rule>字典規(guī)則,用于判斷當(dāng)前接收數(shù)據(jù)所匹配的規(guī)則,并獲取對(duì)應(yīng)規(guī)則下的值。
Condition匹配當(dāng)前規(guī)則的條件,如果子節(jié)點(diǎn)含有Conditions,則不響應(yīng)此條件。值類(lèi)型OP表示取包含專(zhuān)有協(xié)議的數(shù)據(jù)包,IP表示取專(zhuān)有協(xié)議的載荷。
表2 狀態(tài)機(jī)函數(shù)定義
圖6 結(jié)果分析器模板
Result匹配當(dāng)前規(guī)則且當(dāng)前規(guī)則的子節(jié)點(diǎn)規(guī)則均未匹配,則將其作為接收數(shù)據(jù)所匹配的結(jié)果。
標(biāo)簽3:<param></param>:是<Rule>子節(jié)點(diǎn),表示規(guī)則結(jié)果的參數(shù)。結(jié)果中含有{0},則對(duì)應(yīng)替換第一個(gè)param子節(jié)點(diǎn),以此類(lèi)推。
value表示當(dāng)前參數(shù)對(duì)應(yīng)的值。
Constants表示對(duì)value值進(jìn)行常數(shù)匹配轉(zhuǎn)換。
標(biāo) 簽 4:<Conditions></Conditions> 是 <Rule>子節(jié)點(diǎn),表示當(dāng)前規(guī)則的條件,與Rule的condition屬性多選一,優(yōu)先級(jí)策略是后一個(gè)Conditions優(yōu)先級(jí)大于前一個(gè)Conditions,大于Rule的condition屬性優(yōu)先級(jí)。
Mer表示規(guī)則判斷條件,值為OR則子屬性的condition之間成立按照或條件匹配,值為AND則子屬性的condition之間成立按照且條件匹配。
標(biāo)簽5:<Condition></Condition>是<Conditions>子節(jié)點(diǎn)。
exp表示當(dāng)前節(jié)點(diǎn)的規(guī)則。
標(biāo)簽 6:<Constants></Constants> 是字典結(jié)果中定義的常量,通過(guò)指定key替換常量值。
name常量集合名:定義當(dāng)前常量集合的名稱,便于字典結(jié)果直接引用。
標(biāo)簽 7:<Constant></Constant> 是 <Constants> 子節(jié)點(diǎn),定義常量集合下的一個(gè)常量name-value的映射。
Name為常量名,常量關(guān)鍵值為key。
value為常量對(duì)應(yīng)的值。
接口驅(qū)動(dòng)程序包含5個(gè)接口,使用靜態(tài)方式調(diào)用。
(1)端口查詢:通過(guò)端口號(hào)查詢?cè)O(shè)備在線情況。
接 口 函 數(shù):public static extern intLdxc_DeviceFind(UInt16 DeviceNumber)
參數(shù)說(shuō)明:DeviceNumber為設(shè)備端口號(hào)。
(2)設(shè)備打開(kāi):初始化打開(kāi)板卡端口對(duì)應(yīng)的設(shè)備。
接口函數(shù):public static extern int Ldxc_DeviceInit(uint index,ref uint device)
參數(shù)說(shuō)明:index為設(shè)備端口號(hào);device為獲取設(shè)備連接詳情實(shí)體對(duì)象。
(3)設(shè)備編號(hào):通過(guò)端口號(hào)查詢?cè)O(shè)備編號(hào)。
接 口 函 數(shù):public static extern int Ldxc_DeviceID(uint device,byte[]buffer)
參數(shù)說(shuō)明:device為查詢目標(biāo)設(shè)備;buffer為存儲(chǔ)設(shè)備編號(hào)字節(jié)數(shù)組。
(4)設(shè)備關(guān)閉:通過(guò)端口號(hào)查詢?cè)O(shè)備信息。
接口函數(shù):public static extern int Ldxc_DeviceQuit(uint device)
參數(shù)說(shuō)明:device為關(guān)閉目標(biāo)設(shè)備。
(5)數(shù)據(jù)讀?。鹤x取指定目標(biāo)的數(shù)據(jù)。
接口函數(shù):public static extern int Ldxc_read(uint device,byte[] buffer,ref int len)
參數(shù)說(shuō)明:device為讀取目標(biāo)設(shè)備;buffer為讀取內(nèi)容;len為數(shù)據(jù)長(zhǎng)度。
(6)數(shù)據(jù)發(fā)送:向指定目標(biāo)發(fā)送數(shù)據(jù)。
接口函數(shù):public static extern int Ldxc_write(uint device,byte[] buffer,int len)
參數(shù)說(shuō)明:device為發(fā)送目標(biāo)設(shè)備;buffer為發(fā)送內(nèi)容;len為發(fā)送長(zhǎng)度。
嵌入式系統(tǒng)現(xiàn)有接口測(cè)試方法存在測(cè)試數(shù)據(jù)不易模擬和分析、硬件接口形態(tài)各異、多數(shù)測(cè)試需“一測(cè)一換”等問(wèn)題,嚴(yán)重影響測(cè)試效率和準(zhǔn)確性。因此,從上位機(jī)和下位機(jī)兩個(gè)方面設(shè)計(jì)實(shí)現(xiàn)了通用多接口協(xié)議測(cè)試工具。本測(cè)試工具軟件系統(tǒng)設(shè)計(jì)使用XML可標(biāo)記擴(kuò)展語(yǔ)言描述和存儲(chǔ)“用例驅(qū)動(dòng)器”“協(xié)議解析器”“結(jié)果解析器”三個(gè)核心模塊,能夠使測(cè)試數(shù)據(jù)、測(cè)試流程、接口協(xié)議相分離;硬件方面使用PXI總線易擴(kuò)展、熱插拔、高可靠性的特性進(jìn)行設(shè)計(jì),實(shí)現(xiàn)了對(duì)E1、K、RS232C、RS422、USB3.0、以太網(wǎng)接口等多接口的集成,同時(shí)預(yù)留了CPCI-E卡便于后期新增接口類(lèi)型。該測(cè)試工具不僅能大幅提高接口測(cè)試測(cè)試效率,簡(jiǎn)化測(cè)試環(huán)境,且具備通用型和擴(kuò)展性。
今后可考慮擴(kuò)充接口協(xié)議模型,增強(qiáng)其適應(yīng)性,并將測(cè)試工具和測(cè)試管理過(guò)程相結(jié)合,把簡(jiǎn)單的測(cè)試結(jié)果輸出文件轉(zhuǎn)換為符合測(cè)試規(guī)范的測(cè)試報(bào)告文檔集。