TCL脚本语言在车载自动防护系统自动测试中的应用*
2013-03-17张友兵
张友兵 张 波
(北京全路通信信号研究设计院有限公司列车自动控制研究所,100073,北京∥第一作者,助理工程师)
车载ATP(列车自动防护)系统作为CTCS-2级列控系统的重要组成部分,影响着列车的行车安全。在将车载ATP投入应用之前,必须对其进行严格、完备的测试。
当前,对车载ATP进行的测试是以人工为主的测试。由于需要人的参与和控制,这种方法效率低下,也无法克服回归测试中重复操作、工作量大等问题,而且需要测试人员根据知识和经验判断测试结果,因此测试结果的准确性不能得到切实保证。
鉴于人工测试的诸多弊端,所以亟需开发针对车载ATP的自动测试。在自动测试中,必然要编写测试脚本,利用测试脚本与车载ATP之间自动交互信息和自主判断,完成对车载ATP的测试。
本文介绍了利用工具命令语言(Tool Command Language,简为TCL)脚本语言编写针对车载ATP的TCL脚本函数库,并利用TCL脚本函数库编写车载ATP测试案例脚本的方法。最后,以“列车侧线通过12号道岔”为例,介绍了根据测试案例编写测试案例脚本的方法。
1 TCL语言简介
TCL语言是一种命令脚本化语言。它是基于字符串的解释型命令语言,是一种简明、高效、可移植性好的编程语言,具有可扩展、支持重用、简单易学等特点。TCL语言作为应用的粘合剂,能够将很多应用程序紧密地集成在一起,并且每一条TCL语句都可以理解成命令参数形式[1-2]。TCL提供了标准语法,并实现了许多功能,利用TCL开发测试脚本方便而简单[3-4]。
TCL功能很强大,经常被用于快速原型开发、脚本编程、GUI和测试等方面。TCL和其他编程语言例如C不同,它是一种解释语言而非编译语言。TCL程序由一系列TCL命令组成,在运行时由TCL解释器解释运行。
虽然TCL是一种脚本语言,但是它的编程规则和C、C++等常用语言很类似,容易上手。而且TCL脚本语言提供了许多TCL命令,这些命令为实现复杂多样的功能提供了方便。TCL语言提供了解析器,无需开发人员再去开发新的解析器。基于TCL语言的以上特点,使用TCL脚本语言编写测试脚本具有简单、方便、功能强大等优点。
2 车载ATP自动测试系统结构
车载ATP自动测试系统结构图如图1所示。
图1 车载ATP自动测试系统结构图
测试脚本包括TCL脚本函数库和测试案例脚本两部分。根据测试案例的每一步操作,依次调用TCL脚本函数库中与操作对应的脚本函数,并为脚本函数输入正确的参数,就可编写出与测试案例对应的测试案例脚本。
主引擎调用测试案例脚本,将脚本命令传递给正确的分引擎,分引擎通过测试接口将脚本命令发送给车载ATP,控制ATP执行该脚本命令。同时,分引擎通过测试接口从车载ATP实时获取信息,获得车载ATP信息之后,分引擎通过主引擎将车载ATP信息传递给测试案例脚本。
从图1可以看出,主引擎、分引擎和测试接口一起构成了测试案例脚本与车载ATP交互信息的桥梁。正是通过测试脚本与车载ATP之间自动交互信息,测试案例脚本控制着车载ATP执行各种操作和状态转换,并根据车载ATP的反馈信息判断被测功能是否成功,最终实现对车载ATP的功能测试。
本文主要目的是介绍利用TCL脚本语言创建TCL脚本函数库和编写测试案例脚本,因此不对主引擎、分引擎、测试接口和车载ATP做深入介绍。
3 创建TCL脚本函数库
为了降低编写测试案例脚本的复杂度,减少维护脚本的工作量,提高编写测试案例脚本的效率,很有必须将测试案例中针对某一个被测功能的所有脚本模块化成一个固定的函数,所有这些函数构成一个TCL脚本函数库。如果一个测试案例需要测试车载ATP的某一项功能,只需调用TCL脚本函数库中与被测功能对应的TCL脚本函数。
下面举例说明如何将测试脚本模块化成功能单一的函数。
在CTCS-2级列控系统车载ATP的测试案例中,经常需要判断列车当前的允许速度是否为期待的允许速度。判断列车当前允许速度的逻辑处理流程如图2所示,判断列车当前允许速度的TCL脚本代码如图3所示,从图3可以看出,如果用TCL脚本语言实现该函数,需要多句脚本语言才能实现该功能。因此,很有必要将所有用于判断列车当前允许速度的TCL脚本语言封装成一个函数expect_permitted_speed。每次调用函数expect_permitted_speed的时候,只需输入期待允许速度permitted_speed和超时时间time_out即可。
在CTCS-2级车载ATP测试案例中,还经常需要判断列车当前运行等级、速度、加速度等信息,又需要对车载ATP执行上电、激活驾驶台、设置列车加速度等操作。无论是判断车载ATP的各种状态信息,还是对车载ATP执行的各种操作,都具有单一的功能,可以将实现这些功能的TCL脚本封装成函数,所有这些函数集合起来就构成了TCL脚本函数库。
如果需要测试车载ATP新的功能,或者对车载ATP执行新的操作,只需在TCL脚本函数库中添加新的函数即可。如果需要改变某一个车载ATP功能的测试方法,只需对TCL脚本函数库中的对应函数进行修改。可以看出,创建TCL脚本函数库方便了测试案例脚本的修改,也能减少修改测试案例脚本所带来的错误。
图2 判断列车当前允许速度流程图
图3 判断列车当前允许速度的TCL脚本代码
4 编写测试案例脚本方法及举例
根据测试案例编写测试案例脚本时,在测试案例脚本开头部分首先引用包含TCL脚本函数库的文件,根据测试案例中每一步需要执行的操作,依次调用TCL脚本函数库中与该操作对应的TCL脚本函数,根据实际情况为每一个被调用的TCL脚本函数输入正确的参数,即可完成一个测试案例脚本的编写。
下面根据一个真实的车载ATP测试案例,举例说明该测试案例对应的测试案例脚本。
表1是列车侧线通过12号道岔的一个测试案例。测试案例的初始条件是列车停在新咸宁IIIG。列车运行路径为从新咸宁IIIG正线发车,新乌龙泉车站侧线通过,最高允许速度为300km/h,道岔弯股限速45km/h。
图4为列车侧线通过12号道岔的测试脚本。其中,“#”开头的语句均为注释语句。每一句TCL脚本语句都是由TCL脚本函数和输入参数构成,TCL脚本函数全部来自TCL脚本函数库“ate.exp”。下面对这些TCL脚本函数做简要说明。
set_atp_power:设置车载ATP上电或断电。
set_cabin:激活或关闭列车驾驶台。
表1 列车侧线通过12号道岔测试案例
图4 列车侧线通过12号道岔测试脚本
set_cabin_direction:设置列车方向手柄为前向或中立或后向。
set_speed:设置列车实际运行速度为指定速度。
expect_operational_mode:判断列车当前处于何种运行模式。
expect_position:判断列车是否到达指定位置。
expect_machine_man_control:判断 DMI当前显示“机控”或“人控”。
expect_target_speed:判断列车当前的目标速度是否等于指定速度。
expect_permitted_speed:判断列车当前的允许速度是否等于指定速度。
expect_speed:判断列车当前实际速度是否等于指定速度。
press_dmi_button:按压DMI上的启动按钮。
goto_track_position:设置列车初始位置。
5 结语
在CTCS-2级列控系统中,为了保证行车安全,在将车载ATP投入实际使用之前,必须对其进行严格测试。对车载ATP进行自动测试,不但可以降低测试人员的工作压力,提高测试效率,而且能够提高测试的准确度,因此,很有必要研究和开发车载ATP的自动测试方法。在自动测试中,必然要运用到测试脚本。本文介绍了TCL脚本语言,并描述了利用TCL脚本语言编写测试案例脚本的方法,并举例说明了根据测试案例编写测试案例脚本的方法。目前,CTCS-2级车载ATP自动测试平台已经开发完成,利用本文介绍的方法编写的CTCS-2级车载ATP测试案例脚本进行实验室测试和验证,证明利用TCL脚本语言编写测试脚本是方便高效的,本文介绍的方式是正确可行的,可以提高测试效率及测试结果准确度,并减低测试人员工作压力。
[1]John K.Ousterhout Ken Jones.Tcl/Tk入门经典[M].北京:清华大学出版社,2010.
[2]赵利.基于TCL脚本的自动化测试工具的研究与实现[J].信息化研究,2009,35(11):28.
[3]魏玄,申敏.基于TCL脚本语言的AT指令自动化测试技术的研究[J].重庆邮电大学学报,2008,20(5):517.
[4]付文霞.脚本在面向对象实时数据库中的应用研究[J].科学技术与工程,2008,8(17):5024.