基于OpenCV 的计算机联锁自动测试系统研究

2022-06-30 07:46曾舒宇曹阿俊
铁路计算机应用 2022年6期
关键词:自动测试站场测试用例

曾舒宇,杨 扬,王 玥,曹阿俊

(西南交通大学 信息科学与技术学院,成都 611756)

铁路计算机联锁系统是负责行车进路建立铁路行车核心控制设备,具有较高可靠性和故障-安全性要求的实时控制系统[1]。鉴于故障-安全原则对于计算机联锁系统的特殊性和重要性,系统自身的全面测试就必不可少。目前,国内联锁软件测试量较大,存在大量的重复性操作,测试人员知识水平、测试经验参差不齐,难以保证测试的完备性。

文献[2]根据高铁列控接口规范提出了一种计算机联锁与列控中心(TCC,Train Control Center)接口自动化测试的方式;文献[3]基于Prover iLock 形式化工具提出了一种形式化自动测试的方法;文献[4]以灰盒测试为思想,设计了一种基于脚本驱动的自动测试系统;文献[5]提出了一种基于有色Petri 网的联锁软件测试用例生成方法;文献[6]设计了一种计算机联锁系统测试平台,可辅助测试用例开发和执行。以上研究虽然都能有效完成计算机联锁测试或计算机联锁用例生成,但是其测试大多是基于接口进行的测试,对于第三方测试来说不了解计算机联锁内部代码,仍存在测试难度大的问题。同时未能将测试用例生成和测试用例执行两个功能进行集成,仍存在不少操作需要人工介入。

为更好地解决以上问题,本文设计了一种将站场数据获取、联锁表生成、测试用例生成和测试用例执行功能集成的计算机联锁自动测试系统。该计算机联锁自动测试系统采用黑盒测试的思想,基于OpenCV 库[7]获取站场数据,无须了解计算机联锁软件内部代码即可获取站场数据并实现测试用例自动执行进而完成对计算机联锁系统的基本功能测试。本文从系统结构、系统核心功能实现和系统测试结果几个方面介绍该系统的设计实现过程与测试结果。

1 计算机联锁系统

计算机联锁系统在信号操作员操作下实现站内道岔、信号机和轨道电路之间联锁控制,是铁路安全高效行车不可缺少的保障装备。其系统采用分层式结构,分为人机对话层、联锁运算层和执行表示层[1],计算机联锁系统结构,如图1 所示。

图1 计算机联锁系统结构

(1)人机对话层。由上位机和电务维修机构成,上位机负责接收车站值班员下达的进路操作命令,并将操作命令传送给联锁运算层,同时接收联锁运算层输出的反映信号设备工作状态和行车情况的信息并进行实时显示。

(2)联锁运算层。由联锁机软件组成,联锁机接收来自上位机下达的操作命令,依据从执行表示层接收到的反映室外信号机、道岔和轨道电路实时状态的信息,并结合内部的中间信息,进行联锁逻辑运算,根据运算结果产生相应的输出信息。

(3)执行表示层。为联锁运算层和室外设备层的中间层,在二者之间起信息交互、硬件电路的转换等作用,同时在硬件上进行隔离,以保证室内设备的安全性[1]。

2 计算机联锁自动测试系统设计

2.1 系统结构

计算机联锁自动测试系统结构,如图2 所示。整个系统由测试用例生成、测试用例执行2 个客户端组成。

图2 计算机联锁自动测试系统结构

(1)测试用例生成客户端。负责接收测试用例执行客户端发来的开始测试前和测试过程中截取的计算机联锁上位机界面图像,对开始测试前上位机界面图像采用OpenCV 库[7]提取站场数据,依据站场数据生成联锁表,通过联锁表和铁路车站计算机联锁软件功能测试大纲[8](简称:测试大纲)生成测试用例,测试过程中计算机联锁上位机界面图像进行分析获取测试结果并生成测试报告。

(2)测试用例执行客户端。①应用AutoItX[9]自动测试组件开发不同类型的测试脚本;②接收测试用例生成客户端下达的测试用例,对测试用例进行解析获得测试用例类型和相关输入参数,调用对应类型的测试脚本,通过执行测试脚本中的操作指令模拟人工对计算机联锁系统上位机界面操作进而完成计算机联锁的功能测试;③对测试过程中的计算机联锁上位机界面进行截图记录,以便测试用例生成客户端获取测试结果并生成测试报告。

(3)测试用例生成客户端与测试用例执行客户端之间采用Socket 接口实现TCP/IP 协议通信,完成二者之间数据传输。测试用例执行客户端通过截图获取计算机联锁系统上位机界面;执行测试脚本模拟人工对上位机界面操作,进而实现自动选排进路、改变道岔位置、改变区段占用情况等功能测试。

2.2 系统功能模块设计

基于计算机联锁自动测试系统结构,测试用例生成客户端和测试用例执行客户端分别要实现不同的功能,功能模块如图3 所示。

图3 计算机联锁自动测试系统功能模块

2.2.1 测试用例生成客户端

