CN111078548A - 测试用例解析方法、装置、存储介质及验证平台 - Google Patents
测试用例解析方法、装置、存储介质及验证平台 Download PDFInfo
- Publication number
- CN111078548A CN111078548A CN201911238500.8A CN201911238500A CN111078548A CN 111078548 A CN111078548 A CN 111078548A CN 201911238500 A CN201911238500 A CN 201911238500A CN 111078548 A CN111078548 A CN 111078548A
- Authority
- CN
- China
- Prior art keywords
- statement
- configuration
- ith
- configuration object
- queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Test And Diagnosis Of Digital Computers (AREA)
Abstract
本申请实施例公开了一种测试用例解析方法、装置、存储介质及验证平台,属于测试技术领域。所述方法包括:获取验证平台中目标层级的第一配置对象的测试用例,测试用例的变量名中包含第一配置对象的上下文;获取第二配置对象的配置信息,第二配置对象是目标层级的下级或同级的配置对象,所述配置信息的变量名中包含所述第二配置对象的上下文;根据所述配置信息对测试用例进行解析,得到第一配置对象的配置语句队列,配置语句队列的变量名中包含第一配置对象的上下文。本申请实施例在解析第一配置对象的测试用例时,复用第二配置对象的配置信息,从而避免编写第一配置对象的配置信息,简化了配置流程。
Description
技术领域
本申请实施例涉及测试技术领域,特别涉及一种测试用例解析方法、装置、存储介质及验证平台。
背景技术
验证环境由验证平台、测试用例描述文件和与其对应的预处理解析脚本组成。请参考图1,验证平台包括ENV和测试序列(sequence),该ENV与被测器件相连,该测试序列负责向ENV发送事务级的操作请求。其中,ENV和测试序列都被开发成可配置的形式,且对外开放的配置变量可以集成到一个配置对象中。比如,env_cfg中包括ENV的配置变量,seq_reg_cfg中包括测试序列的配置变量。这些配置变量在仿真开始时通过查询或匹配仿真工具接收到的test_plusargs来获取具体的配置值,并将其传递至ENV或测试用例以供使用。测试用例描述文件是测试用例的集合,每个测试用例由若干具有单变量的配置语句组成,该配置语句用来指定配置对象中指定变量的配置值。预处理解析脚本负责在测试用例描述文件中定位出指定测试用例,从该指定测试用例中抽取出所有配置语句,并在仿真开始前以test_plusargs的形式送给仿真工具。
随着被测器件的规模不断增加,在单一层次上完成被测器件的所有验证工作已变得不再实际。开发人员会根据被测器件的规模和功能相关性,将该被测器件由上至下分解为若干不同层级的功能单元。例如,一个SOC(System on Chip,片上系统)可能会被分解为若干sub-system(子系统),一个sub-system可能会被分解为若干module(模块),一个module会被分解为若干sub-module(子模块)。此时,需要在不同的层级上为这些功能单元分别搭建验证平台,并编写对应的测试用例。
由于ENV、测试序列、配置对象等验证组件具有模块化特性,所以,这些验证组件可以在不同层级上被直接或递归式的复用。为了避免复用时可能出现的命名冲突,也为了使测试用例更易于理解和维护,可以根据配置对象的上下文(全层级实例名)在test-plusargs中进行查询操作或匹配操作,对应的,配置对象的配置语句中需要包含配置对象的上下文。然而,由于同一配置对象在不同层级会有不同的上下文,这就导致配置信息无法在不同的层级间复用。
发明内容
本申请实施例提供了一种测试用例解析方法、装置、存储介质及验证平台,用于解决配置信息无法在不同的层级间复用的问题。所述技术方案如下:
一方面,提供了一种测试用例解析方法,所述方法包括:
获取验证平台中目标层级的第一配置对象的测试用例,所述测试用例的变量名中包含所述第一配置对象的上下文;
获取第二配置对象的配置信息,所述第二配置对象是所述目标层级的下级或同级的配置对象,所述配置信息的变量名中包含所述第二配置对象的上下文;
根据所述配置信息对所述测试用例进行解析,得到所述第一配置对象的配置语句队列,所述配置语句队列的变量名中包含所述第一配置对象的上下文。
一方面,提供了一种测试用例解析装置,所述装置包括:
获取模块,用于获取验证平台中目标层级的第一配置对象的测试用例,所述测试用例的变量名中包含所述第一配置对象的上下文;
所述获取模块,还用于获取第二配置对象的配置信息,所述第二配置对象是所述目标层级的下级或同级的配置对象,所述配置信息的变量名中包含所述第二配置对象的上下文;
解析模块,用于根据所述配置信息对所述测试用例进行解析,得到所述第一配置对象的配置语句队列,所述配置语句队列的变量名中包含所述第一配置对象的上下文。
一方面,提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的测试用例解析方法。
一方面,提供了一种验证平台,所述验证平台包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如上所述的测试用例解析方法。
本申请实施例提供的技术方案的有益效果至少包括:
通过获取目标层级的第一配置对象的测试用例,再获取第二配置对象的配置信息,由于测试用例的变量名中包含第一配置对象的上下文,所以,可以在根据该配置信息解析测试用例时,对第二配置对象的上下文进行修改,使得解析得到的配置语句队列的变量名中包含第一配置对象的上下文,这样,就可以复用第二配置对象的配置信息,从而简化了配置流程。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据部分示例性实施例示出的一种验证平台的结构示意图;
图2是本申请一个实施例提供的测试用例解析方法的方法流程图;
图3是本申请另一实施例提供的测试用例解析方法的方法流程图;
图4是本申请另一实施例提供的测试用例的示意图;
图5是本申请另一实施例提供的验证平台的结构示意图;
图6是本申请再一实施例提供的测试用例解析装置的结构框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
请参考图2,其示出了本申请一个实施例提供的测试用例解析方法的方法流程图,该测试用例解析方法可以应用于验证平台中。该测试用例解析方法,可以包括:
步骤201,获取验证平台中目标层级的第一配置对象的测试用例,该测试用例的变量名中包含第一配置对象的上下文。
测试用例由若干单变量配置语句组成,该语句用来指定第一配置对象中指定变量的配置值。
其中,上下文也可以成为全层级实例名。假设第一配置对象为top,则测试用例的变量名可以是top_cfg.aaa。
步骤202,获取第二配置对象的配置信息,该第二配置对象是目标层级的下级或同级的第二配置对象,该配置信息的变量名中包含第二配置对象的上下文。
步骤203,根据配置信息对测试用例进行解析,得到第一配置对象的配置语句队列,该配置语句队列的变量名中包含第一配置对象的上下文。
测试用例最终的解析结果是一个或多个由单变量配置语句组成的配置语句队列。
本实施例中,可以在根据配置信息解析测试用例时,对测试用例的变量名进行修改,这样,得到的配置语句队列的变量名中即可包含第一配置对象的上下文。也即,可以复用第二配置对象的配置信息,而不必在配置测试用例时逐条编写大量的变量配置语句,既可以提高测试用例的编写效率,也可以提高测试用例的可读性和可维护性,从而简化了配置流程。
另外,相关技术中可以在第二配置对象的测试用例中设置全局变量,这样,当在第一配置对象中实例化第二配置对象时,该全局变量也是可用的。但是,一个全局变量只能被调用一次,所以,第二配置对象无法在第一配置对象中被多次实例化。另外,在编写测试用例的全局变量时,需要考虑该测试用例是否会被复用,从而增加测试用例的编写难度。而本实施例中,通过复用配置信息来解析测试用例,而无需引入全局变量,这样,配置信息可以被复用多次,即,第二配置对象可以在第一配置对象中被实例化多次,且编写测试用例时无需考虑该测试用例是否会被复用。另外,本实施例还可以对单变量配置语句中的信息进行部分复用,还可以自动创建大批量的参数扫描临时测试用例,增加了复用的灵活性。
综上所述,本申请实施例提供的测试用例解析方法,通过获取目标层级的第一配置对象的测试用例,再获取第二配置对象的配置信息,由于测试用例的变量名中包含第一配置对象的上下文,所以,可以在根据该配置信息解析测试用例时,对第二配置对象的上下文进行修改,使得解析得到的配置语句队列的变量名中包含第一配置对象的上下文,这样,就可以复用第二配置对象的配置信息,从而简化了配置流程。
本实施例中,步骤203可以包括如下几个子步骤,请参考图3:
步骤2031,从测试用例中提取第i个语句,i为正整数;
步骤2032,检测第i个语句是否是第二配置对象的实例化语句;若第i个语句是第二配置对象的实例化语句,则进行第一预定处理;若第i个语句不是第二配置对象的实例化语句,则执行步骤2033;
其中,检测第i个语句是否是第二配置对象的实例化语句就是检测第i个语句是否为新的作用域(scope)开始语句。在介绍作用域之前,先介绍可复用的配置单元。
可复用的配置单元是可以被复用的配置信息。可复用的配置单元具有如下特征:
1)可复用的配置单元同时包含操作指示语句和变量赋值语句;
其中,操作指示语句用来对变量赋值语句进行进一步操作。操作指示语句可以包括四种类型:
第一种类型是表达式替换语句,该语句包含匹配pattern(模式)和替换pattern,即,用匹配pattern去匹配变量赋值语句,如果匹配上,就用替换pattern替换赋值语句中被匹配的部分。
第二种类型是赋值删除语句,该语句包含匹配pattern,即,用匹配pattern去匹配整条变量赋值语句,如果匹配上,就删除该变量赋值语句。
第三种类型是局部变量赋值语句。
第四种类型是循环遍历展开使能语句,该循环遍历使能语句能够使能循环遍历语句,以使循环遍历语句展开。由于有时候需要对参数进行参数扫描测试,所以,可以在单变量赋值语句的基础上引入循环遍历展开语句。本实施例中,可以根据循环遍历展开语句为各个参数的待测扫描值组合自动创建临时测试用例,而不必为每一个扫描值组合手动编写测试用例。
循环展开操作在解析测试用例的最后一步进行,且展开操作的输入为配置语句队列和循环展开使能语句队列,展开操作的输出为M个配置语句队列,M为待测扫描值组合的数目,每个输出的配置语句队列对应一个自动生成的临时测试用例。比如,参数为a,待测扫描值组合为{1,2,3},则可以编写$var inside{1,2,3},a=$var的测试用例,则可以解析出a=1、a=2和a=3这三个配置语句队列。
其中,循环遍历语句可以包含以下要素:
a)语句标签(label),用来在使能语句定位;
b)扫描变量;
c)使用扫描变量的单变量赋值语句;
d)待测扫描值组合,其有两种确定方式,第一种是列出待测扫描值组合,例如{v1,v2,v3},第二种是指定最大值、最小值和步长,例如{max:min:step},再在该步长范围内随机选取待测扫描值。
当然,还可以关闭循环展开操作,此时,每条循环遍历语句中的扫描变量在其待测扫描值组合中随机选一个扫描值。通常,可以通过输入选项控制循环展开操作的开关。比如,顶层配置对象的测试用例控制其下所有循环展开操作的开关,且默认情况下关闭循环展开操作;中间层配置对象的测试用例的循环遍历语句被忽略,即即使中间层配置对象的测试用例的循环遍历语句用于控制打开循环遍历操作,循环遍历操作仍然会被关闭。
2)可复用的配置单元之间通过实例化组合的方式实现复用;
其中,可复用的配置单元间没有继承关系,只有包含与被包含的关系。并且,一个配置单元内可实例化多个子配置单元,这些子配置单元可以相同,也可以不同。即,可以在一个配置单元内对同一个子配置单元实例化多次。需要说明的是,如果一个配置单元对某个子配置单元只实例化了一次,则在实例化时,可省略该配置单元的实例名。
3)每个可复用的配置单元及其实例都引入一个作用域;
其中,每个配置单元及在其下实例化的子配置单元都会创建一个新的作用域,且一个作用域下会递归的嵌套多个作用域。在外层作用域,用配置单元的全层级实例名来标识与其对应的被嵌套作用域。
需要说明的是,操作指示语句组不会创建新的作用域,且操作指示语句只作用于其声明语句所在的作用域以及该作用域包含的各级子作用域里的赋值语句。其中,在声明操作指示语句时,可以指定一个作用域作为该操作指示语句的顶层目标作用域,且该顶层目标作用域必须是声明语句所在作用域包含的一个子作用域。
另外,在实例化子配置单元时,可通过在线扩展语句向子配置单元实例对应的作用域中添加赋值语句,这样,以该实例作用域为目标的操作指示语句也会处理这些新添加的赋值语句。
4)可复用的配置单元支持局部变量的使用;
5)可复用的配置单元可以是测试用例,也可以不是测试用例。
其中,测试用例中,操作指示语句或操作指示语句组位于测试用例的最前端,且不限制其数目;子测试用例、可复用的配置组和单变量赋值语句位于操作指示语句和操作指示语句组之后,不限制三者的数目和顺序,且这三者可以相互交叉,请参考图4。
下面对第一预定处理方式进行说明。
1)若第i个语句是第二配置对象的实例化语句,则将第i个语句的语句地址存储到语句地址堆栈中,将第一配置对象的操作指示语句队列存储到操作指示语句队列堆栈中,将第一配置对象的赋值语句队列存储到赋值语句队列堆栈中;
其中,第一配置对象的操作指示语句队列即为当前作用域的操作指示语句队列,第一配置对象的赋值语句队列即为当前作用域的赋值语句队列。
2)将当前指针指向第二配置对象的配置信息,并将第二配置对象作为第一配置对象;
其中,第二配置对象的配置信息即为新的作用域对应的可复用的配置单元定义处,将第二配置对象作为第一配置对象即为将新的作用域设定为当前作用域。
3)对第一配置对象创建空操作指示语句队列和空赋值语句队列;
其中,为第一配置对象创建空操作指示语句队列和空赋值语句队列即为为新的作用域创建空操作指示语句队列和空赋值语句队列。
4)将全局操作指示语句队列中第一配置对象的操作指示语句添加到空操作指示语句队列中,并将第i个语句中的赋值语句添加到空赋值语句队列中;
其中,全局操作指示语句队列是跨作用域的操作指示语句队列,第一配置对象的操作指示语句即为新的作用域的操作指示语句。
5)将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
步骤2033,检测第i个语句是否是操作指示语句组的实例化语句;若第i个语句是操作指示语句组的实例化语句,则进行第二预定处理;若第i个语句不是操作指示语句组的实例化语句,则执行步骤2034;
其中,操作指示语句组是由操作指示语句及该操作指示语句包含的子操作指示语句组构成的复用单元,且操作指示语句组内不包含变量赋值语句。
下面对第二预定处理方式进行说明。
1)若第i个语句是操作指示语句组的实例化语句,则将第i个语句的语句地址存储到语句地址堆栈中,并将当前指针指向操作指示语句组;
2)将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
步骤2034,检测第i个语句是否是操作指示语句组的结束语句;若第i个语句是操作指示语句组的结束语句,则进行第三预定处理;若第i个语句不是操作指示语句组的结束语句,则执行步骤2035;
其中,操作指示语句组的结束语句可以是“}”。
下面对第三预定处理方式进行说明:
1)若第i个语句是操作指示语句组的结束语句,则从语句地址堆栈中读取最后进栈的语句地址,将语句地址赋值给当前指针;
2)将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
步骤2035,检测第i个语句是否是操作指示语句;若第i个语句是操作指示语句,则进行第四预定处理;若第i个语句不是操作指示语句,则执行步骤2036;
下面对第四预定处理方式进行说明:
1)若第i个语句是操作指示语句,则检测第i个语句是否是第一配置对象的操作指示语句;
本步骤中,检测第i个语句是否是第一配置对象的操作指示语句的目的是检测第i个语句是否是跨作用域操作指示语句;若第i个语句不是跨作用域操作指示语句,则执行步骤2);若第i个语句是跨作用域操作指示语句,则执行步骤3)。
比如,第i个语句是instA:s/top_cfg/top_cfg.instC_cfg.instA_cfg,该语句的含义是在instA的作用域内,将第二配置对象的变量名中的top_cfg替换为第一配置对象的变量名中的top_cfg.instC_cfg.instA_cfg。
2)若第i个语句是第一配置对象的操作指示语句,则将第i个语句存储到第一配置对象的操作指示语句队列中;
3)若第i个语句不是第一配置对象的操作指示语句,则将第i个语句和目标层级存储到全局操作指示语句队列中;
其中,将第i个语句和目标层级存储到全局操作指示语句队列中即为将第i个语句及其顶层作用域存储到全局操作指示语句队列中。
4)将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
步骤2036,检测第i个语句是否是单变量赋值语句;若第i个语句是单变量赋值语句,则进行第五预定处理;若第i个语句不是单变量赋值语句,则执行步骤2037;
下面对第五预定处理方式进行说明:
1)若第i个语句是单变量赋值语句且第i个语句中包含变量,则遍历第一配置对象中的变量替换操作指示语句队列,对变量替换操作指示语句队列中与第i个语句相匹配的变量进行替换;或者,遍历第一配置对象的删除操作指示语句队列,对删除操作指示语句队列中与第i个语句相匹配的语句替换为空字符串,并结束遍历操作;或者,遍历第一配置对象的表达式替换操作指示语句队列,对表达式替换操作指示语句队列中与第i个语句相匹配的语句进行替换,继续遍历操作;
其中,删除操作是指删除对第i个语句中的变量的变量值的限定,删除后该变量可以为任意数值。表达式替换操作详见上述第四预定处理方式中的举例,此处不作赘述。
2)若处理后的第i个语句不是空字符串,则将处理后的第i个语句添加到第一配置对象的赋值语句队列中,处理后的第i个语句中包含第一配置对象的上下文;
其中,除了删除操作外,将变量替换操作或表达式替换操作后得到的第i个语句添加到第一配置对象的赋值语句队列中,以便于后续将该赋值语句队列作为配置语句队列进行输出。
3)将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
步骤2037;检测第i个语句是否是第二配置对象的结束语句;若第i个语句是第二配置对象的结束语句,则进行第六预定处理;若第i个语句不是第二配置对象的结束语句,则结束流程。
其中,检测第i个语句是否是第二配置对象的结束语句即为检测第i个语句是否是可复用的配置单元定义结束语句。
下面对第六预定处理方式进行说明:
1)若第i个语句是第二配置对象的结束语句,则检测语句地址堆栈是否为空;
其中,检测语句地址堆栈是否为空即为检测该作用域外是否包裹有外层作用域。
2)若语句地址堆栈不为空,则读取第二配置对象的上层配置对象的操作指示语句队列和配置语句队列;
其中,读取第二配置对象的上层配置对象的操作指示语句队列和配置语句队列即为读取外层作用域的操作指示语句队列和配置语句队列。
3)依次根据上层配置对象的操作指示语句队列处理处理第二配置对象的赋值语句队列中的单变量赋值语句,并将处理结果存储到上层配置对象的配置语句队列中;
其中,可以根据外层作用域的操作指示语句队列处理处理当前作用域的赋值语句队列中的单变量赋值语句,并将处理结果存储到外层作用域的配置语句队列中
4)从语句地址堆栈中读取最后进栈的语句地址,并将语句地址赋值给当前指针,将上层配置对象作为第一配置对象;
其中,将上层配置对象作为第一配置对象即为将外层作用域作为当前作用域。
5)将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
需要说明的是,若语句堆栈地址为空,则认为测试用例编写有误,此时结束测试用例的解析过程。
本实施例中,在检测语句地址堆栈是否为空之后,该方法还可以包括:
6)若语句地址堆栈为空,则扫描配置语句队列;
7)若配置语句队列中存在循环遍历展开语句,且循环遍历展开语句未被使能,则从扫描变量中选择一个待测扫描值,根据待测扫描值生成单变量配置语句,并利用单变量配置语句替换循环遍历展开语句;8)若配置语句队列中存在循环遍历展开语句,且循环遍历展开语句被使能,则将循环遍历展开语句存储到循环遍历语句队列中,根据循环遍历语句队列中语句的数量建立多层嵌套循环结构,并在每次循环时为M个待扫描参数确定一组扫描值,得到M条单变量赋值语句,再将每条单变量赋值语句添加到一个配置语句队列中,得到M个配置语句队列,其中,配置语句队列是复制得到的,M为正整数。
比如,测试用例中的“open loop C”表示使能循环遍历展开语句。
假设测试队列中参数b为2,参数c为3,且循环结构中参数a的数值分别为1、2和3,则可以生成一个参数a为1、参数b为2,参数c为3的配置语句队列、一个参数a为2、参数b为2,参数c为3的配置语句队列和一个参数a为3、参数b为2,参数c为3的配置语句队列。
简单来说,用户需要为第一配置对象编写配置信息,此时该配置信息中应该包含第一配置对象的上下文。如果存在一个第二配置对象的配置信息与该第一配置对象的配置信息相似,只有上下文不同的区别,则可以在第一配置对象的测试用例中指定包含的第二配置对象,再对该第二配置对象中的每条配置语句中的上下文进行替换,替换后的配置信息即可作为第一配置对象的配置信息。需要说明的是,这里需要包括两种语句,第一种是测试用例实例化语句,即说明第一配置对象中包含哪些第二配置对象;第二种是操作指示语句,即说明对配置语句进行何种操作,以将第二配置对象的配置语句转换成第一配置对象的配置语句,这样,通过这两种语句即可对第二配置对象的配置信息进行复用。
为了便于理解,下面以垂直复用配置信息为例,对复用下级的配置对象的配置对象来解析测试用例的流程进行说明。
请参考图5,图5中的SOC实例化了一个SubsystemX,其实例名为InstC;SubsystemX中实例化了两个IPX,其实例化名分别为InstA,InstB,且在SOC的验证平台中IPX_cfg被复用,它有两个实例,全路径名为top_cfg.InstC_cfg.InstA_cfg和top_cfg.InstC_cfg.InstB_cfg。
其中,SOC的测试用例为:
IPX的测试用例为:
在解析SOC_t1的测试用例时,第一个语句“InstA:s/top_cfg/top_cfg.InstC_cfg.InstA_cfg”为表达式替换操作指示语句,该表达式替换操作指示语句指示在作用域InstA下把top_cfg替换为top_cfg.InstC_cfg.InstA_cfg。同理,第二个语句“InstB:s/top_cfg/top_cfg.InstC_cfg.InstB_cfg”为表达式替换操作指示语句,该表达式替换操作指示语句指示在作用域InstB下把top_cfg替换为top_cfg.InstC_cfg.InstB_cfg。第三个语句“IPX_t1:InstA:with{top_cfg.ddd=4}”为配置对象的实例化语句,该语句复用IP验证级测试用例IPX_t1,并将新创建的作用域命名为InstA,并在实例化时使用了在线扩展语句,将赋值语句top_cfg.ddd=4添加进了作用域InstA。另外,SOC_t1控制所有循环遍历展开语句,且因为其没有使能InstA.loop_C,所以不会有循环遍历展开。
解析后SOC_t1对应的配置语句队列如下:
top_cfg.InstC_cfg.InstA_cfg.aaa=1
top_cfg.InstC_cfg.InstA_cfg.bbb=2
top_cfg.InstC_cfg.InstA_cfg.ccc=3
top_cfg.InstC_cfg.InstA_cfg.ddd=4
top_cfg.InstC_cfg.InstB_cfg.aaa=1
top_cfg.InstC_cfg.InstB_cfg.bbb=2
top_cfg.InstC_cfg.InstB_cfg.ccc=3
需要说明的是,本实施例中可以按照深度优先算法对测试用例或可复用的配置单元组或操作指示语句组等可嵌套结构进行解析。
为了便于理解,下面以水平复用配置信息为例,对复用同级的配置对象的配置对象来解析测试用例的流程进行说明。
其中,IPX的测试用例为:
其中,IPX_ch2_scenario1_test的意图是在scenario1下对ch2进行测试,由于该测试用例复用了已有的测试用例IPX_ch1_scenario1_test,且被复用的测试用例只被实例化一次,可省略ch2的实例名。
IPX包含若干相同的数据处理通道,每一组数据处理通道都由独立的专用寄存器组进行控制,且每组寄存器名称只是前缀不同,以区分不同数据处理通道。操作指示语句s/ch1/ch2用来修改被复用测试用例中寄存器名的前缀。解析后IPX_ch2_scenario1_test对应的配置语句队列如下
top_cfg.ch2_aaa=1
top_cfg.ch2_bbb=2
IPX_chn1_scn1_chn2_scn2_test的意图是对ch1和ch2联合测试,其中ch1在场景scenario1下,ch2在场景scenario2下,该测试用例复用了测试用例IPX_ch1_scenario1_test和IPX_ch1_scenario2_test。因为需要修改IPX_ch1_scenario2_test中寄存器的名称的前缀,所以,实例化该测试用例时需要注明ch2的实例名,即在操作指示语句中限定该实例名的范围。解析后IPX_chn1_scn1_chn2_scn2_test对应的配置语句队列如下
top_cfg.ch1_aaa=1
top_cfg.ch1_bbb=2
top_cfg.ch2_aaa=3
top_cfg.ch2_bbb=4
请参考图6,其示出了本申请一个实施例提供的测试用例解析装置的结构框图,该测试用例解析装置可以应用于验证平台中。该测试用例解析装置,可以包括:
获取模块610,用于获取验证平台中目标层级的第一配置对象的测试用例,测试用例的变量名中包含第一配置对象的上下文;
获取模块610,还用于获取第二配置对象的配置信息,第二配置对象是目标层级的下级或同级的配置对象,配置信息的变量名中包含第二配置对象的上下文;
解析模块620,用于根据配置信息对测试用例进行解析,得到第一配置对象的配置语句队列,配置语句队列的变量名中包含第一配置对象的上下文。
在一个可选的实施例中,解析模块620,还用于:
从测试用例中提取第i个语句,i为正整数;
检测第i个语句是否是第二配置对象的实例化语句;
若第i个语句是第二配置对象的实例化语句,则将第i个语句的语句地址存储到语句地址堆栈中,将第一配置对象的操作指示语句队列存储到操作指示语句队列堆栈中,将第一配置对象的赋值语句队列存储到赋值语句队列堆栈中;
将当前指针指向第二配置对象的配置信息,并将第二配置对象作为第一配置对象;
对第一配置对象创建空操作指示语句队列和空赋值语句队列;
将全局操作指示语句队列中第一配置对象的操作指示语句添加到空操作指示语句队列中,并将第i个语句中的赋值语句添加到空赋值语句队列中;
将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
在一个可选的实施例中,解析模块620,还用于:
若第i个语句不是第二配置对象的实例化语句,则检测第i个语句是否是操作指示语句组的实例化语句;
若第i个语句是操作指示语句组的实例化语句,则将第i个语句的语句地址存储到语句地址堆栈中,并将当前指针指向操作指示语句组;
将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
在一个可选的实施例中,解析模块620,还用于:
若第i个语句不是操作指示语句组的实例化语句,则检测第i个语句是否是操作指示语句组的结束语句;
若第i个语句是操作指示语句组的结束语句,则从语句地址堆栈中读取最后进栈的语句地址,将语句地址赋值给当前指针;
将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
在一个可选的实施例中,解析模块620,还用于:
若第i个语句不是操作指示语句组的结束语句,则检测第i个语句是否是操作指示语句;
若第i个语句是操作指示语句,则检测第i个语句是否是第一配置对象的操作指示语句;
若第i个语句是第一配置对象的操作指示语句,则将第i个语句存储到第一配置对象的操作指示语句队列中;
若第i个语句不是第一配置对象的操作指示语句,则将第i个语句和目标层级存储到全局操作指示语句队列中;
将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
在一个可选的实施例中,解析模块620,还用于:
若第i个语句不是操作指示语句,则检测第i个语句是否是单变量赋值语句;
若第i个语句是单变量赋值语句且第i个语句中包含变量,则遍历第一配置对象中的变量替换操作指示语句队列,对变量替换操作指示语句队列中与第i个语句相匹配的变量进行替换;或者,遍历第一配置对象的删除操作指示语句队列,对删除操作指示语句队列中与第i个语句相匹配的语句替换为空字符串,并结束遍历操作;或者,遍历第一配置对象的表达式替换操作指示语句队列,对表达式替换操作指示语句队列中与第i个语句相匹配的语句进行替换,继续遍历操作;
若处理后的第i个语句不是空字符串,则将处理后的第i个语句添加到第一配置对象的赋值语句队列中,处理后的第i个语句中包含第一配置对象的上下文;
将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
在一个可选的实施例中,解析模块620,还用于:
若第i个语句不是单变量赋值语句,则检测第i个语句是否是第二配置对象的结束语句;
若第i个语句是第二配置对象的结束语句,则检测语句地址堆栈是否为空;
若语句地址堆栈不为空,则读取第二配置对象的上层配置对象的操作指示语句队列和配置语句队列;
依次根据上层配置对象的操作指示语句队列处理处理第二配置对象的赋值语句队列中的单变量赋值语句,并将处理结果存储到上层配置对象的配置语句队列中;
从语句地址堆栈中读取最后进栈的语句地址,并将语句地址赋值给当前指针,将上层配置对象作为第一配置对象;
将i更新为i+1,继续执行从测试用例中提取第i个语句的步骤。
在一个可选的实施例中,解析模块620,还用于:
若语句地址堆栈为空,则扫描配置语句队列;
若配置语句队列中存在循环遍历展开语句,且循环遍历展开语句未被使能,则从扫描变量中选择一个待测扫描值,根据待测扫描值生成单变量配置语句,并利用单变量配置语句替换循环遍历展开语句;
若配置语句队列中存在循环遍历展开语句,且循环遍历展开语句被使能,则将循环遍历展开语句存储到循环遍历语句队列中,根据循环遍历语句队列中语句的数量建立多层嵌套循环结构,并在每次循环时为M个待扫描参数确定一组扫描值,得到M条单变量赋值语句,再将每条单变量赋值语句添加到一个配置语句队列中,得到M个配置语句队列,其中,配置语句队列是复制得到的。
综上所述,本申请实施例提供的测试用例解析装置,通过获取目标层级的第一配置对象的测试用例,再获取第二配置对象的配置信息,由于测试用例的变量名中包含第一配置对象的上下文,所以,可以在根据该配置信息解析测试用例时,对第二配置对象的上下文进行修改,使得解析得到的配置语句队列的变量名中包含第一配置对象的上下文,这样,就可以复用第二配置对象的配置信息,从而简化了配置流程。
本申请一个实施例提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上所述的测试用例解析方法。
本申请一个实施例提供了一种验证平台,所述验证平台包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如上所述的测试用例解析方法。
需要说明的是:上述实施例提供的测试用例解析装置在进行测试用例解析时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将测试用例解析装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的测试用例解析装置与测试用例解析方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述并不用以限制本申请实施例,凡在本申请实施例的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请实施例的保护范围之内。
Claims (11)
1.一种测试用例解析方法,其特征在于,所述方法包括:
获取验证平台中目标层级的第一配置对象的测试用例,所述测试用例的变量名中包含所述第一配置对象的上下文;
获取第二配置对象的配置信息,所述第二配置对象是所述目标层级的下级或同级的配置对象,所述配置信息的变量名中包含所述第二配置对象的上下文;
根据所述配置信息对所述测试用例进行解析,得到所述第一配置对象的配置语句队列,所述配置语句队列的变量名中包含所述第一配置对象的上下文。
2.根据权利要求1所述的方法,其特征在于,所述根据所述配置信息对所述测试用例进行解析,得到所述第一配置对象的配置语句队列,包括:
从所述测试用例中提取第i个语句,i为正整数;
检测所述第i个语句是否是所述第二配置对象的实例化语句;
若所述第i个语句是所述第二配置对象的实例化语句,则将所述第i个语句的语句地址存储到语句地址堆栈中,将所述第一配置对象的操作指示语句队列存储到操作指示语句队列堆栈中,将所述第一配置对象的赋值语句队列存储到赋值语句队列堆栈中;
将当前指针指向所述第二配置对象的配置信息,并将所述第二配置对象作为所述第一配置对象;
对所述第一配置对象创建空操作指示语句队列和空赋值语句队列;
将全局操作指示语句队列中所述第一配置对象的操作指示语句添加到所述空操作指示语句队列中,并将所述第i个语句中的赋值语句添加到所述空赋值语句队列中;
将i更新为i+1,继续执行所述从所述测试用例中提取第i个语句的步骤。
3.根据权利要求2所述的方法,其特征在于,在所述检测所述第i个语句是否是所述第二配置对象的实例化语句之后,所述方法还包括:
若所述第i个语句不是所述第二配置对象的实例化语句,则检测所述第i个语句是否是操作指示语句组的实例化语句;
若所述第i个语句是所述操作指示语句组的实例化语句,则将所述第i个语句的语句地址存储到语句地址堆栈中,并将当前指针指向所述操作指示语句组;
将i更新为i+1,继续执行所述从所述测试用例中提取第i个语句的步骤。
4.根据权利要求3所述的方法,其特征在于,在所述检测所述第i个语句是否是操作指示语句组的实例化语句之后,所述方法还包括:
若所述第i个语句不是操作指示语句组的实例化语句,则检测所述第i个语句是否是操作指示语句组的结束语句;
若所述第i个语句是所述操作指示语句组的结束语句,则从所述语句地址堆栈中读取最后进栈的语句地址,将所述语句地址赋值给当前指针;
将i更新为i+1,继续执行所述从所述测试用例中提取第i个语句的步骤。
5.根据权利要求4所述的方法,其特征在于,在所述检测所述第i个语句是否是操作指示语句组的结束语句之后,所述方法还包括:
若所述第i个语句不是所述操作指示语句组的结束语句,则检测所述第i个语句是否是操作指示语句;
若所述第i个语句是所述操作指示语句,则检测所述第i个语句是否是所述第一配置对象的操作指示语句;
若所述第i个语句是所述第一配置对象的操作指示语句,则将所述第i个语句存储到所述第一配置对象的操作指示语句队列中;
若所述第i个语句不是所述第一配置对象的操作指示语句,则将所述第i个语句和所述目标层级存储到全局操作指示语句队列中;
将i更新为i+1,继续执行所述从所述测试用例中提取第i个语句的步骤。
6.根据权利要求5所述的方法,其特征在于,在所述检测所述第i个语句是否是操作指示语句之后,所述方法还包括:
若所述第i个语句不是所述操作指示语句,则检测所述第i个语句是否是单变量赋值语句;
若所述第i个语句是所述单变量赋值语句且所述第i个语句中包含变量,则遍历所述第一配置对象中的变量替换操作指示语句队列,对所述变量替换操作指示语句队列中与所述第i个语句相匹配的变量进行替换;或者,遍历所述第一配置对象的删除操作指示语句队列,对所述删除操作指示语句队列中与所述第i个语句相匹配的语句替换为空字符串,并结束遍历操作;或者,遍历所述第一配置对象的表达式替换操作指示语句队列,对所述表达式替换操作指示语句队列中与所述第i个语句相匹配的语句进行替换,继续遍历操作;
若处理后的所述第i个语句不是空字符串,则将处理后的所述第i个语句添加到所述第一配置对象的赋值语句队列中,处理后的所述第i个语句中包含所述第一配置对象的上下文;
将i更新为i+1,继续执行所述从所述测试用例中提取第i个语句的步骤。
7.根据权利要求6所述的方法,其特征在于,在所述检测所述第i个语句是否是单变量赋值语句之后,所述方法还包括:
若所述第i个语句不是单变量赋值语句,则检测所述第i个语句是否是所述第二配置对象的结束语句;
若所述第i个语句是所述第二配置对象的结束语句,则检测语句地址堆栈是否为空;
若所述语句地址堆栈不为空,则读取所述第二配置对象的上层配置对象的操作指示语句队列和配置语句队列;
依次根据所述上层配置对象的操作指示语句队列处理处理所述第二配置对象的赋值语句队列中的单变量赋值语句,并将处理结果存储到所述上层配置对象的配置语句队列中;
从所述语句地址堆栈中读取最后进栈的语句地址,并将所述语句地址赋值给当前指针,将所述上层配置对象作为所述第一配置对象;
将i更新为i+1,继续执行所述从所述测试用例中提取第i个语句的步骤。
8.根据权利要求7所述的方法,其特征在于,在所述检测语句地址堆栈是否为空之后,所述方法还包括:
若所述语句地址堆栈为空,则扫描配置语句队列;
若所述扫描配置语句队列中存在循环遍历展开语句,且所述循环遍历展开语句未被使能,则从扫描变量中选择一个待测扫描值,根据所述待测扫描值生成单变量配置语句,并利用所述单变量配置语句替换所述循环遍历展开语句;
若所述扫描配置语句队列中存在循环遍历展开语句,且所述循环遍历展开语句被使能,则将所述循环遍历展开语句存储到循环遍历语句队列中,根据所述循环遍历语句队列中语句的数量建立多层嵌套循环结构,并在每次循环时为M个待扫描参数确定一组扫描值,得到M条单变量赋值语句,再将每条单变量赋值语句添加到一个配置语句队列中,得到M个配置语句队列,其中,所述配置语句队列是复制得到的,M为正整数。
9.一种测试用例解析装置,其特征在于,所述装置包括:
获取模块,用于获取验证平台中目标层级的第一配置对象的测试用例,所述测试用例的变量名中包含所述第一配置对象的上下文;
所述获取模块,还用于获取第二配置对象的配置信息,所述第二配置对象是所述目标层级的下级或同级的配置对象,所述配置信息的变量名中包含所述第二配置对象的上下文;
解析模块,用于根据所述配置信息对所述测试用例进行解析,得到所述第一配置对象的配置语句队列,所述配置语句队列的变量名中包含所述第一配置对象的上下文。
10.一种计算机可读存储介质,其特征在于,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如权利要求1至8任一所述的测试用例解析方法。
11.一种验证平台,其特征在于,所述验证平台包括处理器和存储器,所述存储器中存储有至少一条指令,所述指令由所述处理器加载并执行以实现如权利要求1至8任一所述的测试用例解析方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911238500.8A CN111078548B (zh) | 2019-12-06 | 2019-12-06 | 测试用例解析方法、装置、存储介质及验证平台 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911238500.8A CN111078548B (zh) | 2019-12-06 | 2019-12-06 | 测试用例解析方法、装置、存储介质及验证平台 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111078548A true CN111078548A (zh) | 2020-04-28 |
CN111078548B CN111078548B (zh) | 2023-05-23 |
Family
ID=70313177
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911238500.8A Active CN111078548B (zh) | 2019-12-06 | 2019-12-06 | 测试用例解析方法、装置、存储介质及验证平台 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111078548B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113505082A (zh) * | 2021-09-09 | 2021-10-15 | 腾讯科技(深圳)有限公司 | 应用程序测试方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB1479122A (en) * | 1975-12-11 | 1977-07-06 | Ibm | Method of operating a computer to produce test case programmes |
WO1990004829A2 (en) * | 1988-10-24 | 1990-05-03 | Eastman Kodak Company | Object-oriented, logic, and database programming tool |
US6028999A (en) * | 1996-11-04 | 2000-02-22 | International Business Machines Corporation | System and method for non-sequential program statement execution with incomplete runtime information |
US20130318503A1 (en) * | 2012-05-25 | 2013-11-28 | Fujitsu Limited | Symbolic execution and automatic test case generation for javascript programs |
CN108733877A (zh) * | 2018-04-10 | 2018-11-02 | 北京航空航天大学 | 一种ate测试系统元模型的构建方法 |
CN108804322A (zh) * | 2018-06-05 | 2018-11-13 | 中国平安人寿保险股份有限公司 | 自动化测试方法、装置、计算机设备及存储介质 |
-
2019
- 2019-12-06 CN CN201911238500.8A patent/CN111078548B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB1479122A (en) * | 1975-12-11 | 1977-07-06 | Ibm | Method of operating a computer to produce test case programmes |
WO1990004829A2 (en) * | 1988-10-24 | 1990-05-03 | Eastman Kodak Company | Object-oriented, logic, and database programming tool |
US6028999A (en) * | 1996-11-04 | 2000-02-22 | International Business Machines Corporation | System and method for non-sequential program statement execution with incomplete runtime information |
US20130318503A1 (en) * | 2012-05-25 | 2013-11-28 | Fujitsu Limited | Symbolic execution and automatic test case generation for javascript programs |
CN108733877A (zh) * | 2018-04-10 | 2018-11-02 | 北京航空航天大学 | 一种ate测试系统元模型的构建方法 |
CN108804322A (zh) * | 2018-06-05 | 2018-11-13 | 中国平安人寿保险股份有限公司 | 自动化测试方法、装置、计算机设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
丁志军;周泽霞;: "Web服务组合测试综述" * |
何炎祥;陈勇;吴伟;徐超;吴黎兵;: "基于编译支持错误跟踪的测试用例自动化生成方法" * |
史晋,陈英,孙文灿: "O_OCTT设计中面向对象方法的研究" * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113505082A (zh) * | 2021-09-09 | 2021-10-15 | 腾讯科技(深圳)有限公司 | 应用程序测试方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111078548B (zh) | 2023-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Le Traon et al. | Efficient object-oriented integration and regression testing | |
US5784553A (en) | Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs | |
US7334219B2 (en) | Method and system for object level software testing | |
US5761408A (en) | Method and system for generating a computer program test suite using dynamic symbolic execution | |
US8701081B2 (en) | Hardware specific code generation | |
CN109086215B (zh) | 一种嵌入式软件单元测试用例生成方法及系统 | |
US6321376B1 (en) | Apparatus and method for semi-automated generation and application of language conformity tests | |
CN109189469B (zh) | 基于反射的安卓应用微服务化方法及系统 | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
US20130014092A1 (en) | Multi level virtual function tables | |
US7895575B2 (en) | Apparatus and method for generating test driver | |
CN109324799A (zh) | 一种代码编译方法、计算机装置及计算机可读存储介质 | |
CN107704382A (zh) | 面向Python的函数调用路径生成方法和系统 | |
CN111737697B (zh) | 一种基于原子化功能的安全扫描系统及扫描方法 | |
CN110543427A (zh) | 测试用例存储方法、装置、电子设备及存储介质 | |
CN106560797B (zh) | 一种基于调试器的单元测试系统及方法 | |
CN108897588B (zh) | 一种用于模块间通信的路由方法和路由装置 | |
CN112463596B (zh) | 测试用例数据的处理方法、装置、设备以及处理设备 | |
CN111078548A (zh) | 测试用例解析方法、装置、存储介质及验证平台 | |
CN111143228B (zh) | 基于决策表法的测试代码生成方法及装置 | |
CN116820996A (zh) | 基于人工智能的集成测试用例自动生成方法和装置 | |
CN116540994A (zh) | React项目配置化生成路由的方法、控制装置及存储介质 | |
CN115344268A (zh) | 一种多平台嵌入式开发环境编译方法及装置 | |
CN114281709A (zh) | 一种单元测试方法、系统、电子设备及存储介质 | |
CN108920149A (zh) | 编译方法和编译装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |