掌桥专利:专业的专利平台
掌桥专利
首页

测试用例的生成方法及电子设备

文献发布时间:2024-04-18 20:01:30


测试用例的生成方法及电子设备

技术领域

本申请属于计算机技术领域,具体涉及一种测试用例的生成方法及电子设备。

背景技术

在计算机技术领域中,软件测试是一种确保软件质量和可靠性的重要方法,而接口测试是软件测试中的一项重要内容。接口测试一般是向软件接口输入一个合适的参数,然后运行软件接口的程序,检测软件接口程序的运行过程是否与预期一致,从而判断软件接口是否能够正常使用。在一个软件工程中,可能包含数量较多的软件接口,每个软件接口可能包含多个可选择的接口输入参数,在测试时,需要开发人员针对每个软件接口的输入参数进行选择和组合,生成测试用例。当接口数量增加或者接口输入参数的数量增加,这种接口测试方式的测试效率将大大降低,有待改善。

发明内容

本申请的目的在于提供一种测试用例的生成方法及电子设备,以提高测试用例的生成效率。

本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。

根据本申请实施例的一个方面,提供一种测试用例的生成方法,包括:

对被测试程序所包含的程序运行路径进行分析,以确定所述程序运行路径中的条件分支节点;所述条件分支节点为所述被测试程序中根据不同节点输入参数而导向不同程序运行路径的节点;

对所述条件分支节点进行分类处理,并根据所述条件分支节点的类型确定所述条件分支节点的候选参数集;所述候选参数集为所述条件分支节点中变量输入参数对应的候选取值的集合;

基于所述候选参数集和针对所述被测试程序的目标测试路径,通过遗传算法从所述候选参数集中提取使所述被测试程序根据所述目标测试路径运行的目标输入参数;

根据所述目标输入参数生成用于对所述目标测试路径进行测试的测试用例。

根据本申请实施例的一个方面,提供一种测试用例的生成装置,包括:

节点识别模块,用于对被测试程序所包含的程序运行路径进行分析,以确定所述程序运行路径中的条件分支节点;所述条件分支节点为所述被测试程序中根据不同节点输入参数而导向不同程序运行路径的节点;

节点分类模块,用于对所述条件分支节点进行分类处理,并根据所述条件分支节点的类型确定所述条件分支节点的候选参数集;所述候选参数集为所述条件分支节点中变量输入参数对应的候选取值的集合;

遗传算法模块,用于基于所述候选参数集和针对所述被测试程序的目标测试路径,通过遗传算法从所述候选参数集中提取使所述被测试程序根据所述目标测试路径运行的目标输入参数;

用例生成模块,用于根据所述目标输入参数生成用于对所述目标测试路径进行测试的测试用例。

在本申请的一个实施例中,节点分类模块包括:

格式化单元,用于对所述条件分支节点所包含的判断条件表达式进行格式化处理,得到格式化表达式;

分类单元,用于根据所述格式化表达式所包含的变量输入参数数量、输入参数类型和判断符号对所述格式化表达式进行分类处理,得到所述格式化表达式对应的条件分支节点的类型。

在本申请的一个实施例中,所述格式化单元具体用于:

将所述条件分支节点所包含的判断条件表达式中的变量移动到所述判断条件表达式中的判断符号的第一侧,将所述判断条件表达式中的非变量移动所述判断符号的第二侧,得到格式化表达式。

在本申请的一个实施例中,所述分类单元用于:

当所述格式化表达式所包含一个变量输入参数,所述变量输入参数属于所述被测试程序的接口入参,以及所述判断符号为第一类符号时,确定所述格式化表达式对应的条件分支节点为第一类节点;所述被测试程序的接口入参是指所述被测试程序所涉及接口的输入参数;

当所述格式化表达式所包含一个变量输入参数,所述变量输入参数属于所述被测试程序的接口入参,以及所述判断符号为第二类符号时,确定所述格式化表达式对应的条件分支节点为第二类节点;

当所述格式化表达式所包含多个变量输入参数,所述变量输入参数属于所述被测试程序的接口入参,以及所述判断符号为所述第一类符号时,确定所述格式化表达式对应的条件分支节点为第三类节点;

当所述格式化表达式所包含多个变量输入参数,所述变量输入参数属于所述被测试程序的接口入参,以及所述判断符号为所述第二类符号时,确定所述格式化表达式对应的条件分支节点为第四类节点;

当所述格式化表达式不属于所述第一类节点、所述第二类节点、所述第三类节点和所述第四类节点中的任一项时,确定所述格式化表达式对应的条件分支节点为第五类节点。

在本申请的一个实施例中,节点分类模块具体用于:

当所述条件分支节点为第一类节点,且所述第一类符号为等于符号时,将所述条件分支节点中判断符号一侧的非变量作为所述条件分支节点中变量输入参数的候选取值;

当所述条件分支节点为第一类节点,且所述第一类符号为不等于符号时,将所述条件分支节点中变量输入参数的接口入参取值中除所述判断符号一侧的非变量以外的值作为所述条件分支节点中变量输入参数的候选取值。

在本申请的一个实施例中,节点分类模块具体用于:

当所述条件分支节点为第二类节点或第四类节点时,根据所述条件分支节点中变量输入参数的接口入参取值和所述格式化表达式计算所述条件分支节点中变量输入参数的候选取值。

在本申请的一个实施例中,节点分类模块具体用于:

