劉暉虎
(工業(yè)和信息化部電子第五研究所,廣州510610)
接口測試是針對軟件之間接口的一種測試,主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個(gè)子系統(tǒng)之間的交互點(diǎn)。測試的重點(diǎn)是要檢查數(shù)據(jù)的交換、傳遞和控制管理過程,以及系統(tǒng)間的相互邏輯依賴關(guān)系等。目前,在軟件測試過程中,測試人員通常是使用通用的接口測試工具(如串口調(diào)試助手、網(wǎng)絡(luò)調(diào)試工具等)對被測接口進(jìn)行通信數(shù)據(jù)發(fā)送與接收;在此過程中,測試人員通過人工手段對照接口協(xié)議文件的定義逐個(gè)字、字節(jié)甚至比特位去解析接口數(shù)據(jù)報(bào)文,再根據(jù)具體測試場景驗(yàn)證數(shù)據(jù)的正確性。這種人工數(shù)據(jù)解析方式工作效率偏低、易出錯(cuò),且占用了整個(gè)測試過程中大量的時(shí)間與精力,導(dǎo)致前期的接口測試設(shè)計(jì)和后期的接口測試結(jié)果驗(yàn)證工作時(shí)間不足,進(jìn)而影響整體測試效率和效果。
基于此,提出一種基于C語言struct結(jié)構(gòu)的接口數(shù)據(jù)解析方法,主要過程是將接口通信協(xié)議中定義的各報(bào)文格式采用struct結(jié)構(gòu)進(jìn)行描述,再使用Visual C++開發(fā)相應(yīng)的接口數(shù)據(jù)解析軟件,該軟件讀取struct結(jié)構(gòu)的協(xié)議描述文件,并設(shè)置當(dāng)前測試場景下的字長、接口數(shù)據(jù)字節(jié)順序、協(xié)議描述字節(jié)順序等參數(shù),測試人員僅需提供待解析的接口數(shù)據(jù)報(bào)文,以及選擇其對應(yīng)的協(xié)議格式名稱,接口數(shù)據(jù)解析軟件便能自動完成數(shù)據(jù)解析工作,以列表形式給出該報(bào)文各字段的取值,供測試人員開展數(shù)據(jù)驗(yàn)證工作;這種數(shù)據(jù)解析方法能夠?qū)y試人員從繁重的數(shù)據(jù)解析工作中解放出來,將更多精力投放到測試設(shè)計(jì)、測試驗(yàn)證工作中,有效地提高測試效率。
根據(jù)C語言的規(guī)定,“結(jié)構(gòu)”是一種構(gòu)造類型,它由若干個(gè)“成員”組成,每個(gè)成員是一個(gè)基本數(shù)據(jù)類型或者是一個(gè)構(gòu)造類型。定義一個(gè)結(jié)構(gòu)的一般形式為:
struct結(jié)構(gòu)名
{
//成員列表
};
成員列表由若干個(gè)成員組成,每個(gè)成員都是結(jié)構(gòu)的一個(gè)組成部分。對每個(gè)成員也必須作類型說明,其形式為:
類型說明符成員名;
成員名的命名應(yīng)符合標(biāo)識符的書寫規(guī)定。以下是一個(gè)結(jié)構(gòu)定義的例子:
struct student
{
char name[20];
int age;
};
在這個(gè)結(jié)構(gòu)定義中,結(jié)構(gòu)名為student,該結(jié)構(gòu)由2個(gè)成員組成。第一個(gè)成員為name,類型為字符數(shù)組;第二個(gè)成員為age,類型為整型。
下面是某型軟件接口通信協(xié)議中一個(gè)普通數(shù)據(jù)幀格式示例:
表1 接口協(xié)議格式示例
采用struct結(jié)構(gòu)描述該數(shù)據(jù)幀協(xié)議格式如下:(注:為方便測試人員理解,標(biāo)識符命名應(yīng)支持中文)
struct數(shù)據(jù)幀
{
byte起始標(biāo)志位; //固定為0x7E
byte地址位; //取值范圍:0x60~0x6B
byte彈位號; //1號彈位:0x11,2號彈位:0x22,3 號彈位:0x33,
4號彈位:0x44,5號彈位:0x55,6號彈位:0x66
byte彈動延遲信息_高字節(jié);
byte彈動延遲信息_中字節(jié);
byte彈動延遲信息_低字節(jié);
short校驗(yàn)位;
byte結(jié)束標(biāo)志位; //固定為0x7E
};
接口數(shù)據(jù)解析流程主要分為以下幾個(gè)階段,如圖1所示:
(1)編寫并導(dǎo)入?yún)f(xié)議描述文件
(2)設(shè)置參數(shù),包括接口數(shù)據(jù)字長、協(xié)議字節(jié)順序、接口數(shù)據(jù)字節(jié)順序
(3)輸入待解析報(bào)文
(4)選擇協(xié)議格式名稱
(5)輸出報(bào)文解析結(jié)果列表
具體的實(shí)現(xiàn)過程為:
(1)編寫并導(dǎo)入?yún)f(xié)議文件
將被測軟件的接口通信協(xié)議按照struct結(jié)構(gòu)要求編寫協(xié)議描述文件,每1個(gè)報(bào)文格式對應(yīng)1個(gè)struct結(jié)構(gòu)體,且結(jié)構(gòu)體名稱即為報(bào)文名稱,文件保存為.h文件形式。
圖1 接口數(shù)據(jù)解析軟件工作流程
通常在被測軟件源代碼中已有用于描述接口協(xié)議的.h文件,測試人員僅需以該文件為基礎(chǔ)進(jìn)行適當(dāng)修改,例如將變量名更改為中文,添加各變量的注釋等。
協(xié)議文件準(zhǔn)備好后,便可作為配置文件,在接口數(shù)據(jù)解析軟件界面進(jìn)行導(dǎo)入。接口數(shù)據(jù)解析軟件應(yīng)具備語法驗(yàn)證功能,對導(dǎo)入的協(xié)議文件中struct結(jié)構(gòu)體源代碼進(jìn)行語法檢查,并報(bào)告錯(cuò)誤。
(2)設(shè)置協(xié)議字節(jié)順序、設(shè)置接口數(shù)據(jù)字節(jié)順序、設(shè)置接口數(shù)據(jù)字長
考慮到在不同運(yùn)行環(huán)境下,計(jì)算機(jī)字長是不同的,因此接口數(shù)據(jù)解析軟件應(yīng)能夠設(shè)置接口數(shù)據(jù)字長(單字節(jié)、2字節(jié)、4字節(jié)等)。當(dāng)接口數(shù)據(jù)字長設(shè)置為多字節(jié)時(shí),還應(yīng)考慮協(xié)議描述文件中每個(gè)字的高低字節(jié)順序,以及接口數(shù)據(jù)的高低字節(jié)順序。具體如圖2所示。
圖2 參數(shù)設(shè)置界面
(3)數(shù)據(jù)解析
導(dǎo)入?yún)f(xié)議描述文件并設(shè)置好相應(yīng)參數(shù)后,測試人員便可以將接口測試工具接收到的報(bào)文數(shù)據(jù)輸入接口數(shù)據(jù)解析軟件中,并選定協(xié)議列表中某一個(gè)報(bào)文名稱,接口數(shù)據(jù)解析軟件按照協(xié)議描述文件中定義的struct結(jié)構(gòu)自動對報(bào)文數(shù)據(jù)進(jìn)行解析,并以列表形式顯示各字段的取值,供測試人員開展下一步的數(shù)據(jù)驗(yàn)證工作。如圖3所示:
圖3 數(shù)據(jù)解析結(jié)果顯示界面
接口數(shù)據(jù)解析軟件已成功應(yīng)用于多個(gè)型號的軟件測試中,將測試人員開展接口測試時(shí)的主要精力從解析接口通信報(bào)文工作中解放出來,投入到接口測試設(shè)計(jì)、結(jié)果驗(yàn)證中,有效地提高了測試效率;
同時(shí),將接口數(shù)據(jù)解析模塊封裝為Windows動態(tài)鏈接庫,應(yīng)用于1553B總線自動化測試工具、串口調(diào)試工具等接口測試工具中,幫助測試人員快速解析其關(guān)注的接口數(shù)據(jù),給出解析結(jié)果供后端開展自動化結(jié)果驗(yàn)證、全流程自動化測試等。