基于Teststand 的列控车载系统自动测试方案的设计与实现

2021-05-10 08:55李自豪徐先良欧国恩
铁道通信信号 2021年4期
关键词:自动测试控件模拟器

李自豪 徐先良 欧国恩

自动测试技术的诞生可追溯到20 世纪80 年代,发展到如今,已经广泛应用于各领域的系统测试中,且技术逐渐趋于成熟,相关的自动测试工具层出不穷。在国内,自动测试正处于高速发展阶段,越来越多的企业意识到自动测试的重要性。

本文基于美国国家仪器公司(NI) 开发的测试管理软件TestStand 进行测试系统的开发,结合TestStand 的功能特点与既有测试经验,设计并实现了基于Teststand 的列控车载系统自动测试方案。

1 基于Teststand 的既有测试方案

基于Teststand 的列控车载系统既有测试方案主要包含2 部分:被测车载设备和仿真测试环境,如图1 所示,其中被测车载设备为真实车载。为了满足测试需求,搭建了模拟真实运行环境的仿真测试环境。该测试系统中包括了TBTS 仿真车接口系统、轨旁仿真系统、RBC 模拟器、GNSS/GNSSIMU 模拟器、DTS 模拟器、HOT 模拟器、DRU 模拟器等[1],以下是各个模拟器在测试系统中的作用[2]。

1) TBTS 仿真车接口系统:为车载提供电源控制,模拟列车IO 接口和车辆操作控制的软件。

2) 轨旁仿真系统:处理列车位置及占用逻辑,为轨旁设备提供列车位置信息。

图1 基于Teststand 的列控车载系统既有测试方案

3)RBC 模拟器:与车载建立并维持通信,向车载发送进路及限速信息。

4)GNSS/GNSSIMU 模拟器:用来接收轨旁发送的列车区间位置信息,计算相应的GPS 坐标,并发送给车载。

5)DTS 模拟器:存储数据库数据,与车载建立连接并配合进行发车测试。

6)HOT 模拟器:与车载建立连接并向车载发送管压信息。

7) DRU 模拟器:与车载建立连接,接收、记录并显示车载日志,将其以json 格式保存到本地。

在测试过程中,测试人员需要手动操作上述模拟器,并且需要时刻观察车辆状态,选择合适的时机控制车辆的速度和加速度,这对测试人员提出了较高的要求,需要尽可能地避免失误。

2 基于Teststand 的自动测试方案

基于Teststand 的列控车载系统自动测试方案,与传统的人工测试不同,它将测试环境进行模块化管理[3],如图2 所示。自动测试环境主要由被测车载设备、仿真测试环境和自动测试系统3 部分组成。其中,自动测试系统由TestStand 序列执行引擎、TestManager 测试管理器和SimControl 模拟器控制器3 部分组成。

图2 基于Teststand 的列控车载系统自动测试方案

2.1 TestStand 序列执行引擎

2.1.1 功能

TestStand 在自动测试系统中的主要功能是实现测试序列的编辑与执行,并在测试完成后生成测试报告[4]。

2.1.2 接口

TestStand 提供的接口可供外部程序调用,以使用其测试引擎。

2.1.3 原理

TestStand 内置了条件执行语句、循环语句、Goto 语句,能够实现序列的选择、循环、跳转,灵活地控制序列逻辑及执行流程;TestStand 的嵌套、分层和复用机制,能够生成较为复杂的序列结构。在序列执行的时序控制方面,TestStand 提供了延时语句。

2.2 TestManager 测试管理器

2.2.1 功能

TestManager 的主要功能是发送操作指令,接收车辆信息、股道信息、模拟器状态等信息,并进行存储。

2.2.2 接口

TestManager 提供调用TestStand 引擎的接口,以及发送操作命令、接收车辆信息的接口。

2.2.3 原理

TestManager 提供了用户界面,通过调用TestStand 引擎来实现测试序列的执行与报告的生成;通过网络向模拟器控制脚本发送操作指令,来实现模拟器软件的自动控制。

2.3 Sim Control 模拟器控制器

2.3.1 功能

Sim Control 实现了控制模拟器软件的功能。

2.3.2 接口

Sim Control 提供了接收来自TestManager 的操作指令的接口;提供了与操作各个模拟器的接口函数。

2.3.3 原理