当所述条件分支节点为第三类节点时,将所述条件分支节点中的部分变量输入参数用其他变量输入参数表示,并根据所述其他变量输入参数的接口入参取值确定所述条件分支节点中变量输入参数的候选取值。

在本申请的一个实施例中,遗传算法模块具体用于:

对所述候选参数集中的候选取值进行编码处理,得到多个入参编码值;

从所述多个入参编码值中选择指定数量的个体作为初始种群,其中,所述个体包括对所述被测试程序进行一次测试所需的变量输入参数的候选取值;

对所述初始种群中个体的入参编码值进行解码处理,得到对应的变量输入参数的候选取值,并根据所述变量输入参数的候选取值驱动所述被测试程序运行,以获得测试结果;

根据所述测试结果计算适应度,并根据所述适应度进行遗传迭代,直至满足迭代停止条件,得到用于对所述目标测试路径进行测试目标输入参数,其中,所述迭代停止条件为迭代次数达到设定次数或者适应度达到设定值。

在本申请的一个实施例中,遗传算法模块具体用于:

对当前种群中的个体进行复制、交叉和变异操作中的一种或多种,得到目标种群;

对所述目标种群中的个体进行解码处理,得到对应的变量输入参数的候选取值,并根据所述变量输入参数的候选取值驱动所述被测试程序运行,以获得测试结果;

根据所述测试结果计算适应度,并在未满足迭代停止条件时,将所述目标种群作为所述当前种群,返回对当前种群中的入参编码值进行复制、交叉和变异操作中的一种或多种,得到目标种群的步骤。

根据本申请实施例的一个方面,提供一种计算机可读介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如以上技术方案中的测试用例的生成方法。

根据本申请实施例的一个方面,提供一种电子设备,该电子设备包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器执行所述可执行指令使得所述电子设备执行如以上技术方案中的测试用例的生成方法。

根据本申请实施例的一个方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行如以上技术方案中的测试用例的生成方法。

在本申请实施例提供的技术方案中,通过对被测试程序所包含的程序运行路径进行分析,以确定程序运行路径中的条件分支节点;条件分支节点为被测试程序中根据不同节点输入参数而导向不同程序运行路径的节点;然后对条件分支节点进行分类处理,并根据条件分支节点的类型确定条件分支节点的候选参数集;候选参数集为条件分支节点中变量输入参数对应的候选取值的集合;最后基于候选参数集和针对被测试程序的目标测试路径,通过遗传算法从候选参数集中提取使被测试程序根据目标测试路径运行的目标输入参数;并根据目标输入参数生成用于对目标测试路径进行测试的测试用例,实现了测试用例的自动化生成,且通过对条件分支节点的处理形成候选参数集,极大地缩减了测试用例所依赖的数据选择空间,从而提高了测试用例的生成效率,进而提高接口测试的效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1示意性地示出了应用本申请技术方案的示例性系统架构框图。

图2示意性地示出了本申请一个实施例提供的测试用例的生成方法的流程图。

图3示意性地示出了本申请一个实施例提供的测试用例的生成方法的示意图。

图4示意性地示出了本申请一个实施例提供的条件分支节点的分类过程的流程图。

图5示意性地示出了本申请一个实施例提供的测试用例的生成方法的流程图。

图6示意性地示出了本申请一个实施例提供的被测试程序的业务处理流程的示意图。

图7示意性地示出了本申请一个实施例提供的被测试程序中条件分支节点的示意图。

图8示意性地示出了本申请实施例提供的测试用例的生成装置的结构框图。

图9示意性示出了适于用来实现本申请实施例的电子设备的计算机系统结构框图。

具体实施方式

现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。

此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。

附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。

附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。

可以理解的是,在本申请的具体实施方式中,涉及到客户信息(例如交易信息、对账数据)等相关的数据,当本申请以上实施例运用到具体产品或技术中时,需要获得客户许可或者同意,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。

图1示意性地示出了应用本申请技术方案的示例性系统架构框图。

如图1所示,系统架构100可以包括终端设备110、网络120和服务器130。终端设备110可以包括智能手机、平板电脑、笔记本电脑、智能语音交互设备、智能家电、车载终端等等。服务器130可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。网络120可以是能够在终端设备110和服务器130之间提供通信链路的各种连接类型的通信介质,例如可以是有线通信链路或者无线通信链路。

根据实现需要,本申请实施例中的系统架构可以具有任意数目的终端设备、网络和服务器。例如,服务器130可以是由多个服务器设备组成的服务器群组。另外,本申请实施例提供的技术方案可以应用于终端设备110,也可以应用于服务器130,或者可以由终端设备110和服务器130共同实施,本申请对此不做特殊限定。

举例而言,本申请技术方案可以由终端设备110实施。终端设备110对被测试程序所包含的程序运行路径进行分析,以确定程序运行路径中的条件分支节点;条件分支节点为被测试程序中根据不同节点输入参数而导向不同程序运行路径的节点;被测试程序可以是运行或即将运行在终端设备110上的程序。接下来,终端设备110对条件分支节点进行分类处理,并根据条件分支节点的类型确定条件分支节点的候选参数集;候选参数集为条件分支节点中变量输入参数对应的候选取值的集合。然后,终端设备110基于候选参数集和针对被测试程序的目标测试路径,通过遗传算法从候选参数集中提取使被测试程序根据目标测试路径运行的目标输入参数。最后,终端设备110根据目标输入参数生成用于对目标测试路径进行测试的测试用例。

