劉暉虎
(工業和信息化部電子第五研究所,廣州510610)
接口測試是針對軟件之間接口的一種測試,主要用于檢測外部系統與系統之間以及內部各個子系統之間的交互點。測試的重點是要檢查數據的交換、傳遞和控制管理過程,以及系統間的相互邏輯依賴關系等。目前,在軟件測試過程中,測試人員通常是使用通用的接口測試工具(如串口調試助手、網絡調試工具等)對被測接口進行通信數據發送與接收;在此過程中,測試人員通過人工手段對照接口協議文件的定義逐個字、字節甚至比特位去解析接口數據報文,再根據具體測試場景驗證數據的正確性。這種人工數據解析方式工作效率偏低、易出錯,且占用了整個測試過程中大量的時間與精力,導致前期的接口測試設計和后期的接口測試結果驗證工作時間不足,進而影響整體測試效率和效果。
基于此,提出一種基于C語言struct結構的接口數據解析方法,主要過程是將接口通信協議中定義的各報文格式采用struct結構進行描述,再使用Visual C++開發相應的接口數據解析軟件,該軟件讀取struct結構的協議描述文件,并設置當前測試場景下的字長、接口數據字節順序、協議描述字節順序等參數,測試人員僅需提供待解析的接口數據報文,以及選擇其對應的協議格式名稱,接口數據解析軟件便能自動完成數據解析工作,以列表形式給出該報文各字段的取值,供測試人員開展數據驗證工作;這種數據解析方法能夠將測試人員從繁重的數據解析工作中解放出來,將更多精力投放到測試設計、測試驗證工作中,有效地提高測試效率。
根據C語言的規定,“結構”是一種構造類型,它由若干個“成員”組成,每個成員是一個基本數據類型或者是一個構造類型。定義一個結構的一般形式為:
struct結構名
{
//成員列表
};
成員列表由若干個成員組成,每個成員都是結構的一個組成部分。對每個成員也必須作類型說明,其形式為:
類型說明符成員名;
成員名的命名應符合標識符的書寫規定。以下是一個結構定義的例子:
struct student
{
char name[20];
int age;
};
在這個結構定義中,結構名為student,該結構由2個成員組成。第一個成員為name,類型為字符數組;第二個成員為age,類型為整型。
下面是某型軟件接口通信協議中一個普通數據幀格式示例:

表1 接口協議格式示例
采用struct結構描述該數據幀協議格式如下:(注:為方便測試人員理解,標識符命名應支持中文)
struct數據幀
{
byte起始標志位; //固定為0x7E
byte地址位; //取值范圍:0x60~0x6B
byte彈位號; //1號彈位:0x11,2號彈位:0x22,3 號彈位:0x33,
4號彈位:0x44,5號彈位:0x55,6號彈位:0x66
byte彈動延遲信息_高字節;
byte彈動延遲信息_中字節;
byte彈動延遲信息_低字節;
short校驗位;
byte結束標志位; //固定為0x7E
};
接口數據解析流程主要分為以下幾個階段,如圖1所示:
(1)編寫并導入協議描述文件
(2)設置參數,包括接口數據字長、協議字節順序、接口數據字節順序
(3)輸入待解析報文
(4)選擇協議格式名稱
(5)輸出報文解析結果列表
具體的實現過程為:
(1)編寫并導入協議文件
將被測軟件的接口通信協議按照struct結構要求編寫協議描述文件,每1個報文格式對應1個struct結構體,且結構體名稱即為報文名稱,文件保存為.h文件形式。

圖1 接口數據解析軟件工作流程
通常在被測軟件源代碼中已有用于描述接口協議的.h文件,測試人員僅需以該文件為基礎進行適當修改,例如將變量名更改為中文,添加各變量的注釋等。
協議文件準備好后,便可作為配置文件,在接口數據解析軟件界面進行導入。接口數據解析軟件應具備語法驗證功能,對導入的協議文件中struct結構體源代碼進行語法檢查,并報告錯誤。
(2)設置協議字節順序、設置接口數據字節順序、設置接口數據字長
考慮到在不同運行環境下,計算機字長是不同的,因此接口數據解析軟件應能夠設置接口數據字長(單字節、2字節、4字節等)。當接口數據字長設置為多字節時,還應考慮協議描述文件中每個字的高低字節順序,以及接口數據的高低字節順序。具體如圖2所示。

圖2 參數設置界面
(3)數據解析
導入協議描述文件并設置好相應參數后,測試人員便可以將接口測試工具接收到的報文數據輸入接口數據解析軟件中,并選定協議列表中某一個報文名稱,接口數據解析軟件按照協議描述文件中定義的struct結構自動對報文數據進行解析,并以列表形式顯示各字段的取值,供測試人員開展下一步的數據驗證工作。如圖3所示:

圖3 數據解析結果顯示界面
接口數據解析軟件已成功應用于多個型號的軟件測試中,將測試人員開展接口測試時的主要精力從解析接口通信報文工作中解放出來,投入到接口測試設計、結果驗證中,有效地提高了測試效率;
同時,將接口數據解析模塊封裝為Windows動態鏈接庫,應用于1553B總線自動化測試工具、串口調試工具等接口測試工具中,幫助測試人員快速解析其關注的接口數據,給出解析結果供后端開展自動化結果驗證、全流程自動化測試等。