(1)站场数据获取模块

完成站场信号设备(信号机、道岔、轨道区段)和功能按钮(总取消、总人解按钮等)数据的提取。站场数据获取由站场图获取、站场数据提取和人工校正数据3 个步骤组成。①通过测试用例生成客户端对计算机联锁上位机界面截图获取到站场图;②应用OpenCV 库[7]对其进行逻辑处理提取站场数据;③由人工介入,对提取到的站场数据进行修改校正,以保证站场数据的准确性。

(2)测试用例生成模块

按照测试大纲[8]的要求生成进路、进路锁闭与解锁、信号机和道岔等测试用例。测试用例生成由站场拓扑图生成、站场联锁表生成和测试用例生成组成。①应用拓扑生成算法[10]生成能表示站场信号设备位置关系和逻辑关系的站场拓扑图;②采用进路搜索算法遍历拓扑图,生成站场联锁表;③依据联锁表中的进路信息和测试大纲要求的功能测试生成不同类型的测试用例。测试用例内容包括前提条件、测试步骤及预期结果等。此外,在开始测试后,将生成的测试用例下达给测试用例执行客户端。

(3)测试结果分析模块

对测试过程中计算机联锁上位机界面图像进行分析,判定测试结果是否符合预期结果,并生成测试报告,以便工作人员查看。该模块由信号设备状态变更数据获取、预期结果比对、输出测试报告组成。①接收测试用例客户端记录的测试结果(测试过程中计算机联锁上位机界面的图片集合),采用OpenCV 库[7]对其逻辑分析,提取预期结果中的信号设备和其他状态发生变化的信号设备的状态变更数据;②将提取到的信号设备状态变更数据与预期结果比对,判断测试用例是否通过;③将所有测试用例的判定结果汇总成报告并写入文件进行存储。

2.2.2 测试用例执行客户端

(1)上位机界面获取模块

负责网络通信的初始化,同时对测试脚本执行前和执行中的计算机联锁上位机界面通过截图方式进行记录。测试脚本执行前和执行中的截取的上位机界面图像分别用于测试执行客户端的站场数据提取和测试结果分析。

(2)测试脚本生成模块

实现选排进路、道岔操作和轨道区段操作等类型的测试脚本的生成。测试脚本生成模块由测试脚本开发、脚本合并与联调、异常处理与恢复3 个过程构成。①对测试大纲中的测试用例类型进行分析,获取测试用例中的输入数据和测试步骤,开发对应类型的测试脚本;②对输入数据一致的测试脚本进行合并,同时对有先后顺序的测试脚本进行联调以提高测试效率;③对测试过程中可能出现的异常情况进行分析并编写异常处理和恢复方法。

(3)测试脚本执行模块

执行测试脚本中操作指令,对计算机联锁系统上位机界面进行人工操作实现自动测试,同时记录测试结果以便测试用例生成模块生成测试报告。测试脚本执行模块由测试用例解析、操作指令执行和测试结果记录3 个过程构成。①对生成的具体的测试用例进行解析获得相关的输入参数,调用相对应类型的测试脚本函数并传入相关输入参数,如位置坐标、按钮坐标等参数;②执行测试脚本中的操作指令以达到自动测试的目的;③在测试过程中调用上位机界面获取模块对上位机界面进行截图记录并存储为图像进而发送给测试用例生成客户端,以便分析测试结果并生成测试报告。

3 关键技术

3.1 基于OpenCV 库提取站场数据

计算机联锁系统上位机界面是依照车站计算机联锁操作显示技术规范[11](简称:显示规范)而绘制的,不同的铁路站场在计算机联锁上位机中的显示遵循的是同一显示规范,因此不同铁路站场的信号设备在联锁上位机中的显示具有相同的特征。OpenCV 是一个计算机视觉库,实现了图像处理和计算机视觉的很多通用算法,并且支持跨平台,同时支持C#、C++、Python 等编程语言[7]。本文采用OpenCV 库[7]对被测计算机联锁系统上位机界面进行图像处理,进而提取车站信号设备的数据。站场数据获取流程,如图4 所示。

图4 站场数据获取流程

对某计算机联锁系统上位机界面进行图像处理和逻辑分析后提取得到的列车信号机数据如图5所示。从图5 可知,通过图像处理和逻辑分析可以得到列车信号机名称、坐标、高矮柱和进出站类型等信息。同理,对于道岔,可以提取到道岔坐标、道岔编号、道岔类型等数据;对于无岔区段和股道,可以提取到其坐标、名称和类型等数据。

图5 列车信号机数据提取结果

3.2 站场拓扑图生成算法

测试用例的生成是在联锁表的基础上实现的,而联锁表基于站场拓扑图采用进路搜索算法生成。因此要生成测试用例,站场拓扑图至关重要。通过人工输入站场拓扑图数据费时费力,所以在已经提取到站场数据的基础上,提出一种基于站场设备坐标的站场拓扑图生成算法,该算法具体过程如。