下面结合具体实施方式对本申请提供的测试用例的生成方法做出详细说明。

图2示意性地示出了本申请一个实施例提供的测试用例的生成方法的流程图,该方法可以由终端设备或服务器实施。如图2所示,本实施例提供的测试用例的生成方法包括步骤210至步骤240,具体如下:

步骤210、对被测试程序所包含的程序运行路径进行分析,以确定程序运行路径中的条件分支节点;条件分支节点为被测试程序中根据不同节点输入参数而导向不同程序运行路径的节点。

具体地,被测试程序是指需要进行接口测试的程序,一个程序可能包含多个接口,接口用于接收外部输入数据,并根据外部输入数据进行程序的运行,此处所说的外部输入数据是指相对于接口本身而言的外部所输入的数据,例如,接口的外部输入数据可以通过用户界面所接收到的用户输入的数据,也可以是调用接口的模块提供给该接口的数据。

程序运行路径可以看作是被测试程序运行一次所形成的数据处理逻辑路径,例如,被测试程序包括代码块1、代码块2和代码块3,如果代码块1的输出数据传输到代码块2进行处理,代码块2的输出数据传输到代码块3处理后输出最终结果,则代码块1、代码块2和代码块3可以构成一条程序运行路径。

在被测试程序中,各个代码块的执行并不都是顺序执行,可能存在一些代码块需要根据不同的条件选择性执行,那么这里的条件即视为程序运行路径中的条件分支节点,也就是说,基于条件分支节点具体取值的不同,被测试程序运行一次所经过的路径不同,即条件分支节点可以根据不同的节点输入参数而导向不同程序运行路径。示例性的,被测试程序包括代码块1、代码块2和代码块3,执行代码块2和代码块3是根据代码块1的输出数据任选一个执行,假设代码块1的输出数据为2时,执行代码块2,代码块1的输出数据为3时,执行代码块3。那么在执行代码块2或者代码块3之前,还需判断代码块1的输出数据是2还是3,执行这个判断操作的节点即为条件分支节点,代码块1的输出数据即为条件分支节点的节点输入参数。显然,节点输入参数也可以是其他类型的输入参数,例如,节点输入参数是用户输入数据,当用户输入2时,将代码块1的输出数据传输到代码块2执行,当用户输入3时,将代码块2的输出数据传输到代码块3执行。可以看出,当条件分支节点的输入参数是2时,程序运行路径为代码块1和代码块2,当条件分支节点的输入参数是3时,程序运行路径为代码块1和代码块3,可见,条件分支节点可以根据不同节点输入参数导向不同程序运行路径。

步骤220、对条件分支节点进行分类处理,并根据条件分支节点的类型确定条件分支节点的候选参数集;候选参数集为条件分支节点中变量输入参数对应的候选取值的集合。

具体地,条件分支节点的节点输入参数包括变量输入参数(可以简称为变量)和非变量输入参数(可以简称为非变量),变量是指可以改变的、不确定的参数,一般用字母或者字符串表示;非变量是指不可改变、已经确定的参数,一般是固定的数值。例如,假设条件分支节点的条件是判断a是否等于1,其中,a是用户输入的或其他代码或程序的运行结果提供的,可以看出,a是不确定的,故而a称为变量,1称为非变量。

变量的取值通常有多种,以前述示例中的变量a为例,假设a代表的是10以内的整数,则a有10种取值,假设a代表的是1000以内的整数,则a有1000种取值。可见,变量的原始取值范围是较大的。本实施例通过对条件分支节点进行分类处理,可以从变量输入参数的原始取值范围选择部分取值作为候选取值,构成候选参数集,这样就可以缩小变量输入参数的取值范围,后续在生成测试用例时,就可以从较小的取值范围中对变量取值来生成测试用例,从而提高了测试用例的生成效率。

在本申请的一个实施例中,对条件分支节点进行分类处理,是根据条件分支节点所对应的具体条件实施的。例如,当条件分支节点执行的是判断一个变量参数与另一个非变量数据是否相等或者不相等时,可以将该条件分支节点归为第一类节点,此时可以根据非变量数据的具体值来设定变量参数的候选取值,例如,假设判断a是否等于1,并在等于1的条件下执行某操作,那么可以将1设置为a的候选取值,这样a的候选取值就变为1个数据,不存在多个取值的情况。当条件分支节点执行的是判断一个变量参数与另一个非变量数据间的大小时,可以将该条件分支节点归为第二类节点,此时可以根据非变量数据的具体值和具体的判断操作来设定变量参数的候选取值,例如,假设判断a是否大于2,并在a大于2时执行某个操作,如果a的原始取值范围是[0,10],则a的候选取值范围可以设置为(2,10),可见,缩减了变量a的取值范围。

步骤230、基于候选参数集和针对被测试程序的目标测试路径,通过遗传算法从候选参数集中提取使被测试程序根据目标测试路径运行的目标输入参数。

具体地,目标测试路径是测试时所需要测试的路径,示例性的,被测试程序包括代码块1、代码块2和代码块3,假设要测试代码块1和代码块3这条路径是否能够正常运行,则代码块1和代码块3为目标测试路径。针对目标测试路径,从候选参数集中提取一组参数,该组参数输入至被测试程序后,使得被测试程序的运行路径为目标测试路径,那么该组参数记为目标输入参数。可以理解,目标测试路径可以有多个。

