基于struct结构的接口测试数据解析软件设计与实现
2018-10-13刘晖虎
刘晖虎
(工业和信息化部电子第五研究所,广州510610)
0 引言
接口测试是针对软件之间接口的一种测试,主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。目前,在软件测试过程中,测试人员通常是使用通用的接口测试工具(如串口调试助手、网络调试工具等)对被测接口进行通信数据发送与接收;在此过程中,测试人员通过人工手段对照接口协议文件的定义逐个字、字节甚至比特位去解析接口数据报文,再根据具体测试场景验证数据的正确性。这种人工数据解析方式工作效率偏低、易出错,且占用了整个测试过程中大量的时间与精力,导致前期的接口测试设计和后期的接口测试结果验证工作时间不足,进而影响整体测试效率和效果。
基于此,提出一种基于C语言struct结构的接口数据解析方法,主要过程是将接口通信协议中定义的各报文格式采用struct结构进行描述,再使用Visual C++开发相应的接口数据解析软件,该软件读取struct结构的协议描述文件,并设置当前测试场景下的字长、接口数据字节顺序、协议描述字节顺序等参数,测试人员仅需提供待解析的接口数据报文,以及选择其对应的协议格式名称,接口数据解析软件便能自动完成数据解析工作,以列表形式给出该报文各字段的取值,供测试人员开展数据验证工作;这种数据解析方法能够将测试人员从繁重的数据解析工作中解放出来,将更多精力投放到测试设计、测试验证工作中,有效地提高测试效率。
1 协议描述方法
根据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
};
2 软件设计实现
接口数据解析流程主要分为以下几个阶段,如图1所示:
(1)编写并导入协议描述文件
(2)设置参数,包括接口数据字长、协议字节顺序、接口数据字节顺序
(3)输入待解析报文
(4)选择协议格式名称
(5)输出报文解析结果列表
具体的实现过程为:
(1)编写并导入协议文件
将被测软件的接口通信协议按照struct结构要求编写协议描述文件,每1个报文格式对应1个struct结构体,且结构体名称即为报文名称,文件保存为.h文件形式。
图1 接口数据解析软件工作流程
通常在被测软件源代码中已有用于描述接口协议的.h文件,测试人员仅需以该文件为基础进行适当修改,例如将变量名更改为中文,添加各变量的注释等。
协议文件准备好后,便可作为配置文件,在接口数据解析软件界面进行导入。接口数据解析软件应具备语法验证功能,对导入的协议文件中struct结构体源代码进行语法检查,并报告错误。
(2)设置协议字节顺序、设置接口数据字节顺序、设置接口数据字长
考虑到在不同运行环境下,计算机字长是不同的,因此接口数据解析软件应能够设置接口数据字长(单字节、2字节、4字节等)。当接口数据字长设置为多字节时,还应考虑协议描述文件中每个字的高低字节顺序,以及接口数据的高低字节顺序。具体如图2所示。
图2 参数设置界面
(3)数据解析
导入协议描述文件并设置好相应参数后,测试人员便可以将接口测试工具接收到的报文数据输入接口数据解析软件中,并选定协议列表中某一个报文名称,接口数据解析软件按照协议描述文件中定义的struct结构自动对报文数据进行解析,并以列表形式显示各字段的取值,供测试人员开展下一步的数据验证工作。如图3所示:
图3 数据解析结果显示界面
3 结语
接口数据解析软件已成功应用于多个型号的软件测试中,将测试人员开展接口测试时的主要精力从解析接口通信报文工作中解放出来,投入到接口测试设计、结果验证中,有效地提高了测试效率;
同时,将接口数据解析模块封装为Windows动态链接库,应用于1553B总线自动化测试工具、串口调试工具等接口测试工具中,帮助测试人员快速解析其关注的接口数据,给出解析结果供后端开展自动化结果验证、全流程自动化测试等。