通用接口协议测试工具设计*

2018-11-07 02:22:16易冬阳韩春艳
通信技术 2018年11期
关键词:测试工具状态机测试用例

赵 鑫,岳 青,易冬阳,韩春艳

(成都国信安信息产业基地有限公司,四川 成都 610000)

0 引 言

接口测试是测试系统组件间接口的一种测试,主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换、传递和控制管理过程,以及系统间的相互逻辑依赖关系等。嵌入式系统在开展接口测试和密码综合性测试时[1],主要受到两个因素影响。一是被测接口的通信协议各异,发送和接收的协议数据需结合通信协议,人工逐个字节地比对协议数据内容,才能清楚数据内容含义,同时响应数据需编写相应的测试代码进行测试。该方式对测试人员专业编程设计能力有较高要求,同时受测试周期长、测试资源占用率高的影响,对整体的测试任务形成了技术和效率瓶颈。二是被测系统的设备接口形态不同,更换被测设备需要同时更换测试设备,“一测一换”增加了测试的繁琐度。

通用接口协议测试工具以“一对多”“集成化”“自动化”为目标,使用可配置的XML文件格式描述通信接口协议,并利用PXI总线易扩展、热插拔、高可靠性的特性进行设计,实现了对E1、K、RS232C、RS422、USB3.0、以太网接口及相关协议的一致性测试和接口性能的可靠性测试。针对不同接口的测试,只需读取配置完成的XML格式的接口协议和用例流程驱动配置文件,就可进行字节级别的协议数据解析和自动应答,整体压缩了测试周期,简化了测试环境,突破了效率瓶颈。

1 系统架构

通用接口协议测试工具总体分为三部分——上位机、下位机和接口驱动程序。通用接口协议测试工具设计过程采用模块化、层次化、可扩展的设计理念,构建了灵活开放的技术体系架构。当后期新增测试对象时,只需制作新接口模块适配单元和编制新的协议,编写状态机操作代码,就可完成新接口的测试。工具系统架构如图1所示。

图1 工具系统架构

1.1 上位机设计

上位机的运行环境为Window7,运行框架为.net FrameWork 4.0,采用C#语言开发。上位机技术框架的选择基于两点:一是Windows 7包含.NET Framework4.0托管代码编程模型,上位机的运行无需安装其他Windows组件;二是C#是一种面向对象的语言,可以用来构建在.NET Framework上运行的各种应用程序。它与Windows软件(Win32 DLL)交互,可以通过一个“互操作”的过程来实现。

上位机总体分为5个部分——界面管理模块、用例驱动器、载荷生成器、协议解析器和结果分析器,模块关系如图2所示。

图2 上位机模块关系

上位机各模块工作以用例驱动器为核心。用例驱动器、协议解析器、结果分析器三个核心模块使用了可扩展标记语言(XML)描述其存储结构。可扩展标记语言(XML)具有可扩展性、结构化和灵活性,同时具备定义严格、语法明确、表示方便等特点[2],使得XML语言非常适合用来描述三个核心模块。用XML语言描述和组织测试用例,用例驱动器读取用例文件驱动测试流程运行,能够使测试数据、测试流程、接口协议相分离,有利于测试数据的维护与重用。

界面管理模块主要以图形化的界面提供给用户使用,包括接口协议编辑、用例编辑、载荷数据管理和测试结果显示等功能。

载荷生成器用于生成流程中使用的载荷,载荷根据指定的协议模板填充到测试数据指定位置。载荷生成有两种方式:一是由用户定义生成规则(随机或是重复);二是直接导入测试数据文件。载荷支持4种格式:二进制、十六进制、八进制、BCD码。

1.2 接口驱动程序设计

上位机和下位机的通信依赖于接口驱动程序。接口驱动程序使用C++语言编写,编译生成动态链接库提供给上位机调用。动态链接库负责上位机和下位机通信专有协议数据解析,包括5个接口——设备卡检测、设备卡打开、发送数据、接收数据、设备卡关闭。

1.3 下位机设计

下位机是通用多接口协议的测试设备,包括零槽、机箱和接口协议测试卡。设计框图如图3所示。

图3 下位机总体设计