在本实施例中,通过遗传算法对候选参数集进行计算,得到目标输入参数。遗传算法是通过模拟达尔文生物进化论的自然选择和遗传机制原理,用来寻找最优解的自组织、自适应搜索算法。在使用遗传算法的过程中,首先将候选参数集中的变量输入参数的候选取值进行编码,以将候选取值转化为生物进化论中的染色体基因,一个候选取值对应的编码值作为一个个体。然后从编码数据中选择一定数目的个体组成初始种群。接下来,计算每个个体的适应度并判断是否符合优化标准,若符合或达到迭代次数则输出最优解并结束计算,否则依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体可能被淘汰,并对适应度高的个体进行交叉和变异等操作,产生新的个体,然后重复前面的操作步骤,直至适应度符合优化标准或达到迭代次数,输出最优解。该最优解即为所需的目标输入参数。

步骤240、根据目标输入参数生成用于对目标测试路径进行测试的测试用例。

具体地,得到目标输入参数后,该目标输入参数可以作为对被测试程序中的目标测试路径进行测试的一个测试用例。

在本申请实施例提供的技术方案中,通过对被测试程序所包含的程序运行路径进行分析,以确定程序运行路径中的条件分支节点;条件分支节点为被测试程序中根据不同节点输入参数而导向不同程序运行路径的节点;然后对条件分支节点进行分类处理,并根据条件分支节点的类型确定条件分支节点的候选参数集;候选参数集为条件分支节点中变量输入参数对应的候选取值的集合;最后基于候选参数集和针对被测试程序的目标测试路径,通过遗传算法从候选参数集中提取使被测试程序根据目标测试路径运行的目标输入参数;并根据目标输入参数生成用于对目标测试路径进行测试的测试用例,实现了测试用例的自动化生成,且通过对条件分支节点的处理形成候选参数集,极大地缩减了测试用例所依赖的数据选择空间,从而提高了测试用例的生成效率,进而提高接口测试的效率。

以金融领域为例,假设金融领域中一个接口包括m个变量输入参数,每个变量输出参数的可取值数量为M,则传统的测试用例生成过程中,测试用例的数据选择空间为M

图3示意性地示出了本申请一个实施例提供的测试用例的生成方法的流程图,本实施例是对上述实施例的进一步细化。如图3所示,本实施例提供的测试用例的生成方法包括步骤301至步骤309,具体如下:

步骤301、对被测试程序所包含的程序运行路径进行分析,以确定程序运行路径中的条件分支节点。

具体地,步骤301与前述实施例中的步骤210相同,在此不再赘述。

步骤302、对条件分支节点所包含的判断条件表达式进行格式化处理,得到格式化表达式。

具体地,格式化处理是指将条件分支节点包含的判断条件表达式中的参数类型进行分类,使得变量在格式化表达式的一侧,非变在格式化表达式的另一侧。

在本申请的一个实施例中,格式化处理的具体过程包括:将条件分支节点所包含的判断条件表达式中的变量移动到判断条件表达式中的判断符号的第一侧,将判断条件表达式中的非变量移动判断符号的第二侧,得到格式化表达式。例如,第一侧为左侧,第二侧为右侧,那么在格式化处理之后,格式化表达式的左侧为变量,右侧为非变量。示例性的,判断条件表达式为a=b-1,经格式化处理后,得到格式化表达式:b-a=1。

步骤303、根据格式化表达式所包含的变量输入参数数量、输入参数类型和判断符号对格式化表达式进行分类处理,得到格式化表达式对应的条件分支节点的类型。

具体地,格式化表达式所包含的变量输入参数数量即为格式化表达式中包含的变量的数量。输入参数类型包括接口入参和非接口入参,接口入参是指被测试程序所涉及接口的输入参数,非接口入参则是指除接口入参之外的输入参数,例如以其他代码块的输出结果作为输入参数,则输入非接口入参。判断符号包括第一类符号和第二类符号,第一类符号包括等于符号(=)和不等于符号(!=),第二类符号包括大于符号(>)、小于符号(<)、大于等于符号(≥)以及小于等于符号(≤)。

本实施例中,具体的分类过程如下5种情况:

情况1.当格式化表达式所包含一个变量输入参数,变量输入参数属于被测试程序的接口入参,以及判断符号为第一类符号时,确定格式化表达式对应的条件分支节点为第一类节点;被测试程序的接口入参是指被测试程序所涉及接口的输入参数。即表明,当格式化表达式中有且只有一个变量且与接口入参变量相同,判断符号为=和!=时,该格式化表达式属于第一类表达式,对应的条件分支节点属于第一类节点。例如,假设接口入参变量包括a、b和c,格式化表示为a=1或a!=2,则二者都属于第一类表达式,对应条件分支节点为第一类节点。

情况2.当格式化表达式所包含一个变量输入参数,变量输入参数属于被测试程序的接口入参,以及判断符号为第二类符号时,确定格式化表达式对应的条件分支节点为第二类节点。即表明,当格式化表达式中有且只有一个变量且与接口入参变量相同,判断符号为>、<、≥或≤,该格式化表达式属于第二类表达式,对应的条件分支节点属于第二类节点。例如,假设接口入参变量包括a、b和c,则a>9属于第二类表达式。