Sim Control 通过网络接收来自TestManager 的模拟器操作指令,借助AutoIt 编写操作脚本,通过操作控件句柄或控制鼠标和键盘,实现对RBC 模拟器、GNSS/GNSSIMU 模拟器、DTS 模拟器、HOT 模拟器和DRU 模拟器的操作;同样可借助AutoIt 读取各模拟器界面上的信息,通过网络发送给TestManager。

Sim Control 模拟器控制器工作原理见图3。

图3 Sim Control 模拟器控制器工作原理

2.4 DMI Operator

2.4.1 功能

DMI Operator 实现对DMI 软件的操作。

2.4.2 接口

DMI Operator 提供了接收来自TestManager 的按键指令的接口,以及操作各个模拟器的接口函数。

2.4.3 原理

DMI Operator通过网络接收来自TestManager的模拟器按键指令,在进行协议转换后,DMI Operator将按键指令发送给DMI;同时,DMI 也将车辆状态信息透传给DMI Operator,DMI Operator 将这些车辆状态信息保存到本地。在Test Manager 需要时,可向DMI Operator 发送请求信息。

3 系统功能及流程

基于Teststand 的列控车载系统自动测试主要实现测试过程中所有人工操作的自动化,包括模拟器操作、DMI 操作、列车运行控制、测试序列管理、测试报告生成、数据分析、屏幕录制7 个功能模块。

3.1 系统功能

3.1.1 模拟器操作

在当前的测试环境中,包含了多个模拟器。在测试过程中,模拟器的开启、关闭、文件配置、按钮点击、文本输入等操作均由系统进行自动操作。

3.1.2 DMI 操作

当前测试环境中DMI 软件的启动、关闭及按键的点击均为自动操作。当DMI 需要进行文字输入时,系统能够自动切换数字或字母。

3.1.3 列车运行控制

在车辆运行过程中,车辆的速度由自动测试系统控制,DMI 会以200 ms 的周期向TestManager发送循环消息,包含车辆当前速度、允许速度等信息,综合这些信息计算出当前的目标速度和加速度,并在仿真车上进行设置。

3.1.4 测试序列管理

TestStand 提供了编辑和执行测试序列的平台,序列之间可以进行相互调用,实现了序列的复用[5]。

3.1.5 测试报告生成

TestStand 内置了多种测试报告模板,将测试序列中所有需要输出的判定点加入到报告模板中。在测试过程中,这些判定点(Pass/Fail Test) 会将实际输出值与期望值进行对比,如果相同,则表示该判定点通过(Pass);否则,判定点失败(Fail)。测试序列执行完成后,这些判定点的结果会输出到测试报告中,并以HTML/ATML/XML格式保存至本地[6]。

3.1.6 数据分析

测试序列在执行过程中,自动测试系统会将JRU(列车数据记录单元)记录的车辆运行状态等各项信息与真实线路数据表以公里标为基准进行比对,比对结果记录并保存到日志中。

3.1.7 屏幕录制

在测试序列开始时开启屏幕录制,结束时停止屏幕录制,并将视频保存到本地。

3.2 测试流程

在TestStand 中,一个完整的测试序列分为3 个部分:Setup(准备)、Main(主步骤)、Cleanup(清理)。其中,Setup 部分包含了测试所需环境的准备步骤,Main 为测试主体,Cleanup 包含测试环境清理步骤。本系统的运行流程主要分为5 个步骤:环境初始化、测试准备、测试中、测试结束和环境“清理”,见图4。

4 系统实现

4.1 控制脚本的设计与实现

在该自动测试系统中,Sim Control 由多个控制脚本组成[7],采用Python 语言开发,使用AutoIt Window Info 工具可以检测模拟器窗体及控件是否可识别,针对不同情况采用不同的控制方式。

图4 测试流程

1)句柄操作方式。对于使用标准Windows 控件开发用户界面的模拟器,在控制脚本程序中引入PyAutoIt 库,使用AutoIt 方法进行句柄操作。由于软件的窗体与控件的句柄都是唯一的,所以可以通过句柄实现精准控制,包括点击、拖拽、输入等操作。

2)像素定位方式。当窗体中的控件无法识别时,可通过控件相对窗体的像素偏移来对控件进行定位,使用PyAutoIt 中的方法,对特定像素点进行点击操作。当某个控件存在颜色变化时,也可以通过获取特定像素点的颜色,来获取该控件的状态。

