一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种测试案例自动扩展方法及装置与流程

2023-03-20 16:05:34 来源:中国专利 TAG:


1.本发明属于自动化测试技术领域,特别涉及一种测试案例自动扩展方法及装置。


背景技术:

2.在铁路交通通信领域,对于关键设备的功能测试至关重要。现有技术中针对特定系统的功能进行人工测试案例设计,测试脚本编写耗时耗力,测试数据局限性大。对于部分重要功能,如易错功能的加强测试主要依赖于测试人员补充、修改和维护测试案例,效率低,成本高,案例覆盖范围小。
3.例如,无线闭塞中心rbc是高速铁路的关键设备之一,其功能的正确性直接关乎安全,对无线闭塞中心rbc设备的功能验证的正确性至关重要。对于铁路信号目前产品在建的案例库,功能测试设计的案例多达上万个,从测试设计、测试实现和测试扩展严重依赖于人工的功能测试,制约了产品测试的发展和测试质量的提升。在案例扩展方面,目前有一些技术使用了建模、机器学习的技术,但是扩展效果均是局部的,覆盖范围小,学习成本高,扩展控制不灵活。
4.再者,目前对于无线闭塞中心rbc的功能测试,测试案例设计完成后,需要测试者通过自动化测试引擎工具提供的接口函数,进行案例的人工转化,编制具备工具能自动执行的测试脚本,从而将测试案例转化为脚本文件。即使有功能案例库的构建技术,局限性也很大,基本都是针对特定功能、特定测试类型进行案例的自动解析和执行,而且有很大的封闭性,无法通用。随着产品功能的不断迭代更新,案例库构建也需要相应的迭代更新,而脚本转换依赖人工解析则越来越不符合产品的发展需求。
5.因此,这种以人工为主要实现载体的方式严重耗费大量的成本和资源,从整体上造成针对无线闭塞中心rbc设备等通信系统的功能测试案例库构建技术自动化发展滞后,基本无法满足高铁市场快速发展的需要,是无线闭塞中心rbc技术发展面临的挑战之一。


技术实现要素:

