贾 虹
(南京模拟技术研究所质量处软件测试中心,南京 210000)
在软件研发的过程中,软件测试作为质量把关的重要环节,已经更加引起国内软件企业的关注。随着自动化工程技术的快速发展,软件规模及复杂度的迅速提升,自动化软件测试在软件开发过程中的作用越来越重要。虽然目前自动化软件测试技术已然取得了明显的进步,但针对某些不具备输入输出测试条件的配置项的软件接口测试,仍没有便捷灵活的、统一的测试工具及相关标准可利用并遵循。本文以IOTest为工具,介绍了一种自动化接口测试方法。
在多模块软件的各子系统与主系统联调中,接口测试采用黑盒方法,对各系统进行正确性检查和排错。运用该方法具体包括:对软件需求中的输入与预期输出之间的一致性进行检查;检查代码是否完成预定的功能;不包括代码的书写规范与潜在的逻辑风险。目前进行软件接口测试的工具有SOAPui、Jemeter及本文所提到的IOTest。
接口测试是提高软件质量的有效办法,但是基于系统测试的环境限制,很多输入项依赖于其他分系统的输出。在分系统未验证或未完成的情况下,该输出不具备作为被测系统输入的充分条件。一直以来,网络调试助手、串口工具均依赖人工输入的方法来实现输入,并人工将输出结果与预期结果进行比较,工作繁琐且容易出错,重复工作量大,数据输入方式单一。IOTest接口测试工具软件解决了上述难点,可对嵌入式软件进行实时非侵入测试并支持插件式二次开发,可满足专业用户的测试需求。
利用IOTest测试工具,测试人员可以完成:测试过程管理、仿真模型图形化开发及代码自动生成、仿真模型代码编译、测试脚本辅助编辑、测试过程监控、实时测试、测试数据收集定制、测试数据事后分析、日志管理及扩展功能(可集成matlab)等方面的工作。IOTest具有通用性、灵活性、易用性等特点,且在时间特性上可满足工作周期不小于1ms的实时嵌入式软件的系统测试要求。IOTest目前推荐使用的操作系统为Windows XP sp3。
3.1.1 黑盒测试功能
黑盒测试是一种动态测试,用于检查模块或各系统之间接口是否按照需求规范制定的方式运行。IOTest通过检查测试用例脚本运行的结果与期望的输出结果是否匹配来进行测试。
3.1.2 回归测试功能
回归测试用于检查通信协议的改动是否引入了之前出现的错误。IOTest通过自动执行先前的测试脚本进行回归测试。
IOTest通过在测试前仿真被测系统的交联设备的行为,由交联环境图自动生成模型的框架代码,在主机上完成代码的编译链接,得到目标机上能运行的可执行文件,根据不同的测试要求生成对应的测试用例,完成模型的初始化、任务调度,以及模型变量的收发工作。用户通过编写测试脚本描述用户测试意图,脚本是具有正规语法的数据和指令的集合,解释器通过脚本文本来实现相应功能。测试启动后,由实时调度程序驱动脚本解释器,将测试脚本翻译为测试动作,再分发至各仿真模型。同时,解释器、仿真模型与被测软件之间通过交互对测试反馈进行处理,完成最终的测试任务。
测试过程中通过“周期任务”“异步任务”(事件驱动型任务)来驱动模型和测试脚本之间的数据收发,并对测试过程进行监控,在接受任务过程中,系统会对接受数据的校验元素进行检查,若传输过程中出现错误,则系统会发出警告。
测试结束后,IOTest会通过TDA(测试结果分析工具)对测试结果进行分析:启动MySQL服务器,TDA 2.0通过读取自动保存在数据库中的测试结果,并在工程管理区和分析管理区以树形结构显示当前要分析的结果文件(包括列表、曲线、脚本),主框架的日志区显示当前工程测试结果的详细日志信息。工作原理如图1所示。
3.3.1 对被测软件进行建模
图1 IOTest工作原理
IOTest提供多种连接总线:Local、RS422、RS232、MIL-STD-1553B、ARINC429、CAN、以太网继电器等。本文以连接RS232总线的串口通信为例,对照RS232(PCI—1620)管脚图,将被测计算机端口与IOTest管脚接口连接,设计RS232串口通信的交联环境图(安装串口调试助手的测试机为被测设备),端口号为6,波特率115200bps,其中发送数据位数6,奇偶校验,停止位数1;接收端设备modol_1,数据位数8。对被测软件进行建模,如图2所示。
每个仿真模型都由一个“.c”“.h”和文件组成,如实例中组成模型JIAHONG的代码文件有JIAHONG.h与JIAHOGN.c文件,位置存于测试工程下“模型代码 ode_1”中,结构体如图3所示。
模型结构体继承BaseModel,具有BaseModel的“模型初始化”“模型结束”“接收ISR数据”等方法,且方法以函数指针的形式存在,在模型的“.c”文件中给出这3个函数指针制定具体的函数实现。其中ISR任务调度函数如图4所示。
从图4中可以看出,当SemIsrnode为可用时,表明有数据到来,然后根据数组变量“g_models”依次调用所有的ReceiveIsrData函数进行处理,实现以中断的方式接受串口数据,如RS422、RS232等。
3.3.2 对判断结构进行显示
将模块之间的通信格式按照协议进行模块之间通信的编辑,分别将输入输出定义为Send和Receive,数据为“UChar”类型。
将数据显示与数据进行关联,由工程显示面板中的树形图接收。为直观比对测试结果,在面板中增加信号指示灯标识,如果接收帧头为“0X41”,则指示灯为绿色,反之则为红色。
3.3.3 根据实际需求编写测试脚本
在软件添加对应显示、模型、收集方案后,可根据实际测试需求对发送端数据进行控制。根据常见的测试要求,IOTest端发送变量Send,数据格式为“D1 F1 02 00 03 21”,第六位0x21为前5位数据的异或和。发送时要求第三位数据进行自加并自动计算前5位校验和,发送时间为10s,间隔时间1s。Task1 脚本如图5所示。
图2 系统交联环境图
图3 模型JIAHONG的结构体
图4 ISR任务调度函数
图5 Task1脚本
设置任务周期为1000ms,结束时间为10000ms。Task2脚本如图6所示。
图6 Task2脚本
模型周期任务的函数入口为“void JIAHONG_period_Task(JIAHONG*pMdl) ”,该任务进行周期变量的发送与接收。由测试界面的“测试开始”按钮进行触发,使结构体中“信号量”sem_Perd周期性释放,每次运行周期任务模型计数器timercounter增加相应数值。模型周期任务代码如图7所示。
待脚本、显示、收集方案编辑好后将其关联至同一被测单元中,将整个工程进行编译、下载及测试初始化。被测软件端向端口6发送错误数据帧。结果如图8所示。
从全文的分析中我们可以看到,IOTest已可以充分满足常规配置项之间的接口测试需求,在整个软件系统未完整实现的情况下,也能有效地捕捉各分系统软件中存在的功能缺陷,缩短测试周期并提高开发效率。
图7 模型周期任务代码
图8 测试结果显示