3)网络协议方式。当窗体中的控件无法识别,且需要进行文本输入操作时,需要模拟器与SimControl 通过网络通信实现操控。

以上几种方式可以混合使用,例如模拟器的窗体均可使用句柄进行操作。当模拟器中的控件为标准控件与第三方控件混合使用时,使用句柄对标准控件进行操作,通过像素定位或者网络协议对第三方控件进行操控。

4.2 测试序列的设计与实现

基于TestStand 平台,并以测试用例为范本,完成测试序列的编写。本系统提供了丰富的元操作可供调用,例如,模拟器启动、关闭、车载上电、加车、删车、设置车辆目标速度、加速度、设置牵引、制动、DMI 按键点击、DMI 文字输入、设置道岔、办理发车、接车进路、设置信号机状态等一系列的基础操作,测试人员可以通过编写通用子序列,供其他序列进行调用。以下为测试序列参考示例。

1)初始化:启动HOT 模拟器、DTS 模拟器、GNSS/GNSSIMU 模拟器、本站及前方站的RBC模拟器和DRU 模拟器,通过TBTS 仿真车接口软件给车载设备上电。

2)开始录屏。

3)设置道岔、信号机:设置相应进路的道岔和信号机状态,并办理发车和接车进路。

4) 添加列车:在本站添加列车并设置变量,例如股道号、列车长度、偏移距离、车次号、上下行方向、司控端等信息。

5)开始记录数据:控制DRU 模拟器开始接收并记录数据。

6)发车测试:操作DMI 按键,进行发车测试(调用发车测试子序列)。

7)完整性测试:操作DMI 按键,进行完整性测试(调用完整性测试子序列)。

8)车辆行驶:序列采用while 循环进行控制,通过不断获取车辆信息和股道信息,动态地调整TBTS 中车辆的加速度和目标速度,实现车辆的“自动驾驶”。

9) RBC 模拟器换站:当车辆行驶到前方站后,启动下一站的RBC 模拟器,关闭上一站RBC模拟器。

10)停车:当车辆到达车站后,TestStand 根据站内信号机控制车辆速度,使车辆停止行驶。

11)清理工作:如果车辆需要继续行驶,则重复(8)(9)(10)步骤;否则,当车辆停稳后跳出循环,删除列车并停止DRU 模拟器数据记录,停止录屏并关闭所有模拟器。

12)行车数据分析:Sim Control 对DRU 模拟器记录的json 数据进行解析分析,并将结果返回给TestStand,作为测试结果的一个判定节点。

13) 生成测试报告:完成以上所有步骤后,TestStand 将所有判定节点输出到测试报告中,并保存到本地。

对应TestStand 中测试序列的3 个部分,Setup、Main 和Cleanup,在上述示例中,Setup 中包含步骤1,Main 中包含步骤2~12,Cleanup 中包含步骤13。

5 结束语

基于Teststand 的列控车载系统自动测试方案实现了测试过程的自动化,使用TestStand 测试引擎及AutoIt 自动操作脚本进行系统开发,其中TestStand 提供了测试序列的编辑与执行、测试报告生成等功能,AutoIt 实现了对测试过程中各个软件的自动控制。本系统相较于传统人工测试,提高了测试效率及测试质量,节省了时间和人力成本,对于测试要求较高的轨道交通信号行业具有实际意义。为进一步提高系统的测试效率及自动化程度,未来可从以下几方面进行功能完善和优化:①充分利用TestStand 支持并行测试的特性,实现多个用例同时测试[8];②引入机械装置模拟人手点按DMI按键;③引入监控设备,对DMI 进行拍摄,并通过图像识别实时地获取DMI 显示内容;④引入自动部署功能;⑤利用算法优化测试路径,提高测试效率[9]。

猜你喜欢
自动测试控件模拟器
故障录波装置自动测试系统设计与实现
基于C++Builder 的电子邮件接收程序设计*
基于CANoe的商用车SAE J1939网络自动测试方法
驾驶模拟器转向系统的设计与研究
直升机某型舵机自动测试系统设计分析
使用“填表单”微信小程序 统计信息很方便
了不起的安检模拟器
盲盒模拟器
划船模拟器
基于.net的用户定义验证控件的应用分析