林 磊,郭 铸,罗方旋,余昌瑾
(株洲中车时代电气股份有限公司轨道交通技术中心,湖南 株洲412001)
同时CRH2型网络控制系统与MVB总线型集中控制网络不同,该网络为分布式环网结构进行分布式冗余,各节点均进行参与控制逻辑,支持8辆编组、16辆编组及8+8重联编组运营,需按1∶1实物进行测试设计,测试所花费的时间由于其复杂程度大导致相应人工测试时间也长达数月,自动化用例及平台设计极大减轻人力成本及对细节一致性的把握,同步提升效率和质量。
本文重点从车载网络控制系统通信与人机界面全自动化测试研究与应用,实现测试过程无人化,同时进一步保障车载网络产品的正确性与可靠性,解决动车领域快速响应与高质量之间的矛盾。
CRH2型动车组网络控制系统自动化仿真测试平台(图1),由1∶1被测车载网络设备,车辆设备仿真,自动化测试集成开发环境组成。
网络控制系统与车辆具备人机交互界面、速度传感器、输入输出数字量与模拟量和第三方设备电流环/HDLC串行通信接口,短编动车组由8节车厢组成,长编动车组为16节车厢组成。司机台人机交互界面或车辆交互信息对应相应设备仿真,将车辆网络设备发出的信息转换为以太网数据包传输至计算机测试环境进行信息处理,同时将计算机测试环境发出的指令转换成车辆网络识别的用户操作、硬线IO、串行通信数据等,实现车辆设备的仿真。
图1 自动化仿真测试平台软硬件框架结构
模拟司机对车载显示设备的操作与界面内容确认功能,通过通信接口,将界面实时截屏到远程计算机,同时将远程计算机点击输入操作传送至车载显示设备执行用户请求,实现显示设备自动化基础交互。
远程界面通常两种实现方式:(1)实时视频与机械手结合;(2)车载显示设备中嵌入截屏和模拟操作功能。
视频和机械手方案对视屏像素与车载显示器真实像素将产生差异,直接影响图像识别准确率同时机械手操作显示设备速度缓慢影响测试效率。
CRH2型动车组网络系统显示器采用Proface触摸屏,嵌入远程投影功能(图2),将车载显示界面,1∶1像素投影至计算机,同时传送鼠标对界面的点击操作,模拟人点击触摸屏操作。
本届十杰评选,再一次提及人像精髓的理解:要有“精、气、神”,人物要活灵活现!错把“技术”当“艺术”,拍出来的照片是僵化的。而关于“好作品”的定义,又一次回归到自然的“真我”理念上来。
图2 司机显示器远程界面
自动化测试除IO点位、通信数据流等访问与控制功能,还需要模拟与司机显示设备人机交互,目前通用计算机UI自动化测试框架比较成熟,但UI自动化测试基于计算机程序界面为控件按不同层次组合而成,测试工具可通过枚举指定界面中的各控件列表,提取关心的控件并获得显示信息进行操作和确认。
但车载显示设备通常均为嵌入式系统,仅能以图片形式获取整个界面的显示,不能以控件列表进行拆分及文字提取(图3)。因此通用的计算机UI自动化测试工具不能实现对嵌入式系统的界面测试。CRH2型自动化仿真测试平台,通过图像识别,对图片中的各文字和非文字进行识别,形式元素信息列表,用于确认测试中关心的信息进行操作和判断。
图3 车载显示设备与计算机界面自动化测试对比
对于传统控件列表的识别,界面不存在识别率的概念,但适应性存在限制,不支持以图片非控件组成界面。而对以图片识别为基础的测试系统,图片的清晰度将直接影响到识别的准确性,采用远程投影1∶1像素的远程界面,同时采用文字识别+符号图片集像素匹配方式,弥补单纯使用文字识别覆盖不完全的缺陷。
CRH2型动车组测试用例采用Excel编写文本用例,对参数、操作、确认分栏编辑以提高可读性,使用例更接近自然语言,同时以脚本语言为基础,支持脚本语言的所有特性及扩充特性。
目前主流自动化测试软件,均以脚本语言为基础,即用于描述和运行相关用例,并提供无限扩展能力,例如广泛应用的QTP自动化测试软件基于VBScript脚本语言[1-2]。由于脚本语言的发展及主流排行变化,脚本语言的选择由语言的便捷性、易读性及支持库的多少决定,本测试平台采用目前主流脚本语言Python作为脚本运行环境,降低学习难度和设计难度,同时提高扩展性。
为降低用例编制难度和易读性,人工用例由情况、操作和确认(表1),对应的自动化用例包含参数、操作和确认(表2)。由于同一项功能,需要进行多种条件下进行测试,此时用例效率将远远大于直接编码,编译器的作用即将参数进行展开生成Python脚本能够支持的代码后在脚本运行环境调试运行,以下对比人工测试用例和自动化测试用例,由于编译出来的脚本会大大超过用例本身,仅将参数1编译后即将生成进行对比(表2)。
表1 人工测试用例
表2 自动化测试用例
从上对比可以发现,用例参数化+编译的方式可以基本统一人工测试用例和自动化测试用例,在不增加用例编制工作和可读性的同时实现用例自动化。
在用例编制时,需要明确对象和操作,例如人工测试用例“给定牵引为牵引3档”,需指明3个要素即可确认对象、属性和操作,分别为“牵引”、“档位”,“3档”,为兼顾Python语言支持,用例写为:牵引["档位"]=3,可读性和要素与人工测试用例等同。
为实现用例的可读性,需要将“牵引“这个对象与仿真设备绑定,否则这行用例代码对Python来说并无意义。
绑定实现初始化代码如下,其中Memroy Mapper为实现绑定功能的Python类:
牵引=MemoryMapper(仿真设备地址)
牵引.AddMemory(“档位”,信息所在偏移)
同时由于MemoryMapper类通过重载__setitem__(self,key,val) 和 __getitem__(self,key) 方法,当Python执行用例:牵引["档位"]=3时,MemoryMapper类会调用__setitem__方法,查找仿真设备的地址及相关属性信息偏移,实现仿真设备向网络控制系统给定真实信号。
用例执行前的初始用绑定代码,即实现数据绑定功能,可通过编译器编译Excel编制的协议自动生成,提高自动化程度。
集成开发环境核心思想为最大程度降低用户操作并明确显示用户关注信息,如图4所示,加载测试工程,显示工程对应测试用例集并显示相关用例,同步显示可编译后的执行代码,单步或运行跟踪,同时将测试过程中的相关操作界面和问题日志实时显示,用于用户确认测试进度与测试异常状态。采用类似Visual Studio等主流集成开发环境的dock布局,可实现同屏调整及分屏显示,提搞自动化测试过程的直观度。
图4 自动化测试集成开发环境
用户在进行自动化测试时,仅需提供车辆设备与网络通信协议和用例两份Excel文档,其余过程均由集成开发环境处理完成。并通过关系型数据库,实现测试文本和图片日志与代码用例相关联,快速定位用例和代码行。
自动化调试过程为测试用例最终转换为图文并茂的测试报告的执行过程,如图5所示,自动化调试过程除包含对被测对象的调试外,由于用例的编制也可能存在错误,因此对用例的调试同样重要。
图5 自动化测试流程
网络控制系统自动化测试平台为适应车载显示设备与控制设备工业领域特殊要求并继承主流计算机自动化测试工具的优点,具备适应车载网络设备显示与控制的全自动化测试,解决具有人机交互界面参与的嵌入式控制系统不支持全自动化测试的难题。目前已应用于CRH2型动车组网络控制系统的软件测试和硬件功能测试中,提高测试效率与质量。