自动测试过程控制实现方式分析
2022-02-11徐建华
徐建华,张 瑞,张 弛
(卡斯柯信号有限公司,北京 100070)
为确保行车安全,铁路信号控制系统在现场开通运行之前都会依据技术规范、需求等制定测试场景,测试用例执行测试。信号产品的测试工作量大,需要投入的人力多,耗时高,测试过程中又常有一些重复性的测试操作,而且人工测试又可能出现疏忽,导致漏测、错测等问题,为提高测试效率,保障测试质量,开发对应的自动化测试软件,实现对铁路信号产品或项目数据的自动测试是铁路信号产品的一项重要工作。对于铁路信号项目大量的数据与大量测试用例,使用自动测试软件替代人工进行测试,自动测试软件如何控制整个过程,完成自动测试,简要分析如下。
1 自动控制分类
自动测试软件也属于自动控制系统,只是更侧重于软件。在自动控制原理中有两个基础概念,即开环控制与闭环控制(闭环控制也称为反馈控制),对应两类不同的控制方式。
开环控制:无反馈信息的系统控制方式。
闭环控制:有反馈信息的系统控制方式。作为被控的输出量以一定方式返回到作为控制的输入端,并对输入端施加控制影响的一种控制关系,如图1模型所示。
图1 闭环控制结构Fig.1 Closed-loop control structure
自动控制原理的这两个概念同样适用于软件自动测试,下文结合开环控制与闭环控制的概念,举例讨论自动测试软件的两种实现方式:通过时间轴控制与通过状态机控制的自动测试过程。
2 时间轴控制的自动测试过程
时间轴控制的自动测试过程,是按照事先指定的一系列的时刻自动地给被测软件输入不同的数据或操作,从而达到代替人工触发输入的测试过程。
一个常见的测试用例如图2所示。
图2 测试用例模板Fig.2 Test case template table
对于时间轴控制的自动测试软件,会在Time1时刻自动完成操作1或输入数据1给被测软件,在Time2时刻自动完成操作2或输入数据2给被测软件。在测试中,经常用到这种实现方式的自动测试软件。在确保指定时刻可成功输入数据与操作给被测软件的情况下,可通过日志或回放方式,确认数据与操作是否成功输入给被测软件的情况下,这是一种常见且有效可行的测试方式。
例如,在列控中心测试的过程中,有这样的测试用例:排列接发车进路、下发限速,然后检查列控中心发给LEU的报文是否正确。按照上述内容整理成测试用例,如图3所示。
图3 测试用例示例Fig.3 An example of test case
对于自动测试来说,需要让自动测试软件知道在哪个时刻发送出数据或操作,可以制作包含时间的输入文件提供给自动测试软件,例如可写成如图4所示的形式。
图4 自动测试输入示例Fig.4 An example of automatic test input
按照上述输入文件,则在时间刻度为150,进路号为1的进路自动输入给被测对象列控中心,时间刻度为350,临时限速命令自动输入给被测对象列控中心,从而代替测试人员手动在模拟CBI上点击进路,在模拟TSRS上触发限速命令。当需要执行多个测试用例时,则自动测试软件只需要获得多个类似的输入并顺序执行即可。
但是,这种实现方式也有其不足之处:1)需要在自动测试前通过计算或者依赖经验预估各输入数据与操作的触发时刻,但是预估的触发时刻可能不合理、不正确,尤其当操作稍复杂时,可能不易预估计算。而且,如果依赖人工在输入文件中填写输入量的时间值,这本身就是一个很大的工作量。例如,在TCC项目数据测试中有大量重复性的办理进路与下发限速,如果人工制作这样的输入文件,将是巨大的工作量,而且过多过大的输入文件也不易维护。2)自动测试过程中未确认输入数据或操作是否成功输入给被测试软件。如果输入操作和数据给被测对象的过程失败,则后续将预期结果与实际结果进行对比就没有意义。例如,上例自动测试过程中没有考虑进路号与临时限速命令是否收到成功输入给列控中心,如果自动测试软件没有确认是否成功的将进路号与临时限速输入给列控中心,则将预期报文与实际报文进行自动对比的结果就不可信。
3 状态机控制的自动测试过程
为避免上述实现方式的问题,可考虑一种基于状态机的闭环控制实现方式。下文还以上述测试用例为例来说明该实现方式。该测试用例的闭环控制的自动测试过程如图5所示。
图5 闭环控制的自动测试过程Fig.5 Closed-loop controlled automatic test process
与上述时间轴控制的方式相比较,状态机控制的自动测试过程增加了反馈环节,可以根据反馈情况影响输入,软件可以动态的确定后续测试步骤是否执行、执行时刻等。也就是说,可以根据测试用例的执行状态,动态的决定后续的执行步骤。可以将测试用例的测试过程分为n个状态,状态个数与测试步骤数不一定是一一对应的关系,如图6所示。
状态机是一种常见的软件设计模式,对于该测试用例,可以绘制自动测试过程的状态,如图7所示。
图7 状态转换Fig.7 State transition diagram
这种方式不需要在输入文件中确定输入数据的时刻,而是根据测试用例的执行状态以及被测对象的反馈情况动态触发执行各步骤;而且当某个测试步骤执行不成功,且后续步骤没必要执行时,可根据测试状态跳过后续测试步骤转至结束。
上述两种自动测试过程控制方式各有其优点,对于状态机控制的自动测试过程,适用于测试步骤比较复杂或交互实时性要求较高的测试用例等,且可适用于测试大量重复性的数据与操作;对于时间轴控制的方式,使用人员可以通过在输入文件中编辑时间、数据、关键字等组合成各不同的测试步骤,具备可灵活的生成测试用例等优点。两种方式在自动测试软件开发中均有应用。
4 总结
自动测试过程控制方式是实现产品自动化测试过程中需解决的众多问题中的重要技术问题之一,本文举例阐述了两种常见的自动测试过程控制方式,对于实现铁路信号产品的自动测试有重要的借鉴意义。上述两种自动测试过程控制方式在铁路列控产品测试中均有成功应用,为保障铁路安全运行起了重要作用。