(1)确定道岔与道岔之间的连接关系。对所有道岔进行遍历,搜索遍历道岔岔尖、定位、反位x坐标距离20 像素点内,y坐标距离10 像素点内的道岔,若存在,则该道岔为遍历道岔的相连道岔。将相连道岔设置为遍历道岔对应位置(岔尖、定位、反位)的连接设备,同时将遍历道岔设置为相连道岔对应位置的连接设备。

(2)确定区段与道岔的连接关系。所谓区段是指无岔区段和股道。遍历所有区段,搜索与其左侧和右侧相连(道岔岔尖、定位、反位x、y坐标距离左侧或右侧均不超过10 像素点则认为相连)的道岔设备。若与区段相连道岔存在,则将道岔设置为区段的左侧或右侧设备,同时将区段设置为道岔对应位置的连接设备。

(3)确定区段与区段的连接关系。对于站场中离去和接近区段需要处理区段与区段的连接关系。遍历所有区段,搜索与其左侧或右侧x、y坐标距离不超过10 像素点的区段,将搜索到的区段设置为该区段的左侧或右侧连接设备。

(4)确定信号机与道岔和区段的连接关系。遍历所有道岔和区段,搜索道岔岔尖、定位、反位附近、区段左侧和右侧附近的信号机,若搜索到2 个信号机,则认为信号机是并置信号机。将信号机插入到道岔及与道岔相连设备之间或者是区段和与区段相连设备之间。

3.3 基于AutoItX 生成测试脚本

测试用例的执行可分为人工测试和自动测试。测试大纲[8]涉及到的测试用例种类较多,为提高测试效率,本系统采用自动测试。为实现自动测试,本系统基于AutoItX 库采用c#高级程序语言编写与测试用例对应类型的测试脚本。AutoIt[9]是用来在Windows GUI(用户界面)中进行自动操作的软件,通过它可以组合使用模拟键击、鼠标移动和窗口/控件操作等来实现自动化任务。而AutoItX 是AutoIt 的一个标准DLL 库,可以加入一些AutoIt 独有的特性到其他的脚本语言或程序设计语言中而实现自动化任务[9]。

测试用例类型分为进路、进路锁闭与解锁、信号机、道岔等。其中进路锁闭类型的测试用例的测试脚本内容,如图6 所示。

图6 进路锁闭类型测试脚本内容

4 系统工作流程与测试结果

4.1 系统工作流程

本文设计的计算机联锁自动测试系统工作流程,如图7 所示。

图7 计算机联锁自动测试系统工作流程

(1)启动测试用例生成客户端和测试用例执行客户端,并完成网络通信初始化实现二者的网络连接。

(2)接收测试用例执行客户端截取的上位机界面,并判断测试用例是否已经生成,若测试案例未生成,对上位机界面进行图像处理,提取站场数据并生成联锁表,再生成测试用例,下达给测试用例执行客户端进行解析,调用对应类型的测试脚本并自动执行,截取上位机界面发送给测试用例生成客户端对上位机界面图像处理提取信号设备状态信息,并与预期结果比对,记录测试结果。

(3)判断是否所有的测试用例均下发,若均下发则输出测试报告,否则继续下发测试用例给测试用例执行客户端进行测试用例解析与测试脚本执行。

4.2 系统测试结果

本系统以某计算机联锁系统作为被测对象,对其标准站下行咽喉列车进路进行进路锁闭功能测试。测试过程中测试用例生成客户端界面,如图8 所示。

图8 测试过程中测试用例生成客户端界面

本次测试对生成的测试用例中的32 条列车进路测试了进路的办理与取消功能。人工和系统分别测试了3 次,通过测试用例30 条,不通过2 条。由于进路锁闭过程中道岔转换过程花费时间较长,且这部分时间无法降低,导致自动测试平均一条进路用时需要近8 s,测试耗时,如表1 所示。由此可见,系统能有效地提高测试效率,降低对测试人员技术的要求。

表1 测试耗时

5 结束语

本文设计的计算机联锁自动测试系统实现了站场数据的获取、联锁表的生成、测试用例的生成和测试用例的执行功能;能够实现自动测试设计、测试执行和测试结果分析整个自动测试过程。

测试结果表明,该系统基于OpenCV 库[7]获取站场数据,可以解决第三方获取站场数据困难的问题;能实现测试用例自动生成执行一体化,减少了人工操作步骤,降低对测试人员的技术要求;能对按照显示规范设计[11]的计算机联锁系统进行测试,适用性强;能降低测试用例的执行时间,比人工测试用时少25.4%,提高了测试效率。

猜你喜欢
自动测试站场测试用例
输油气站场完整性管理与关键技术应用
故障录波装置自动测试系统设计与实现
贝雷梁在道路下穿铁路站场工程中的应用
基于CANoe的商用车SAE J1939网络自动测试方法
直升机某型舵机自动测试系统设计分析
油气站场甲烷排放检测技术及量化方法
基于LDA模型的测试用例复用方法*
液晶显示器及其电源适配器能效自动测试系统的研制
软件测试中的测试用例及复用研究
测试工时受限的测试策略研究