零槽和接口协议测试卡通过机箱背板的CPCI接口进行通信。零槽为主控制板,搭载Windows7操作系统和控制软件。机箱为设备供电,并提供分别与零槽和接口协议测试卡通信连接的CPCI接口。接口协议测试卡提供被测设备电源进行协议通信、数据处理和控制软件进行交互。

零槽包括第一PXI总线[3]模块、主控模块、USB接口模块和以太网接口模块。第一PXI总线模块通过CPCI接口与机箱背板连接;主控模块通过印刷电路与第一PXI总线模块、USB接口模块和以太网接口模块的输入输出端相连,主控模块采用Windows7操作系统,安装控制软件;USB接口模块通过USB口与外部设备连接;以太网模块接口模块通过以太网口实现网络访问,实现10/100/1 000 Mb/s自适应。

接口协议测试卡包括第二PXI总线模块、数据处理与接口控制模块、接口模块和电源模块。第二PXI总线模块通过CPCI接口与机箱背板连接;数据处理与接口控制模块包括接口配置单元和数据处理单元,接口配置单元和数据处理单元通过印刷电路与接口模块相连;接口配置单元设置当前测试所需接口类型和通信速率,数据处理单元将数据进行临时存储,然后封装处理后发送,确保正常通信;接口模块包括异步串行接口单元、同步串行接口单元、IO控制接口单元、总线接口单元、显示屏接口单元、自定义键盘接口单元、音频接口单元和基带接口单元;接口模块的一端通过定制线缆与被测设备连接,另一端通过印刷电路与数据处理与接口控制模块连接;电源模块通过印刷电路与CPIO接口连接,将机箱电源转换为+5 V、+12 V、5 V、-10 V、-12 V五种电源,由定制线缆连接至被测设备[4]。

2 关键技术实现

2.1 接口协议模板实现

接口协议模板使用XML语言描述,用户在界面管理模块实现自定义。接口协议模板定义如图4所示。

图4 接口协议模板

标签 1:<ProtocolTemplet></ProtocolTemplet> 模板开始和结束标记。

name表示模板名称。

tstart=”1”表示载荷的开始位置(开始字节),tend=”0”表示载荷的结束位置(结束字节)。

标签2:<P></P>关键字定义协议的组成。

length用十进制表示长度,以字节为单位。Length是必须定义项,如果不具备,那么必须包含MaxLength和MinLength的定义。

type表示类型,必须定义。Type有三种类型:FixValue(固定值)、CalcValue(计算值)和InputValue(输入值)。

name表示名称,必须定义,且不重复。

inputtype表示输入类型。当type=”InputValue”时,定义输入项类型。

Inputtype有三个取值:LongInput(长文本)、ShortInput(短文本)和FileInput(文件导入)。

rule表示计算值规则,当type=”CalcValue” 时,必须定义rule。

rule有3种取值:FrameCount(计算帧长)、DataCount(计算target目标长度)和CRC(使用动态链接库计算target目标校验码)。

当 type=”CalcValue”、rule=”CRC” 时,DllName=”动态链接库路径”,FuncName=”函数名称”。

target目标标签只针对rule为DataCount/CRC时生效。

target为CRC时,可以计算一个区间的CRC,用target=”name3-name4”表示。

2.2 测试用例实现

测试用例主要包含用例基本信息配置、状态机节点、配置协议和状态机配置4个主要部分。测试用例配置示意图如图5所示。

测试用例设计时,每一个状态节点均包含一个状态机。设计三要素为——事件、转换状态和操作。本设计中定义见表1。

图5 测试用例配置

表1 状态机设计要素定义

状态机支持的函数定义参见表2。

所有状态机完成定义后,形成最终的测试用例。每一测试用例使用XML格式的文件存储,便于后续修改。

2.3 结果分析器模板实现

结果分析器模板使用XML语言描述,用于自动解析有特殊含义的载荷,方便结果显示,易于阅读。结果分析器模板定义如图6所示。

标签说明:

标 签 1:<ResultDictionary></ResultDictionary>结果分析模板的开始和结束标记。

标签2:<Rule></Rule>字典规则,用于判断当前接收数据所匹配的规则,并获取对应规则下的值。

Condition匹配当前规则的条件,如果子节点含有Conditions,则不响应此条件。值类型OP表示取包含专有协议的数据包,IP表示取专有协议的载荷。