情况3.当格式化表达式所包含多个变量输入参数,变量输入参数属于被测试程序的接口入参,以及判断符号为第一类符号时,确定格式化表达式对应的条件分支节点为第三类节点。即表明,当格式化表达式中含有多个变量,且变量均为接口入参变量,判断符号为=和!=时,该格式化表达式属于第三类表达式,对应的条件分支节点属于第三类节点。例如,假设接口入参变量包括a、b和c,则a*c-b=0属于第三类表达式。

情况4.当格式化表达式所包含多个变量输入参数,变量输入参数属于被测试程序的接口入参,以及判断符号为第二类符号时,确定格式化表达式对应的条件分支节点为第四类节点。即表明,当格式化表达式中含有多个变量,且变量均为接口入参变量,判断符号为>、<、≥或≤,该格式化表达式属于第四类表达式,对应的条件分支节点属于第四类节点。例如,假设接口入参变量包括a、b和c,则a*c-b<8属于第四类表达式。

情况5.当格式化表达式不属于第一类节点、第二类节点、第三类节点和第四类节点中的任一项时,确定格式化表达式对应的条件分支节点为第五类节点。即表明,当格式化表达式不属于前述任一种情况时,格式化表达式的变量中含有非接口入参变量,该格式化表达式属于第五类表达式,对应的条件分支节点属于第五类节点。例如,假设接口入参变量包括a、b和c,,则a-b+d<1属于第五类表达式。

示例性的,分类过程可以参考图4所示的流程图进行处理。如图4所示,首先在S410中,对条件分支节点的判断条件表达式进行格式化处理,得到格式化表达式,后续步骤简称表达式。在S420中,判断表达式是否仅含有一个入参变量,且判断符号为等于或者不等于,如果是,则输出分类结果为类型一(表示第一类节点或第一类表达式,后文类似表述不再赘述),如果否,则进入S430。在S430中,判断表达式是否仅含有一个入参变量,且判断符号为大于、小于、大于等于或小于等于符号,如果是,则输出分类结果为类型二,如果否,则进入S440。在S440中,判断表达式是否含有多个入参变量,且判断符号为等于或者不等于,如果是,则输出分类结果为类型三,如果否,则进入S450。在S450中,判断表达式是否含有多个入参变量,且判断符号为大于、小于、大于等于或小于等于符号,如果是,则输出分类结果为类型四,如果否,则输出分类结果为类型五。

步骤304、根据条件分支节点的类型确定条件分支节点的候选参数集。

具体地,确定候选参数集的操作实际上是缩减条件分支节点中变量的参数取值范围,具体可以根据条件分支节点的类型确定缩减后的参数取值范围。

在本申请的一个实施例中,对于第一类节点,可根据格式化表达式固定入参值,使其候选值只有1个且一定会覆盖该分支,从而实现了降维也不影响其他入参的搜索。具体而言,当条件分支节点为第一类节点,且第一类符号为等于符号时,将条件分支节点中判断符号一侧的非变量作为条件分支节点中变量输入参数的候选取值;当条件分支节点为第一类节点,且第一类符号为不等于符号时,将条件分支节点中变量输入参数的接口入参取值中除判断符号一侧的非变量以外的值作为条件分支节点中变量输入参数的候选取值。假设格式化表达式中,变量在判断符号左侧,非变量在判断符号右侧,那么:如果条件分支节点为第一类节点(即格式化表达式为第一类表达式)且判断符号是“=”,则参数候选值取“=”右侧的值;如果条件分支节点为第一类节点且判断符号是“!=”,则参数候选值剔除符号右侧的值,将剩余的值作为候选值。比如接口入参包括a和b,a的原始取值范围为{1,2},b的原始取值范围为{1,2},其中格式化表达式为第一类表达式:a=1,则a的候选取值则变为{1},则后续遗传算法求解的搜索空间域由原来2*2=4个(a的取值2个和b的取值两个)变成了1*2=2个(a的取值1个和b的取值两个)。

在本申请的一个实施例中,对于第二类节点或第四类节点,可以根据格式化表达式,缩减变量入参的取值范围,同时也保证了缩减后的取值的有效性。具体而言,当条件分支节点为第二类节点或第四类节点时,根据条件分支节点中变量输入参数的接口入参取值和格式化表达式计算条件分支节点中变量输入参数的候选取值。比如接口入参包括a和b,a的原始取值范围为[0,100],b的原始取值范围为[0,100],其中格式化表达式为第二类表达式,如a>70,则a的候选取值为(70,100],显然,缩短了变量入参的取值范围,同时也保证了缩短后的取值的有效性。

在本申请的一个实施例中,对于第三类节点,表示接口入参变量存在线性关系,初始种群不再是随机选择,而是基于入参之间的线性关系去选取初始种群,而变异操作时也保持这个关系去变异。相当于不管算法怎么搜索,一定会覆盖到该分支,去除了冗余项,加快搜索速度。具体而言,当条件分支节点为第三类节点时,将条件分支节点中的部分变量输入参数用其他变量输入参数表示,并根据其他变量输入参数的接口入参取值确定条件分支节点中变量输入参数的候选取值。即选取其中一个入参,用其他入参表示。例如,格式化表达式为a+2b=0,则a的候选取值可以表示为2b。

步骤305、对候选参数集中的候选取值进行编码处理,得到多个入参编码值。

具体地,编码处理是指以二进制数据来表示一个候选取值,例如,可以用4位无符号二进制来表示一个变量输入参数。

步骤306、从多个入参编码值中选择指定数量的个体作为初始种群,其中,个体包括对被测试程序进行一次测试所需的变量输入参数的候选取值。

