模块化通用测试设备及自动化测试
2019-04-26黄荣张剑平高伟松
文/黄荣 张剑平 高伟松
随着航空技术的快速发展, 电子装备的多样化和复杂化程度不断提高, 对相应的测试设备提出了越来越高的测试要求,使得测试设备更新速度加快、自动化程度日益提高。
为了满足各种复杂电子装备的测试需求,科研院所相继研制了各种专用的测试设备。然而在电子装备快速发展的历程中,这种专用测试设备的研制,就显露出了其浪费系统资源、更新速度慢、升级困难等诸多缺点。因此,随着各种测试设备研制需求的不断增加,一种模块化、通用化的测试设备就越显重要。
模块化通用测试设备研制需求是基于军品研究所2017年产品测试类基础设施配置需求统计分析以及各型号软件测试要求(如实时性要求、安全性测试、强度测试等)获取。本文将从模块化通用测试设备系统方案、软件ETest_RT 平台简介、自动化测试三个方面进行描述。
1 系统方案
1.1 系统组成及功能
模块化测试设备由主控计算机以及五大类、共九种测试模块构建,如图1所示。主控计算机是通用测试设备的核心,通过以太网向各种测试模块发送测试要求,同时接收各测试模块反馈的信息,判断产品工作状态,生成测试报告。各种测试模块按照主控计算机的指令,向被测产品提供相应信号,并采集被测产品回送的信号,或与被测产品建立通讯,实现产品测试,并向主控计算机反馈被测产品数据信息。模块化通用测试设备系统采用ETestStudio 作为进行此次项目建设的基础开发平台。
1.2 构建方案
图1:模块化通用测试设备系统组成框图
模块化测试设备平台硬件包括主控计算机与测试模块,主控计算机采用工控计算机,测试模块采用PCI 构架的测控计算机,两者之间采用以太网络相连,硬件架构见图1。模块化测试设备平台中的应用软件主要包括测试设计子系统、测试运行子系统、测试监控与分析子系统。主控计算机和测试模块均安装ETestStudio 软件,其中主控计算机主要执行测试方案设计、硬件环境配置、接收测试模块返回数据进行监控,而测试模块则负责按照主控计算机设计的方案执行并反馈数据至主控计算机,主控计算机配置为软件服务端,测试模块配置为软件客户端,两者之间的通信如图2所示。
如图2所示,在主控计算机上的客户端控制服务中配置各个测试模块为客户端,如各客户端(测试模块)IP 地址配置等,两者之间的数据传输采用TCP/IP 以太网协议。通过主控计算机的设备规划功能,将每个测试模块中的信号采集设备与对应的客户端建立关系。当主控计算机上测试客户端发送测试指令时,测试模块可以自动接收指令,并调用信号采集设备对应的API 函数,驱动信号采集设备向被测系统发送出模拟信号。这种方式不受网络通信标准的影响,测试稳定性较高。
对于总线测试模块,可分为高速总线、通用总线及专用总线测试模块,每个测试模块配置相应数量的总线模块,故在使用模块化通用测试设备后,仅需根据各型号通讯总线情况配置相应数量总线测试模块,通过以太网与主控计算机建立连接,在主控计算机配置各测试模块IP 地址,设计测试方案,并设计监控软件。则测试模块则会按照主控计算机设计的脚本自动运行。在执行过程中可通过监控软件查看总线数据收发情况。因数据接收发送测试脚本均在测试模块中运行,通过在测试脚本中设置时间来保证数据实时性要求。而对于测试扩展,则可通过多通道或多测试模块运行,通过测试脚本设计来保证1 拖4 的要求。
2 ETest_RT平台简介
ETest_RT的应用软件由测试设计子系统、测试运行子系统、测试监控与分析子系统和测试辅助工具软件组成。详见图3软件功能架构。
2.1 测试设计子系统
该系统功能包含设计工作台和设备资源管理。设计工作台主要对待测产品及其对外接口进行建模,进行协议编辑及分析、创建测试监控软件、建立硬件规划、创建及管理测试用例,确定测试要准备的接口设备数量。其中创建的监控软件对应于之前使用的测试软件,区别在于该软件开发是在ETest_RT 平台基础上开发,且该软件仅需绑定属性及绑定相应测试脚本等图形操作开发,无需进行单独编程。整个产品测试的核心在于测试脚本的设计,测试脚本能够按照自定的时序控制方式实现向待测产品的数据交互和数据自动解析,将比特流解析成具有意义的用户数据。设备资源管理软件模块提供了系统支持的测试设备及通道的管理功能,提供了系统设备扩展的接口。
表1
图2:通信方式
图3:软件功能架构
图4:RS232 接口仿真模型设计
2.2 测试运行子系统
该系统功能包含测试运行服务软件、运行态执行端实时上位机、运行态执行端实时下位机。测试运行服务软件包括测试调度台(如用于调度哪个测试模块进行通讯)、运行服务器和数据中心,它们是与客户端软件(测试模块中软件)相配合,驱动测试数据,进行自动化测试执行。运行态执行端是实现实时性的关键子系统,包括实时上位机和实时下位机。
2.3 测试监控与分析子系统
数据监控器则以虚拟仪表或图表方式显示当前测试数据,与VC 及LabWindows 所开发的测试软件界面相似。测试数据分析提供了对测试过程中数据的记录,可以实现对历史测试数据的查询,并自动按照一定的模板格式创建测试用例单。
2.4 测试辅助工具软件
工具软件提供了嵌入式系统测试时部分常用的软件工具,主要包含计算器、曲线数据生成工具、协议模板管理等
3 自动化测试
本章节从自动化测试技术介绍、测试方案搭建、测试软件开发以及测试方案执行四个方面进行介绍。
3.1 自动化测试计划介绍
软件测试自动化主要是通过使用自动测试工具,按照设计的机制,自动对被测系统进行测试的一种技术,它具有良好的可操作性、高效率和可重复性等特点。测试自动化是软件测试中提高测试效率、测试覆盖率和测试可靠性的重要手段。本文介绍的自动化测试均是基于Python 语言编写的测试脚本。
软件测试自动化存在如下优点:
(1)节省人力资源,降低测试成本。如在回归测试中,如果使用的是手工方式,就需要大量的人力测试原有功能,而在自动化测试中,可以利用测试工具将原测试用例保存下来,重新运行一遍就可以了,这样就节省了大量的人力资源;
(2)增强测试的稳定性和可靠性。通过测试工具进行自动测试,减少测试人员的过程干预,保证测试的稳定性。同时减少手工测试时人员可能产生的漏测或失误。
(3)完备测试方法和手段。系统测试的基本要求是被测系统能尽量运行在真实的环境中,这要求嵌入式软件必须实现实时、闭环、非侵入的系统测试,但如果完全依赖于真实的运行环境,由于很难创造各类可能会引起嵌入式软件故障的输入条件,导致对嵌入式软件的测试很难达到充分性要求。就比如对数据从发送到接收的时效性、各总线数据按一定时序发送等测试手段。
3.2 测试方案搭建
以ETest_RT 平台基础上新建测试方案,首先须进行仿真模型搭建,对显示器的通讯进行分析,以图形化方式建立模型图,如图4RS232 接口仿真模型设计所示。
完成模型图设计后,则是对每一路通讯协议进行定义,通过给定的ICD 格式用DPD 语言进行描述,以RS232 协议为例,协议见表1所示。
该协议共包含四个部分:数据包头、命令、数据、校验和,分别用DPD 语言描述:
(1)数据包头:0xaa 0x55 两个字节,需要用16 位无符号整形StandardUInt16 定义,也可以用两个StandardUInt8 定义。
(2)命令:一个字节,需要用8 位无符号整形StandardUInt8 定义
(3)数据:一个字节,需要用8 位无符号整形StandardUInt8 定义
(4)校验和:需要用校验字段类型定义,并指定校验算法、校验位长度、以及校验范围
即该协议定义格式为:
Protocol Main
Segment 数据包头 StandardUInt16 Default=0xaa55 ByteOrder=Big #数据包头
Segment 命令 StandardUInt8 Default=0 #0x00:日模式 0x0a:夜模式
Segment 数据 StandardUInt8 Default=0 #0-255
Segment 校验和 CRC Algorithm=CRC_SUM_8 BitCount=8 #校验位
End
(1)Protocol、End:固定格式
(2)Main:协议名称,可自定义
(3)Segment:定义协议字段关键字
(4)数据包头:该字段的名称,自定义
(5)StandardUInt16:该字段的数据类型,根据协议格式选择不同的数据类型
(6)Default:为默认值
(7)ByteOrder:字节序(仅针对多字节数据),0xaa 为低字节,赋值时为0xaa55,则字节序为Big(大端模式);如果赋值为0x55aa,则字节序为Small(小端模式)
(8)校验字段:用CRC 定 义,Algorithm 为校验算法(提供常用算法,也可以自定义),BitCount 为校验位长度
协议定义完成后,则需将实际连接的测试模块与仿真模型中所使用的总线进行绑定,配置相应的波特率、通道等属性,此时前期的准备工作已完成,后续则是开展测试的执行工作,具体见下文。
3.3 测试软件开发
ETest_RT 可以用直观的方式在测试过程中显示测试数据。设计工作台中提供了对测试监控界面的设计功能,用户可以在监控设计面板上添加数据监控控件,并通过绑定协议字段或协议字段的计算公式,从而可以在监控运行时直观地显示测试数据的变化。在测试软件开发时类似于VC 及LabWindows 进行图形化界面设计,但区别在于其无需编写代码,只需绑定协议定义的属性或绑定下面所涉及的脚本即可完成数据发送及接收的显示,设计界面见图5所示。
图5:测试软件设计界面
3.4 测试方案执行
在完成上述步骤后,则进入测试的核心工作即测试脚本设计,测试脚本以Python 语言基础,遵循Python 语法规则,用缩进代表语句块。
Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。具有开发效率高,语言简洁,易阅读,描述能力强、跨平台、复用性良好,与C 或C++性能相同等特点。测试脚本包括了对嵌入式系统测试特性的描述,主要有测试输入(发送数据)、获取测试反馈(接收数据)以及执行时间控制等。
仍然以上述RS232 为例,在脚本中访问协议字段的方法:数据连接对象名称.字段名.Value,例如:COMW.命令.Value,就可以对其进行赋值、打印操作。在数据的发送与读取有:数据连接对象.Write()、数据连接对象.BlockRead()(阻塞读取方式)、数据连接对象.Read()(非阻塞读取方式),即该脚本即可写成如下所示:
def Main():
for i in range(1000):
COMW.数据包头.Value = 0xaa55#给协议字段赋值
COMW.命令.Value = 0x00
COMW.数据.Value = 1
COMW.Write() #将数据组包并发送出去
COMR.BlockRead() #读取返回的数据,并解析
print COMR.亮度.Value#打印读取的数据值
print COMR.加热状态.Value
print COMR.日夜模式.ValueAPI.Common.Timer.Normal.Sleep(20) #延时,每隔20ms 发送一帧数据
Main()
该脚本实现了定时20ms 进行数据发送,其中只需将COMW、COMR 与监控软件绑定即可实现监控软件显示,在脚本中设计可通过加载各种函数库实现各种功能,通过if 语句判定用例是否通过,以及通过文本记录整个测试过程中。包括在什么时间点发送什么数据接收什么数据结果怎么样均能通过测试脚本设计。对于测试测试人员可以依据脚本设计复杂时序以达到性能、安全性、强度测试等要求内容。而且在脚本设计完成后,过程中脚本执行可无需人员在旁。对于回归测试或者系统产品可直接借用测试脚本只需进行相应内容修改即可。但这也同时对测试工程师的技术要求提高。