表2 状态机函数定义

图6 结果分析器模板

Result匹配当前规则且当前规则的子节点规则均未匹配,则将其作为接收数据所匹配的结果。

标签3:<param></param>:是<Rule>子节点,表示规则结果的参数。结果中含有{0},则对应替换第一个param子节点,以此类推。

value表示当前参数对应的值。

Constants表示对value值进行常数匹配转换。

标 签 4:<Conditions></Conditions> 是 <Rule>子节点,表示当前规则的条件,与Rule的condition属性多选一,优先级策略是后一个Conditions优先级大于前一个Conditions,大于Rule的condition属性优先级。

Mer表示规则判断条件,值为OR则子属性的condition之间成立按照或条件匹配,值为AND则子属性的condition之间成立按照且条件匹配。

标签5:<Condition></Condition>是<Conditions>子节点。

exp表示当前节点的规则。

标签 6:<Constants></Constants> 是字典结果中定义的常量,通过指定key替换常量值。

name常量集合名:定义当前常量集合的名称,便于字典结果直接引用。

标签 7:<Constant></Constant> 是 <Constants> 子节点,定义常量集合下的一个常量name-value的映射。

Name为常量名,常量关键值为key。

value为常量对应的值。

2.4 接口驱动程序设计实现

接口驱动程序包含5个接口,使用静态方式调用。

(1)端口查询:通过端口号查询设备在线情况。

接 口 函 数:public static extern intLdxc_DeviceFind(UInt16 DeviceNumber)

参数说明:DeviceNumber为设备端口号。

(2)设备打开:初始化打开板卡端口对应的设备。

接口函数:public static extern int Ldxc_DeviceInit(uint index,ref uint device)

参数说明:index为设备端口号;device为获取设备连接详情实体对象。

(3)设备编号:通过端口号查询设备编号。

接 口 函 数:public static extern int Ldxc_DeviceID(uint device,byte[]buffer)

参数说明:device为查询目标设备;buffer为存储设备编号字节数组。

(4)设备关闭:通过端口号查询设备信息。

接口函数:public static extern int Ldxc_DeviceQuit(uint device)

参数说明:device为关闭目标设备。

(5)数据读取:读取指定目标的数据。

接口函数:public static extern int Ldxc_read(uint device,byte[] buffer,ref int len)

参数说明:device为读取目标设备;buffer为读取内容;len为数据长度。

(6)数据发送:向指定目标发送数据。

接口函数:public static extern int Ldxc_write(uint device,byte[] buffer,int len)

参数说明:device为发送目标设备;buffer为发送内容;len为发送长度。

3 结 语

嵌入式系统现有接口测试方法存在测试数据不易模拟和分析、硬件接口形态各异、多数测试需“一测一换”等问题,严重影响测试效率和准确性。因此,从上位机和下位机两个方面设计实现了通用多接口协议测试工具。本测试工具软件系统设计使用XML可标记扩展语言描述和存储“用例驱动器”“协议解析器”“结果解析器”三个核心模块,能够使测试数据、测试流程、接口协议相分离;硬件方面使用PXI总线易扩展、热插拔、高可靠性的特性进行设计,实现了对E1、K、RS232C、RS422、USB3.0、以太网接口等多接口的集成,同时预留了CPCI-E卡便于后期新增接口类型。该测试工具不仅能大幅提高接口测试测试效率,简化测试环境,且具备通用型和扩展性。

今后可考虑扩充接口协议模型,增强其适应性,并将测试工具和测试管理过程相结合,把简单的测试结果输出文件转换为符合测试规范的测试报告文档集。

猜你喜欢
测试工具状态机测试用例
边缘智力儿童及其智力测试工具的研究进展
基于SmartUnit的安全通信系统单元测试用例自动生成
基于有限状态机的交会对接飞行任务规划方法
Http并发连接测试工具
基于混合遗传算法的回归测试用例集最小化研究
福禄克推出先进的连接式测试工具系统
基于依赖结构的测试用例优先级技术
FPGA设计中状态机安全性研究
黑龙江科学(2011年2期)2011-03-14 00:39:36
基于反熔丝FPGA的有限状态机加固设计
软件回归测试用例选取方法研究