具体地,初始种群是指初次进行遗传算法的运算时所需要的个体组成的种群。个体由一组候选取值对应的入参编码值来表示,一组候选取值是指对被测试程序进行一次测试所需的各个变量输入参数的候选取值。示例性的,假设接口入参有X1、X2和X3,他们取值范围均为[0,10],则由一组候选取值组成的个体可以是{x1=2,x2=4,x3=7},进行二进制编码后通过入参编码值构成的个体可以是001001000111。

在选择加入初始种群的个体时,不是随机选择,而且基于个体中变量输入参数之间的线性关系去选择。比如变量输入参数X1=2X2,则随机产生m组候选取值,m组候选取值的参数X1的取值永远是X2的两倍。

步骤307、对初始种群中个体的入参编码值进行解码处理,得到对应的变量输入参数的候选取值,并根据变量输入参数的候选取值驱动被测试程序运行,以获得测试结果。

具体地,编码是为了应用遗传算法得到初始种群,而程序的运行应通过原来的变量输入参数的候选取值来驱动,故而需要对初始种群中的个体的入参编码值进行解码处理,以将入参编码值还原为变量输入参数的候选取值,然后将该候选取值输入至被测试程序中,驱动被测试程序运行,得到测试结果。示例性的,将入参编码值001001000111解码后得到一组候选取值{x1=2,x2=4,x3=7},根据这一组候选取值{x1=2,x2=4,x3=7}向被测试程序发起接口调用请求,记录被测试程序的运行路径,得到测试结果。

步骤308、根据测试结果计算适应度,并根据适应度进行遗传迭代,直至满足迭代停止条件,得到用于对目标测试路径进行测试目标输入参数,其中,迭代停止条件为迭代次数达到设定次数或者适应度达到设定值。

具体地,在得到测试结果后,根据测试结果计算适应度,适应度反映了被测试程序在根据当前所选的一组候选取值运行时,其运行路径对目标测试路径的覆盖程度。

在本申请的一个实施例中,通过对被测试程序进行插桩,插桩也就是在被测试程序中加入探针,通过探针来检测记录被测试程序的运行路径,也就可以记录条件分支节点的覆盖情况。每次接口调用请求可自动生成对应的路径覆盖向量V

当适应度函数值为0时表示该组解能覆盖目标测试路径中所有条件分支节点,即为最优解,也就是目标输入参数。

在本申请的一个实施例中,遗传迭代过程具体包括:对当前种群中的个体进行复制、交叉和变异操作中的一种或多种,得到目标种群;对目标种群中的个体进行解码处理,得到对应的变量输入参数的候选取值,并根据变量输入参数的候选取值驱动被测试程序运行,以获得测试结果;根据测试结果计算适应度,并在未满足迭代停止条件时,将目标种群作为当前种群,返回对当前种群中的入参编码值进行复制、交叉和变异操作中的一种或多种,得到目标种群的步骤。

具体而言,在未达到迭代停止条件时,对当前种群中的个体进行复制、交叉和变异操作中的一种或多种,以产生新的个体,进而根据新的个体生成新的种群,记为目标种群。然后根据目标种群进行适应度的计算,也就是对目标种群中的个体进行解码处理,得到对应的变量输入参数的候选取值,并根据变量输入参数的候选取值向被测试程序发起接口调用请求,使得被测试程序运行以获得测试结果,进而根据测试结果计算适应度。其中,迭代停止条件包括适应度达到设定值或者迭代次数达到设定次数,本实施例中,由于适应度越小表示条件分支节点的覆盖情况越优异,因此,越小的适应度所对应的遗传算法解越优秀,越适合作为目标输入参数,可选的,可以将是适应度设定值设为0或者接近0的数值。

步骤309、根据目标输入参数生成用于对目标测试路径进行测试的测试用例。

本申请技术方案通过对条件分支节点所包含的判断条件表达式进行格式化处理,进而根据格式化表达式所包含的变量输入参数数量、输入参数类型和判断符号对格式化表达式进行分类处理,并基于不同类型的格式化表达式对变量输入参数的取值范围进行缩减而得到候选参数集,缩减了遗传算法的数据搜索空间,使得遗传算法能够更快的运行,提高了测试用例的生成效率。

图5示意性地示出了本申请一个实施例提供的测试用例的生成方法的流程图。如图5所示,该方法包括以下步骤:

S501、接口定义配置。即对接口进行定义,包括接口入参类型、入参描述、入参候选值等配置。例如,如果入参是String类型,可配置入参的枚举值;如果入参是数值类型,可配置入参的取值范围;如果入参是date,可配置日期的格式。

S502、被测程序静态分析和插桩。即将被测试程序进行自动插桩,也就是在条件分支节点处插入探针,当发起接口请求,探针能够记录条件分支节点的覆盖情况,得到被测试程序中的程序运行路径。

S503、识别分支节点并按规则分类。即对被测试程序所包含的程序运行路径进行分析,以确定所述程序运行路径中的条件分支节点,并对条件分支节点进行分类处理,具体分类过程可以参考前述实施例中的步骤220或者步骤303中的相关描述,在此不在赘述。

S504、根据不同类型进行缩小候选集的策略。即根据条件分支节点的类型确定条件分支节点的候选参数集,具体过程可以参考前述实施例中的步骤220或者步骤304中的相关描述,在此不在赘述。