6.为了解决上述问题至少之一,本发明提供一种测试案例自动扩展方法,包括:执行原测试案例的测试脚本,获得测试结果;根据测试结果,改变原测试案例的测试数据的输入值,生成衍生测试案例。
7.进一步地,根据测试结果,改变原测试案例的测试数据的输入值包括:获取待测试系统功能出错率达到一定阈值的参数值,改变原测试案例的测试数据的输入值。
8.进一步地,根据测试结果,改变原测试案例的测试数据的输入值包括:如果测试结果满足指定判断条件,表示测试通过,则调用选取策略,选取指定的典型值,替换测试步骤中测试数据对应的参数。
9.进一步地,所述调用选取策略包括至少以下方式之一:非法值遍历、选取极限值、选取有效范围内的异常值、二分法随机值;
根据选取策略生成新的测试案例;将新的测试案例的测试预期设置为:不满足指定判断条件。
10.进一步地,还包括:调用选取策略,获取扩展的参数值;确认扩展的参数值无误后,进行扩展操作,包括:将扩展的参数值写入到典型值表中,和/或将根据扩展的参数值生成的测试案例纳入经验库。
11.进一步地,根据问题经验库中的测试案例数据,基于对应的参数值进行变化扩展获得典型值表;将典型值表的典型值划分为:有效值、非法值、无效值。
12.进一步地,将选取策略以公用接口形式对外部提供,根据原脚本的测试结果进行启动调用。
13.进一步地,执行原测试案例的测试脚本包括自动解析测试案例脚本:基于格式化脚本解析测试案例,获取执行动作、执行主体和执行受体;其中,测试对象为待测试的通信系统;执行主体用于描述与测试对象连接的外部系统;执行受体用于描述执行动作处理的对象,包括:所述测试对象接收到的外部系统的消息。
14.进一步地,方法包括:获取测试案例中测试步骤和/或测试预期中的一组执行动作、执行主体和执行受体;基于接口实体映射表,将每组执行动作、执行主体和执行受体转化为测试脚本语句。
15.进一步地,将每组执行动作、执行主体和执行受体转化为测试脚本语句包括:将执行动作转换为执行动作接口函数;将执行主体转换为执行动作接口函数的执行实体对象;执行受体对应的测试数据作为执行动作接口函数的输入参数。
16.进一步地,将每组执行动作、执行主体和执行受体转化为测试脚本语句包括:将每组执行动作、执行主体和执行受体转化为语法树;根据语法树生成测试脚本。
17.进一步地,将语法树转换为能够被测试引擎识别的测试脚本,包括:获取配置的目标脚本语言控制类型标志;基于目标脚本语言控制类型标志,实现符合脚本语言的语法输出。
18.本发明提供一种测试案例自动扩展装置,包括:测试执行单元,用于执行原测试案例的测试脚本,获得测试结果;案例衍生单元,用于根据测试结果,改变原测试案例的测试数据的输入值,生成衍生测试案例。
19.本发明的测试案例自动扩展方法及装置,能够基于原测试案例,自动生成衍生测试案例,以提升功能测试的充分性和测试质量,提供了探索以错误推测的测试目的的测试
技术方案。
20.通过接口实现调用扩展策略,控制灵活,能够使用多种扩展策略,提高测试覆盖度,多角度丰富经验库。相比于机器学习等技术手段,具有更好的效率,并能够基于测试结果自动执行。自动生成的测试案例可以通过验证后补充至经验库,保障经验库中测试案例的稳定和准确。
21.再者,本发明能够针对无线闭塞中心rbc的功能测试,通过测试设计形成一套完整有效的文法规则,对于标准化人机可读的案例进行自动化解析,并构建标准化的测试脚本,实现功能测试的完全自动化测试。在此基础上,通过统一化、模块化设计构建得到人机可读的案例库文件,根据解析规则进行案例文件的自动解析,转换为自动化测试执行所需的、测试引擎能够执行的测试脚本,从而实现测试案例自动生成后测试案例自动解析,提供给测试案例自动执行为目标的解析器。本发明以自动构建、解析和执行是其核心,对于提升无线闭塞中心rbc产品功能验证的自动化具有重要意义。需要说明的是 ,本法明技术方案不限于应用在无线闭塞中心rbc的功能测试中,其他产品的功能测试也可以根据需要使用本发明个的方案进行自动化测试,例如,对于外部系统通信的计算机系统进行功能测试。
22.本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所指出的结构来实现和获得。
附图说明
23.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
24.图1示出了根据本发明实施例的案例解析流程示意图;图2示出了根据本发明实施例的案例语法树原理结构示意图;图3示出了根据本发明实施例的案例步骤1的测试步骤的语法树结构示意图;图4示出了根据本发明实施例的案例步骤1的测试预期的语法树结构示意图;图5示出了根据本发明实施例的案例步骤i的测试步骤的语法树结构示意图;图6示出了根据本发明实施例的案例步骤i的测试预期的语法树结构示意图;图7示出了根据本发明实施例的转换逻辑示意图;图8示出了根据本发明实施例的测试步骤中的执行动作触发方向示意图;图9示出了根据本发明实施例的测试预期中的执行动作触发方向示意图;图10示出了根据本发明实施例的测试引擎自动化实现原理示意图;图11示出了根据本发明实施例的测试案例扩展流程示意图;图12示出了根据本发明实施例的测试案例自动扩展装置结构示意图。
具体实施方式
25.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是
本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
26.本发明实施例一方面提供一种测试案例自动扩展方法,包括:执行原测试案例的测试脚本,获得测试结果;根据测试结果,改变原测试案例的测试数据的输入值,生成衍生测试案例。
27.根据测试结果,改变原测试案例的测试数据的输入值包括:获取待测试系统功能出错率达到一定阈值的参数值,改变原测试案例的测试数据的输入值。如果测试结果满足指定判断条件,表示测试通过,则调用选取策略,选取指定的典型值,替换测试步骤中测试数据对应的参数。
28.其中,调用选取策略包括至少以下方式之一:非法值遍历、选取极限值、选取有效范围内的异常值、二分法随机值;根据选取策略生成新的测试案例;将新的测试案例的测试预期设置为:不满足指定判断条件。
29.进一步地,还包括:调用选取策略,获取扩展的参数值;确认扩展的参数值无误后,进行扩展操作,包括:将扩展的参数值写入到典型值表中,和/或将根据扩展的参数值生成的测试案例纳入经验库。
30.根据问题经验库中的测试案例数据,基于对应的参数值进行变化扩展获得典型值表;将典型值表的典型值划分为:有效值、非法值、无效值。
31.其中,选取策略以公用接口形式对外部提供,根据原脚本的测试结果进行启动调用。
32.不失一般性地,执行原测试案例的测试脚本通过自动解析测试案例脚本进行。本发明实施例的测试案例自动扩展方法能够基于按照指定规范被自动解析的测试脚本进行扩展。
33.本发明实施例的另一方面提出一种案例自动解析方法,自动解析按照指定规则的测试案例文本,转化为能够被测试引擎执行的测试脚本,实现案例自动转换和自动测试执行。
34.下面首先介绍本发明实施例的案例自动解析方法。本发明实施例的案例自动解析方法可以通过一种案例自动解析装置实现,例如,实现为一种案例解析器。通过标准化案例设计,生成格式化案例(测试案例文本)后,在测试执行时通过案例解析器自动完成可供测试引擎驱动的测试脚本的转化。测试案例的执行即为测试脚本的执行,进行自动完成测试执行和结果判断。
35.案例解析器包括词法分析器、语法分析器、脚本解析转换器。
36.案例解析器工作原理如下:对用户指定的案例库文件范围的案例文本依次解析;对于每个案例的解析,按照案例步骤依次进行解析;其中案例步骤包括一个或多个测试步骤以及与测试步骤相对应的测试预期;如图1所示,对于每个测试步骤和测试预期,首先分别进行词法分析,将解析出的案例要素,即词法单元对象进行分类存储。案例要素包括案例执行主体、执行动作、执行受体等。其中,执行主体是执行动作的主体,执行受体是执行动作的客体。
37.然后进行案例语法分析,将案例的修饰语进行解析存储,并将其与关键词映射表
中的关键词对应,对修饰语中的数据进行解析,获取测试数据对应的语法树(测试数据对应的语法树是测试步骤或测试预期对应的语法树的一部分,即作为整个语法树的子树)。
38.根据上述语法树进行语义分析,映射出执行动作接口函数(简称接口函数,根据接口实体映射表获取),并赋予参数,转换成测试脚本;依次进行下一个测试步骤和测试预期的解析,直至对当前测试案例解析完成。
39.依次进行下一个案例的解析直至案例库解析完成。
40.不失一般性地,本发明实施例以对于无线闭塞中心(rbc)的案例解析为例进行说明。在另外的实施例中也可以对其他通信系统的功能案例进行解析,只要其案例符合本发明实施例的解析方法所要求的语法规则,例如,通过解析测试案例能够获取测试步骤或测试预期中的执行受体、执行主体和执行动作。其中,执行受体用于描述待测试的通信系统;执行主体用于描述与通信系统连接的外部系统;执行受体用于描述通信系统根据接收到的外部系统的消息,要处理的数据。
41.本发明实施例中,案例解析器能够对满足文法规则的案例脚本进行解析。针对rbc的功能特征设计满足以下需求的文法规则:测试者能够读、写,辅助案例设计。即测试案例由基于一定规则定义的自然语言编写,因此便于用户对接口的设计和阅读;满足计算机程序能够解析和翻译,实现自动化测试技术。即测试案例是由基于一定规则定义的机器语言,由其构成的特定文法。
42.本发明实施例中,规范化的测试案例通过指定的分隔符将案例步骤的执行主体、执行动作、执行受体进行拼接。进一步地,还将案例步骤中的执行主体、执行动作、执行受体、定语和属性按照指定的顺序通过指定的分隔符拼接。
43.示例性地,一个测试案例的文法规则定义如下:规则r=“执行主体{属性定义}:执行动作”“执行受体{属性}”“分隔符”“[定语]/定语”“(测试数据)”;规则r中实体单元包括执行主体、执行动作、执行受体、属性、分隔符、定语、数据;实体单元中,分为三种类型:终结实体、非终结实体、非对象实体;依据类型分类,执行主体、执行受体、属性、测试数据作为非终结实体。执行动作、变量、数值、操作符为终结实体。分隔符、定语为非对象实体。而终结实体则为特殊的词法单元对象。多个词法单元对象组成词法单元时,终结实体作为词法单元的代表节点,是描述测试案例的终结符号。
[0044]
由于执行动作是终结实体,则在测试步骤和测试预期中,使用的关键字必须唯一且互斥。例如,关键字“发送”,如果用于案例步骤中为“发送”,用于测试预期中则为“发出”,同时对应到接口函数也唯一且互斥,用于脚本转换时区别出预期进行判断。而一般情况下,根据无线闭塞中心产品特征,对于同一被测对象,在测试步骤和测试预期中,执行主体是不同的,因此执行动作也是不同的,例如,“发送”一般用于测试步骤,“接收”一般用于测试预期。
[0045]
为了词法分析,引入空值标记e作为空值的终结实体。
[0046]
测试案例在语义规则基础上进行实现,以测试步骤为单元构建测试案例。即案例设计中,每个案例步骤都是基于此文法规则进行构建。因此案例的解析就是对此文法规则的解析,翻译后转换为脚本语言。
[0047]
下面对案例解析的各个步骤进行详细说明。
[0048]
词法分析:测试案例是由文法规则r组成的字符串,执行词法分析时,从符合文法规则的字符串形式的案例步骤中分析出词法单元,即符合规则r的关键字单词流。
[0049]
词法单元是从案例步骤的字符串中得到包含规则r定义中各个实体单元,即执行主体、执行动作、执行受体、属性、定语、数据。一个案例步骤包含的多个单元描述字符串时,分解出相应个数的词法单元(执行主体,执行动作、执行受体)组合。
[0050]
其中,将案例步骤的描述字符串流转化为关键字单词流,根据关键字的单词进行映射再进行语义分析。其中,描述字符串流包括以指定分隔符连接的字符串形式的实体单元。
[0051]
具体地,测试案例包括一个或多个案例步骤。每个案例步骤的自然描述语言字符串由多个单元描述字符串组成,每个单元字符串间通过指定的分隔符连接;案例步骤中的每个单元字符串遵循第一文法规则r;每个单元字符串按第一文法规则r分析出来的实体遵循指定顺序,形成有序的组合,示例性地,实现按照(执行主体,执行动作、执行受体)的顺序形成组合c。
[0052]
如果执行主体缺省,代表执行动作是不针对任何实体对象,面向控制,例如测试案例中,“等待(time:sec=3)”,其中执行主体和执行受体均缺省,测试数据为时间参数;每个组合c中的实体,即执行主体,执行动作、执行受体均为关键字单词,关键字单词是否能够由关键字映射表映射得到,据此进行后续的语法分析,否则认为实体不符合文法规则;在案例步骤中,通过第一标记符标记属性,解析时,获取由第一标记符标记的属性。第一标记符为一组对应的标记符,示例性地,每个组合c中的关键字单词,在词法分析过程中按照r规则如果由“{”和“}”定义的修饰语,则为属性;在案例步骤中,通过第二标记符标记定语,解析时,获取由第二标记符标记的定语。第二标记符为一组对应的标记符,示例性地,在执行受体后的第二标记符标记的修饰语,为定语。由“[”和“]”定义的为多个定语,否则为单个定语,词法分析的输出结果中,可以删除定语;在案例步骤中,通过第三标记符标记测试数据,解析时,获取由第三标记符标记的测试数据。第三标记符为一组对应的标记符,示例性地,由“(”和“)”定义的为测试数据。解析时,基于第二文法规则,解析测试数据。
[0053]
测试数据为按照第二文法规则t的字符串。示例性地,测试数据为消息。规则t如下:t=消息类型{变量定义}:”“字段表意”“运算符”“值”,“字段表意”“运算符”“值”。
[0054]
示例性地,根据规则r和t,基于以下产生式解析测试案例:case
ꢀ‑
》sub act obj (data) 1)sub
ꢀ‑
》insprop|ins 2)obj-》insprop|ins 3)prop-》{expr}|e 4)expr
ꢀ‑
》expr op ins |ins 5)
ins
ꢀ‑
》val|str|e 6)data-》ins{expr}:expr 7)其中,case为案例,为开始符号;sub是非终结实体执行主体,obj为非终结实体执行受体,data是非终结实体测试数据,prop是非终结实体属性,ins可以是规则r和t中的代表变量的终结实体或者非终结实体,可以是变量字符串str或者数值val或者空值e的终结实体,也可以是表意名称的非终结实体;expr为表达式非终结实体,act为r中的执行动作关键字,为终结实体,op为操作符,e为空值; |代表文法中或的标识。
[0055]
根据上述原则,词法分析的目的通过扫描和处理测试步骤的字符串,输出有序的词法单元对象序列,每个词法单元对象有如下结构词法单元名称,属性。因此按照上述文法规则r和t进行案例字符串的解析后,可以生成词法单元对象形式如下:执行主体名称,属性执行动作,e执行受体,属性消息类型名称1,字段属性消息类型名称2,字段属性
[0056]
属性由于是非终结实体,仍旧可以继续按照t递归分析,直到全部为终止符为止。例如,消息类型名称1,字段属性消息类型名称2,字段属性》可以继续分析为:消息类型名称2,变量1字段名称1,属性运算符1,e值1,e
……
字段名称n,属性运算符n,e值n,e消息类型名称2,变量1字段名称1,属性运算符1,e值1,e
……
字段名称n,属性运算符n,e值n,e
……
示例性地,根据文法规则r设计的案例步骤如表1(以其中两个步骤为示例):表1 案例步骤示例
[0057]
经过词法分析后,得到的输出如表2所示:表2 词法分析结果举例
[0058]
语法分析:案例生成器在标准化设计的案例,经过词法分析后,得到了词法单元对象序列,在
此输出的基础上,进行语法分析。语法分析是通过词法单元对象,基于指定的文法规则构建语法树。其中,经过语法分析构建的语法树作为中间语法树,通过规则设计算法,可以对其进行语义检查,即语义分析,并最终转换为自动化程序可读的脚本案例。由此根据文法规则r和t,定义符合无线闭塞中心的案例语法树构建算法规则如下,如图2所示:1)语法树为多叉树,总共分为三层:实体要素层、属性层、数据层;2)语法树中采用自上向下遍历方式生成,遇到执行动作或操作符对应的节点,由于只有两个子节点,可以按照二叉树的规则进行遍历进行入队处理;示例性地,遍历词法单元对象序列,将执行动作和/或操作符作为父节点时,按照二叉树规则,将该父节点及其两个子节点构建到语法树中。
[0059]
语法树是语法分析的输出,用于转换为脚本和语义分析。语法分析的过程包括:对于初步构建的语法树,若根据文法规则,以开始符号,能够从语法树推导出案例的语言描述字符串,则该语法树为相应案例步骤或案例预期的语法树。构建语法树的过程是选择、尝试和确认的过程。
[0060]
3)实体要素层高度为3,根节点为固定节点,高度为0,执行动作作为高度为1的中间节点,执行主体和执行受体为高度为2的中间节点。如果执行主体和执行受体都存在,执行主体、执行动作和执行受体构成了二叉树,执行主体和执行受体为执行动作的子节点,执行主体为左子节点,执行受体为右子节点;4)执行主体、执行受体作为父节点时,其子节点可以为属性节点,代表文法中的属性信息;属性节点的子节点可以是操作符op;5)操作符作为父节点时,其子节点可以是对象ins节点,对象节点一般为变量和值(分别作为左子节点和右子节点)。操作符节点作为父节点,与其子节点构成二叉树结构;6)在操作符的右子节点,如果是字符串,可以在父节点对应的映射表或者全局变量对应的映射表中直接转换为目标值。
[0061]
通过构建中间语法树,使得测试案例可读而且具备自动化的条件。
[0062]
示例性地,根据以上原则,对上述测试案例构建语法树。
[0063]
如图3所示,实体要素层包括:根节点、执行动作节点、执行主体节点和执行受体节点。根节点为root,执行动作节点,即表示案例步骤中执行动作节点作为根节点的子节点。执行动作节点包括“设置”、“设置”、“发送”。以第一个“设置”执行动作节点为例,其子节点包括两个,分别是执行主体节点“联锁”和执行受体节点“进路”。
[0064]
属性层包括用于表示执行主体或执行受体的属性的节点。以执行主体节点“联锁”为例,通过操作符节点“=”及其两个子节点“名称”和“桐城”构成的二叉树,其中操作符节点作为执行主体节点“联锁”的子节点。操作符节点的子节点为对象节点,分别为“名称”和“桐城”。
[0065]
数据层包括用于表示测试数据的节点。示例性地,执行受体节点“进路”的子节点为sam(表示一种消息类型),其子节点为操作符“=”,操作符节点“=”的子节点为对象节点,分别为“进路类型”和“进路正常”。
[0066]
如图4所示,实体要素层包括根节点root,根节点root的子节点为执行动作节点“接收”;“接收”节点的子节点包括执行主体节点“列车”和执行受体节点“消息”。其中消息的内容通过属性层和数据层节点定义。消息的子节点为属性层的操作符节点“=”,操作符节
点“=”包括两个子节点,分别为“类型”和“行车许可”。其中,“行车许可”节点的内容通过数据层节点定义。“行车许可”节点包括两个子节点,分别为消息类型“m3”、“p15”。节点“m3”的子节点为操作符节点“=”,操作符节点“=”的左子节点和右子节点分别为消息字段“nid”、“1656788”。节点“p15”包含多个(2个以上)并列子节点,其中,最后一个子节点为操作符节点“=”,该操作符节点的子节点包括消息字段“l_endsection”和“.”,“.”(表示没有消息字段)的子节点为“rb终点”和“应答器”。
[0067]
图5为案例步骤i的测试步骤的语法树结构示意图,图6为案例步骤i的测试预期的语法树结构示意图,结构原理分别与图3和图4的语法树结构原理相同,内容根据rbc测试需求确定,不再赘述。
[0068]
根据上述生成的语法树,可以进行规则r和t的校验,即语义分析。同时也可以作为脚本转换的输入,将案例最终生成可供自动化执行程序解读的脚本语言。
[0069]
语义分析:对于测试案例的自然语言字符串进行词法分析和语法分析后得到语法树,对构建的语法树进行语义分析,以判断出描述案例的语言是否符合文法规则,是否有词法单元对象无法找到对应的映射表而导致最终的脚本转换失败的情况。具体地,以关键字映射表为基础进行判断。
[0070]
本发明实施例中,映射表主要有以下几种:第一映射表,用于描述执行主体和执行动作的映射关系表。语义分析过程中,根据第一映射表判断执行主体节点与相应的执行动作节点是否满足对应关系。第一映射表示例如下:表3 执行主体和执行动作映射关系表举例
[0071]
针对rbc的测试中,执行主体包括联锁或者列车/车载/atp(automatic train protection,列车自动保护系统)。当执行主体为联锁时,执行动作包括设置、激活、取消、出清或解锁,相应的执行受体分别为进路、灾害、进路或灾害、进路、进路。
[0072]
第二映射表,用于确定根据执行主体、执行动作和执行受体的组合与对应的消息类型的映射关系。语义分析包括根据第二映射表确定语法树节点中响应的消息类型是否与执行主体、指定动作和执行受体的组合相一致,即在第二映射表中存在与当前语法树节点一致的执行主体、执行动作、执行受体和消息类型的映射关系记录。例如,当执行主体为“联锁”,执行动作为“设置”,执行受体为“进路”时,消息类型应当为“与进路相关的消息类型”,具体为“信息授权消息”。第二映射表示例如下:表4 执行主体、执行动作、执行受体、消息类型综合映射关系表举例执行主体、执行动作、执行受体、消息类型综合映射关系表举例
[0073]
第三映射表为实体参数映射表,用来描述外部实体和被测对象的实体名称、类型、属性和参数的关系。语义分析包括:根据实体参数映射表初始化接口实体对象。
[0074]
表5 实体参数映射表举例
[0075]
第四映射表为消息类型映射表,用于描述不同消息的属性和参数的关系。语义分析包括:根据第四映射表确定语法树节点中相应的消息的属性和参数是否一致。第四映射表示例如下:表6 消息类型映射关系表举例
[0076]
第五映射表为变量类型映射表,分为静态表和动态表,静态表一般为全局变量映射的表,用于描述变量名称和值的关系。语义分析时根据全局变量映射表,将对应的语法树节点中的变量名称替换为对应的值。一般将表达式右节点的名称替换为值,例如:表7 变量类型静态映射关系表举例
[0077]
动态表为遍历语法树时构建的局部表,用于变量替换或者计算,用于临时存储对应的变量名称、变量的值、变量的类型、变量的属性。例如:表8 变量类型动态映射关系表举例
[0078]
第六映射表为操作符表映射,用于描述操作符类型与操作对象(操作数)的匹配关系,语义分析时根据第六映射表确定操作符与操作对象之间是否符合映射表中规定的匹配
关系:表9 操作符映射关系表举例
[0079]
本发明实施例中,语义分析时,根据上述映射表中的一个或多个按以下原则对语法树进行校验:1)所有的属性节点和对象节点中的变量是否有定义,即是否在映射表中能够匹配到;2)实体层中的组合c,即(执行主体,执行动作、执行受体)是否符合正确的映射关系;3)操作符是否在支持的操作符号表中,操作符与操作对象之间是否符合映射表中规定的匹配关系;例如,判断操作符左右两个对象是否与操作符匹配,如果属性是str,就不能用于“ ”作为操作符。
[0080]
4)操作符的子节点中,右节点如果不是操作符,则为数值。
[0081]
通过语义分析后,可以根据输出的语法树构建目标脚本,即执行如下转换步骤。
[0082]
转换:案例通过语义检查通过后,可以进行脚本语言的转换。构建的脚本满足支持脚本执行的测试引擎所要求的脚本语言的语法,以便测试引擎可以解析脚本后运行脚本,最终达到测试自动化的需求。
[0083]
转换过程中,语法树作为转换输入源与目标脚本(即测试脚本)的构建间互相透明,即语法树与测试脚本之间具有对应关系,能够互相转换,如图7所示:对语法树进行遍历,根据接口实体映射表(表11、表12)将语法树中的对象节点(对象节点一般是指变量,如名称或消息类型,如果执行主体、执行受体没有子节点,那也可以是对象节点)进行接口对象转换处理,转换为接口对象;根据脚本语言关键字映射表进行脚本语言转换逻辑处理,生成接口对象的属性信息和接口函数;执行语法树解析转换逻辑:根据语法树生成案例脚本,获得以脚本语言形成的目标脚本,案例脚本可以直接进行自动化测试。
[0084]
本发明实施例中,语法树的结构不影响目标脚本生成的逻辑(即上述的脚本语言转换逻辑处理和语法树解析转换逻辑),即语法树结构与目标脚本生成逻辑相互独立设计;测试引擎执行目标脚本所支持的语言不影响语法树的生成逻辑。
[0085]
语法树与目标脚本根据以下规则实现透明转换。其中,规则用于描述接口对象(测试数据和执行动作对应的接口实现)抽象和实现间的对应关系。规则包括以下内容:1)测试数据对应的数据对象通过数据类型接口对象构建,例如,data1=m136();2)数据类型接口对象构建空对象后再进行数据字段赋值,例如,data1.nid_engine=200611;3)无论是测试数据对应的数据类型接口对象,还是执行动作对应的接口函数,或是执行主体对应的接口实体对象,均以对象形式访问其数据成员或者方法。例如cbi1.activate(), data1.nid_engine,其中,cbi1是执行主体对象,activate是执行动作对应的接口函数。data1是测试数据对象,nid_engine是消息类型的一个字段。
[0086]
4)执行动作对应的接口函数是执行主体对应的实体类的方法,例如atp1.send()。如果不存在执行主体,则执行动作是全域操作。
[0087]
5)执行动作对应的接口函数名称具有唯一性,且以测试数据对应的对象作为接口函数的输入参数,例如,atp1.send(data1);6)执行主体实例化采用单例设计模式,即如果实例化时,id号未找到,则新建对象,如果找到则返回已构建的对象。例如,cbi1=cbi(id=9996288),第一次构建时为新建对象,第二次构建时则返回已构建对象;7)根据执行动作对应的接口函数类型,如果是测试预期的执行动作,则默认构建出根据返回结果判断的执行逻辑,以获得测试案例执行结果。根据铁路信号系统特点,无线闭塞中心作为被测对象时,所有的动作均是外部触发的,在案例步骤的测试步骤中,执行主体和执行受体间的关系如图8所示。执行动作的执行主体为外部实体(外部系统,如联锁),被测对象(如rbc)与执行受体关联,用于接收或处理执行受体,执行受体为执行动作的操作对象,如执行动作为“发送”,执行受体为“消息”。而在案例步骤对应的测试预期中,执行主体和执行受体间的关系如图9所示。执行动作的执行主体为被测对象rbc,执行受体(如反馈消息或报错信息)由rbc相连接的外部实体处理。
[0088]
在测试步骤和测试预期中,执行动作的执行主体和执行受体的关系方向是相反的,本发明实施例采用执行动作唯一定义,从而通过接口函数方法的名称映射表得到其属于测试步骤或是测试预期的动作。
[0089]
根据规则r和t,案例设计仅涉及条件判断和顺序两种控制类型即可满足自动化测试需求,从而使得进行脚本转换的复杂度降低,测试者通过配置目标脚本语言控制类型标志,算法内部逻辑识别并实现符合脚本语言的语法输出。
[0090]
表10 脚本语言关键字配置举例
[0091]
在遍历语法树过程中,通过接口实体映射表完成语法树到目标脚本的转换,包括:1)根据第八映射表,将执行动作转换为执行动作接口函数;2)在案例步骤解析过程中,将执行主体转换为执行动作接口函数的执行实体对象:基于第七映射表获取对应的接口对象标识,根据数据类型的属性的解析,确定接口函数的输入参数;3)在案例预期解析过程中,执行受体对应的测试数据是执行动作接口函数的输入参数;4)所有的属性节点均转换为局部的动态映射表,用于测试数据转换成输入参数时的值的计算;5)操作符节点的左子节点如果不是操作符,需要确保其左子节点在完成遍历后(即遍历左子节点的相关子节点)得到返回值;6)如果消息的字段变量映射后存在中文,则替换为相应的映射表中的英文别名;7)根据目标语言语法,如果转换后一行有多个语句,语句间使用配置的分隔符,例如“;”。
[0092]
第七映射表为数据类型接口对象表,用于描述对案例步骤中执行主体进行描述,包括数据类型的字段变量的属性和字段的关系。举例如下:表11 字段变量接口映射关系表举例
[0093]
第八映射表为函数接口对象和实体接口对象映射表,用于描述执行主体与接口对象的对应关系,以及描述执行动作和接口函数之间的映射关系。举例如下:表12 函数接口对象和实体接口对象表举例
[0094]
在遍历语法树进行转换时,根据以下方法步骤进行遍历转换:1)采用自底向上(即后序遍历)的遍历规则,遍历时采用堆栈的数据结构;2)如果遇到终结实体,则到达叶子节点;3)所有的非终结实体对应的节点都为中间节点,如果是操作符,则进行运算处理后进行赋值;4)如果非终结实体节点是测试数据,则建立数据的对象,例如data1、data2,对象类型根据接口实体映射表匹配后得到;5)所有的非终结实体节点,从左到右的子节点,为属性节点和对象节点。例如图4中p15节点,最右节点为对象节点,其余均为属性节点;6)非终结实体节点可以通过在构建语法树中构建节点的属性值或者遍历时根据
关键字映射表匹配的方式识别是属性节点或者是对象节点;7)属性节点在遍历结束后,则得到一个局部的动态映射表,给父节点、兄弟节点映射时进行转换时使用;8)测试数据的节点遍历完成后,得到一个入参表达式,赋值给父节点的执行受体;9)执行主体遍历完成后,构建出案例中动作的执行对象,例如atp1、atp2;10)执行动作遍历完成后,根据接口实体映射表,得到接口函数,例如set,send,recv函数,结合执行主体和执行受体的遍历得到的脚本对象,构建出脚本语言。从而实现脚本的转换。执行动作依据自身类型判断出是否为预期,如果是预期,则转换为条件判断的逻辑语句;11)对于无线闭塞中心,根据r和t文法规则构建出的标准化案例,逻辑仅涉及顺序、条件两种,不涉及循环,即可满足目前测试案例设计的自动化测试需求。条件用于在测试预期的判断中。
[0095]
案例cs转换后的脚本语言举例如下:表13 案例脚本转换结果举例
[0096]
上述案例的脚本转换以脚本文件形式提供给测试自动化平台执行,其具备如下优点:1.可扩展,通过扩展映射表的接口函数定义和实现功能的扩展;2.标准化,转换的脚本语言格式、形式均统一;3.自动化,转换的脚本可以自动执行;4.灵活性,可针对测试执行引擎面向的不同脚本语言,通过提供不同的映射表实
现不同脚本语言的转换;5.简单化,使得测试者不用关心脚本语言,而集中精力进行案例设计。而且脚本转换后,由于脚本接口设计规范化,接口函数均进行了功能封装,转换后的脚本逻辑相对降低了调试和可读的复杂性;6.探索性,可以在语法树的基础上,增加案例设计的算法策略,扩展案例的测试数据达到探索性测试。
[0097]
以下对本发明实施例的测试案例自动扩展方法进行详细说明。
[0098]
案例转换成脚本语言后,即可提交给测试引擎进行自动执行,并返回测试结果。测试引擎中包括接口对象的实现,其对脚本提供了接口对象映射表中所有函数、数据类型的定义和实现。为了实现简单化,测试引擎的开发语言应与测试脚本使用的语言保持一致。测试引擎对于脚本的自动化执行原理如图10所示。在测试层,根据测试者的测试要求,调度相应的测试脚本作为输入测试引擎的输入。测试脚本即基于语法树转换成的目标脚本。测试引擎作为测试执行的核心层,包括接口对象实现,能够对测试脚本进行解析,并通过接口对象实现调用函数接口,执行测试步骤,并获取测试脚本的测试结果,进行处理和反馈。在测试脚本的解析过程、函数接口调用过程、脚本结果处理过程中,如果出现异常,测试引擎对异常进行处理,如记录错误日志和/或给出警告。测试引擎解析执行指定程序语言的测试脚本时,基于相应的底层语言解释器,python语言解释器。
[0099]
通过测试引擎的解析后得到执行结果,根据执行结果可以衍生测试案例。具体地,通过构建历史记录的经验问题库,获取最容易出现错误的rbc功能的参数值,即出错率达到一定阈值的参数值,改变原测试案例的测试数据的输入值,将预期结果取反,生成新的案例,进行探索性的补充测试,从而提高测试的充分性和质量。
[0100]
首先定义经验库的数据规范,针对测试数据对应的消息类型的字段、接口函数对应的输入参数(例如时间参数)分别进行构建不同作用类型的典型值(包括单个值或取值范围),按照作用类型,将典型值分为有效值、符合规范不符合功能的无效值、不符合规范的非法值,举例如下:表14 问题经验库对应的典型值举例
[0101]
为了达到探索性测试的目标,需要在典型值里根据一定的选取策略进行值的选定后进行案例的扩展,从而进行探索性测试。目前有一些技术使用了建模、机器学习的技术,但是效果均是局部的。本发明实施例根据无线闭塞中心产品功能特征,通过将选取策略以公用接口形式对外部提供,根据原脚本的测试结果进行启动调用。
[0102]
1)测试引擎执行脚本,得出原脚本的测试结果;2)如果测试结果满足指定判断条件,表示测试通过(案例预期的值为通过),则调用选取策略,在典型值表里选取指定的典型值,替换测试步骤中测试数据对应的参数。选取策略包括:非法值遍历、选取极限值、选取有效范围内的异常值、二分法随机值等;根据选取策略生成新的测试案例;3)将新的测试案例的测试预期设置为:不满足指定判断条件。即,当执行测试案例的案例步骤后,测试结果不满足指定判断条件时,认为测试通过。示例性地,对于结果为true的判断条件,取反后,要求结果为false。
[0103]
本发明实施例的测试案例扩展流程如图11所示。首先对测试案例的脚本进行解析执行,对执行结果进行判断,当测试未通过时,发送错误报告到测试调用者(如测试调用程序或测试者)。当测试通过时,根据典型值选取策略逻辑,在典型值库中选取典型值,作为指定参数的取值,生成新的测试步骤,并对测试预期取反,生成衍生测试案例(扩展脚本)。选取策略从策略集中选取,策略集可以根据测试者的需要设置多个可选择的选取策略。典型值表与经验问题库(经验库)对应交互。问题经验库由测试者根据测试历史进行维护,对于待测试对象中错误率较高的测试案例数据进行记录入库。典型值表为根据问题经验库中的测试案例数据,基于对应的参数值进行变化扩展而获得,按照作用类型分为:有效值、非法值、无效值。典型值选取策略逻辑根据注册的选取策略执行。选取策略逻辑还包括扩充典型值表。在根据选取策略选取了典型值后,有可能会生成错误的参数值(不是预期的扩展结果),只有脚本执行得到确认后,自动扩展的值才会反馈写到典型值表和经验库里,例如人工确认后脚本执行结果后如果确定此值有意义,则扩展了典型值和经验库。
[0104]
不失一般性地,测试案例扩展功能集成在测试引擎中。
[0105]
通过对测试脚本进行案例扩展,能够实现自动化探索测试,例如,测试案例通过有效范围随机值选取策略得到的一个扩展案例(data2.type=0)为:表15 扩展案例举例扩展案例举例
[0106]
扩展脚本经过测试者确认后由测试引擎自动执行,根据结果进行分析处理。
[0107]
基于相同的发明构思,本发明实施例还提供一种测试案例自动扩展装置,如图12所示,包括:测试执行单元,用于执行原测试案例的测试脚本,获得测试结果;案例衍生单元,用于根据测试结果,改变原测试案例的测试数据的输入值,生成衍生测试案例。本发明实施例的测试案例自动扩展装置的具体实现能够根据上述测试案例自动扩展方法实施例获得,不再赘述。其中,测试执行单元的具体实现方式可以根据上述案例自动解析方法的实施例获得。
[0108]
尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献