S505、根据候选集进行编码。即对候选参数集中的候选取值进行编码处理,具体可以参考前述实施例中步骤305中的相关描述,在此不在赘述。

S506、初始种群。具体可以参考前述实施例中步骤306中的相关描述,在此不在赘述。

S507、解码。具体可以参考前述实施例中步骤307中的相关描述,在此不在赘述。

S508、驱动程序。具体可以参考前述实施例中步骤307中的相关描述,在此不在赘述。

S509、插桩的被测程序。具体可以参考前述实施例中步骤307中的相关描述,在此不在赘述。

S510、适应度计算。具体可以参考前述实施例中步骤308中的相关描述,在此不在赘述。

S511、判断是否满足终止条件。即判断是否满足迭代停止条件。

S512、遗传算子操作。即不满足迭代停止条件时,进行复制、交叉和变异操作中的一种或多种,以重复进行遗传计算,具体可以参考前述实施例中步骤308中的相关描述,在此不在赘述。

S513、结束,获取优质种群。即满足迭代停止条件时,遗传算法输出的最优种群即为所需要的目标输入参数,可以基于目标输入参数生成测试用例。

下面以一个具体实施例来说明本申请技术方案的实施过程。

被测试程序的业务处理流程如图6所示,图6中的一个代码块表示被测试程序中的一个段处理逻辑,不同的代码块可以表示不同的处理逻辑。

假设一个接口入参如下表1所示:

表1

对被测试程序进行静态分析后,识别出条件分支节点,得到图7所示的流程图。其中,图7中的一个判断条件即表示一个条件分支节点,例如status=“C”为一个条件分支节点,表示判断status是否为C。YE<200000是一个条件分支节点,表示判断YE是否小于200000。

现需要利用遗传算法自动搜索出一个测试用例(即一组入参)能覆盖代码块F0、F1、F2、F3和F4。根据传统遗传算法,其数据搜索空间输入参数的全部可行解的乘积,即X1的可行解乘以X2的可行解…乘以X8的可行解,维度为8,为了直观表示,假设数值型参数只能取整数,则候选解数量为3*1000000*2*2*1*9*1000000*1000000,显然,这是一个非常大的数据搜索空间,而每增加一个接口入参,其数据搜索空间都是指数上升。本实施例技术方案通过缩减条件分支节点的分类处理来缩减遗传算法的数据搜索空间,提高算法运行效率,从而提高测试用例的生成效率,具体操作如下:

提取每个分支判断条件,将判断条件进行格式化,参数移动到数量关系符号的左边,如下表2所示:

表2

每个判断条件表达式进行分类,根据前述实施例中步骤303或图4所示流程法进行分类处理。例如:接口入参不含有参数status,则分类成类型5。YE属于接口入参,数量关系符号为<,则分类成类型2。分类结果如下表3所示:

表3

分类后,根据不同类型采取不同措施,缩减取值空间,形成候选参数集。

如果表达式类型为1,且表达式的符号是等于,则该参数的取值就为表达式右边的值。如果表达式符号是不等于,则该参数的取值范围排除表达式右边的值。如果表达式类型为2或者4,则参数取值范围根据表达式缩小范围。如果表达式类型为3,初始种群的选取和种群变异,始终保持变量的线性关系去变化。各个表达式候选参数集的候选取值如下表4所示:

表4

因为KYYE与DJJE存在线性关系,这两个变量可以看成1个变量,即共有200000种可能性。

由表4可以看出,经过处理后,再使用遗传算法搜索时其候选集个数为1*200000*1*1*1*9*200000,对比原搜索的个数(3*1000000*2*2*1*9*1000000*1000000),维度降低,数据搜索空间极大压缩,从而使得遗传算法在金融等复杂的业务场景下能被高效使用。

最后基于表4中各个变量输入参数的候选取值使用遗传算法求解,也就是从数据搜索空间1*200000*1*1*1*9*200000中求解,得到目标输入参数,生成测试用例,提高了测试用例的生成效率。

应当注意,尽管在附图中以特定顺序描述了本申请中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。

以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的测试用例的生成方法。图8示意性地示出了本申请实施例提供的测试用例的生成装置的结构框图。如图8所示,本申请实施例提供的测试用例的生成装置包括:

节点识别模块810,用于对被测试程序所包含的程序运行路径进行分析,以确定所述程序运行路径中的条件分支节点;所述条件分支节点为所述被测试程序中根据不同节点输入参数而导向不同程序运行路径的节点;

节点分类模块820,用于对所述条件分支节点进行分类处理,并根据所述条件分支节点的类型确定所述条件分支节点的候选参数集;所述候选参数集为所述条件分支节点中变量输入参数对应的候选取值的集合;

遗传算法模块830,用于基于所述候选参数集和针对所述被测试程序的目标测试路径,通过遗传算法从所述候选参数集中提取使所述被测试程序根据所述目标测试路径运行的目标输入参数;

用例生成模块840,用于根据所述目标输入参数生成用于对所述目标测试路径进行测试的测试用例。

在本申请的一个实施例中,节点分类模块820包括:

格式化单元,用于对所述条件分支节点所包含的判断条件表达式进行格式化处理,得到格式化表达式;

分类单元,用于根据所述格式化表达式所包含的变量输入参数数量、输入参数类型和判断符号对所述格式化表达式进行分类处理,得到所述格式化表达式对应的条件分支节点的类型。

在本申请的一个实施例中,所述格式化单元具体用于:

将所述条件分支节点所包含的判断条件表达式中的变量移动到所述判断条件表达式中的判断符号的第一侧,将所述判断条件表达式中的非变量移动所述判断符号的第二侧,得到格式化表达式。

在本申请的一个实施例中,所述分类单元用于:

当所述格式化表达式所包含一个变量输入参数,所述变量输入参数属于所述被测试程序的接口入参,以及所述判断符号为第一类符号时,确定所述格式化表达式对应的条件分支节点为第一类节点;所述被测试程序的接口入参是指所述被测试程序所涉及接口的输入参数;

当所述格式化表达式所包含一个变量输入参数,所述变量输入参数属于所述被测试程序的接口入参,以及所述判断符号为第二类符号时,确定所述格式化表达式对应的条件分支节点为第二类节点;

当所述格式化表达式所包含多个变量输入参数,所述变量输入参数属于所述被测试程序的接口入参,以及所述判断符号为所述第一类符号时,确定所述格式化表达式对应的条件分支节点为第三类节点;

当所述格式化表达式所包含多个变量输入参数,所述变量输入参数属于所述被测试程序的接口入参,以及所述判断符号为所述第二类符号时,确定所述格式化表达式对应的条件分支节点为第四类节点;

当所述格式化表达式不属于所述第一类节点、所述第二类节点、所述第三类节点和所述第四类节点中的任一项时,确定所述格式化表达式对应的条件分支节点为第五类节点。

在本申请的一个实施例中,节点分类模块820具体用于:

当所述条件分支节点为第一类节点,且所述第一类符号为等于符号时,将所述条件分支节点中判断符号一侧的非变量作为所述条件分支节点中变量输入参数的候选取值;

当所述条件分支节点为第一类节点,且所述第一类符号为不等于符号时,将所述条件分支节点中变量输入参数的接口入参取值中除所述判断符号一侧的非变量以外的值作为所述条件分支节点中变量输入参数的候选取值。

在本申请的一个实施例中,节点分类模块820具体用于:

当所述条件分支节点为第二类节点或第四类节点时,根据所述条件分支节点中变量输入参数的接口入参取值和所述格式化表达式计算所述条件分支节点中变量输入参数的候选取值。

在本申请的一个实施例中,节点分类模块820具体用于:

当所述条件分支节点为第三类节点时,将所述条件分支节点中的部分变量输入参数用其他变量输入参数表示,并根据所述其他变量输入参数的接口入参取值确定所述条件分支节点中变量输入参数的候选取值。

在本申请的一个实施例中,遗传算法模块830具体用于:

对所述候选参数集中的候选取值进行编码处理,得到多个入参编码值;

从所述多个入参编码值中选择指定数量的个体作为初始种群,其中,所述个体包括对所述被测试程序进行一次测试所需的变量输入参数的候选取值;

对所述初始种群中个体的入参编码值进行解码处理,得到对应的变量输入参数的候选取值,并根据所述变量输入参数的候选取值驱动所述被测试程序运行,以获得测试结果;

根据所述测试结果计算适应度,并根据所述适应度进行遗传迭代,直至满足迭代停止条件,得到用于对所述目标测试路径进行测试目标输入参数,其中,所述迭代停止条件为迭代次数达到设定次数或者适应度达到设定值。

在本申请的一个实施例中,遗传算法模块830具体用于:

对当前种群中的个体进行复制、交叉和变异操作中的一种或多种,得到目标种群;

对所述目标种群中的个体进行解码处理,得到对应的变量输入参数的候选取值,并根据所述变量输入参数的候选取值驱动所述被测试程序运行,以获得测试结果;

根据所述测试结果计算适应度,并在未满足迭代停止条件时,将所述目标种群作为所述当前种群,返回对当前种群中的入参编码值进行复制、交叉和变异操作中的一种或多种,得到目标种群的步骤。

本申请各实施例中提供的测试用例的生成装置的具体细节已经在对应的方法实施例中进行了详细的描述,此处不再赘述。

图9示意性地示出了用于实现本申请实施例的电子设备的计算机系统结构框图。

需要说明的是,图9示出的电子设备的计算机系统900仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图9所示,计算机系统900包括中央处理器901(Central Processing Unit,CPU),其可以根据存储在只读存储器902(Read-Only Memory,ROM)中的程序或者从存储部分908加载到随机访问存储器903(Random Access Memory,RAM)中的程序而执行各种适当的动作和处理。在随机访问存储器903中,还存储有系统操作所需的各种程序和数据。中央处理器901、在只读存储器902以及随机访问存储器903通过总线904彼此相连。输入/输出接口905(Input/Output接口,即I/O接口)也连接至总线904。

以下部件连接至输入/输出接口905:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如局域网卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至输入/输出接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。

特别地,根据本申请的实施例,各个方法流程图中所描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被中央处理器901执行时,执行本申请的系统中限定的各种功能。

需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。

附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。

通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。

应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。

相关技术
  • 用于车辆的防碰撞装置、防碰撞方法以及存储程序的非暂时性存储介质
  • 程序死锁检测方法、存储介质、设备及系统
  • 一种物品推荐方法、装置、存储介质及程序产品
  • 图像处理方法和装置、电子设备、存储介质、程序产品
  • 图像处理方法和装置、电子设备、存储介质、程序产品
  • 输送线防死锁方法、装置、系统、存储介质及程序产品
  • 输送线防死锁方法、装置、系统、存储介质及程序产品
技术分类

06120116556944