一种软件接口测试用例的自动生成方法与流程

文档序号:12464187阅读:544来源:国知局
一种软件接口测试用例的自动生成方法与流程

本发明涉及软件接口测试领域,特别是涉及一种软件接口测试用例的自动生成方法。



背景技术:

目前的软件接口测试工具主要偏重于对测试工作的管理,比如QC、ITB等工具只能维护人工录入的测试用例,不能自动生成测试用例,并且现有的自动或半自动生成接口测试用例的工具往往与特殊的业务相关,不能通用。

现有生成接口测试用例工具的具体缺点包括:(1)测试用例设计耗费资源。随着软件规模逐渐变大,一个软件的被测接口的数量一般会在几百个左右,自动化或半自动化的测试用例设计工具采用已有的算法诸如基于测试依据集进行的测试,需要提前准备条目化的需求、设计等测试依据集,耗费大量的人力和时间。(2)测试用例设计的有效性不能保证。测试管理工具需要人工设计测试用例,由于业务不熟或个人能力有限,测试用例的设计有效性往往较差;自动化或半自动化的工具设计用例根据已有的算法,诸如参数配对覆盖算法生成测试用例的基础是已有的测试数据,而测试数据的有效性不能保证,导致测试用例的有效性也难以保证。

由此可见,上述现有的软件接口测试用例生成工具显然仍存在有不便与缺陷,而亟待加以进一步改进。如何能创设一种新的软件接口测试用例自动生成方法,成为当前业界极需改进的目标。



技术实现要素:

本发明要解决的技术问题是提供一种软件接口测试用例自动生成方法,使其能大大缩短测试用例设计时间,且保证测试数据和测试用例的有效性,从而克服现有的软件接口测试用例生成工具的不足。

为解决上述技术问题,本发明提供一种软件接口测试用例的自动生成方法,所述方法包括如下步骤:

(一)通过参数配对覆盖算法生成测试数据关系图;

(二)利用步骤(一)得到的测试数据关系图,再通过蚁群算法自动生成测试用例。

作为本发明的一种改进,所述步骤(一)的具体步骤如下:

(1)定义对象,包括定义接口、接口集合、接口测试用例、接口参数、参数测试数据集和参数配对组合;

(2)接收一个被测接口,从历史数据中筛选出与所述被测接口的业务领域、语言类型、接口名称和参数列表属性中一项或多项相同的接口,形成接口集合,并获取所述接口集合中各个接口的测试用例集合以及所述各个接口所属参数集合的参数类型、参数测试数据、参数类型配对集合;

(3)判断步骤(2)形成的接口集合中历史数据是否为空,若为空,采用等价类法、边界值法对所述历史数据进行生成,若不为空,遍历所述接口集合中各个接口的参数类型配对集合,从中找到与所述被测接口的参数类型配对一致的参数配对集合,遍历所述参数配对集合中找到参数类型与当前遍历的参数配对相同的参数,并获取其参数测试数据,将其以并集的方式组合成参数测试数据集合;

(4)对于所述参数配对集合中每组参数配对的测试数据值组合,根据其测试用例的执行情况给出相应的定量评价,生成测试数据关系图,其中根据测试用例执行情况给出的定量评价为:

evaluate表示参数配对的测试数据值组合的评价值,value表示两个配对参数的测试数据值,DefectLevel表示测试数据值组合所在的测试用例的缺陷等级。

进一步改进,所述步骤(二)中蚁群算法自动生成测试用例的具体步骤如下:

首先,对所述参数测试数据集合进行排序,指定一个起点,每一个蚂蚁分别使用独立线程进行模拟,并采用转移概率计算方法、根据转移概率转移蚂蚁方法进行寻路;当所有蚂蚁完成寻路后,再采用信息素挥发/叠加方法更新路径上的信息素,重复此过程直到完成指定迭代次数,求出遍历次数最多的前N个解作为所述被测接口的测试用例。

进一步改进,,所述执行信息素挥发/叠加方法中采用信息素的叠加算法遵循公式如下:

τij(t+n)=(1-ρ)·τij(t)+Δτkij(t)

其中ρ表示可控信息素的挥发速度,取值在(0,1)之间,τij(t+n)表示距离节点t有n个节点之后的剩余信息素数值,τij(t)表示节点t的剩余信息素数值,表示一只蚂蚁释放的信息素数值;的计算方式采取Ant-Cycle模型,即每完成一次遍历后更新所有路径的信息素浓度为:

其中,Q表示第k只蚂蚁完成一次遍历后在路径上释放的信息素总量,Lk表示第k只蚂蚁完成一次遍历后所移动的总路程。

进一步改进,所述步骤(2)中形成的接口集合包括:

a、首先从历史接口集合中筛选出与所述被测接口的语言类型、业务领域相同的接口,形成第一接口集合;

b、再从所述第一接口集合中查询接口名称与所述被测接口名称相似或相同的接口,形成第二接口集合;若从所述第一接口集合中没有查询到与所述被测接口名称相似或相同的接口,则不进行筛选直接进入步骤c;

c、从所述第一接口集合或第二接口集合中获取各个接口的参数列表,依据所述参数列表的属性,从所述第一接口集合或第二接口集合中找到与所述被测接口参数列表相同的接口,形成第三接口集合;若没有找到参数列表顺序、参数类型、参数名称均一致的接口,则寻找其中一项或几项属性相同的接口,形成第四接口集合。

进一步改进,所述步骤(2)的时间复杂度与历史数据量大小成正比,其中该步骤的时间复杂度为O(M*N),M为历史数据中接口数量,N为历史数据中接口参数列表数量。

采用这样的设计后,本发明至少具有以下优点:

本发明以参数配对覆盖法生成测试数据关系图,以蚁群算法生成测试用例,两个算法的结合能够保证测试数据的有效性和测试用例的有效性,并能够大大的缩短测试用例设计时间,节约大量的资源。

附图说明

上述仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,以下结合附图与具体实施方式对本发明作进一步的详细说明。

图1是本发明中生成参数测试数据关系图的流程示意图。

图2是本发明中测试数据值集合中各节点之间的路径示意图。

具体实施方式

本发明软件接口测试用例的自动生成方法是在已有的接口测试用例历史数据中,根据参数类型的相关性以及测试用例的执行情况,从历史数据中选取质量较高的测试数据,再结合蚁群算法自动生成测试用例。

该方法包括利用参数配对覆盖算法生成测试数据关系图,和利用蚁群算法生成测试用例的两个步骤,大大提高了测试用例生成的有效性。具体步骤如下:

一、利用参数配对覆盖算法生成测试数据关系图的步骤如下,参照附图1所示:

1、定义对象:

接口定义:InterfaceName{ParamType ParamName,ParamType ParamName,String field,String language};

接口测试用例:InterfaceTestCase{Defect defect,int defectlevel}

接口参数:Param(ParamType paramType,ParamName paramName)

参数测试数据集:Set ParamValueSet

参数配对组合:Map ParamPair

参数配对组合测试数据集合:Map ParamPairValue

2、接收一个被测接口:

首先根据被测接口的语言类型、业务领域,筛选出所有符合要求,即与被测接口名称相似或相同接口的接口集合,形成第一接口集合;从该第一接口集合中查询接口名称与被测接口名称相似或者相同的接口,记为第二接口集合{InterfaceSet},如果没有查询到与被测接口名称相似或者相同的接口,则不进行名称筛选。

3、分析接口:

获取上述第一接口集合或第二接口集合{InterfaceSet}中各个接口的参数列表{ParamSet},依据参数列表的属性,从该第一接口集合或第二接口集合{InterfaceSet}找到与被测接口参数列表相同的接口,形成第三接口集合;如果没有参数列表顺序、参数类型、参数名称均一致的接口,则寻找其中一项或几项属性相同的接口,形成第四接口集合;如果历史接口均与被测接口的参数列表不同,则不进行参数列表的筛选。

筛选过程完成后,获取该第三接口集合或第四接口集合中各个接口的测试用例集合{TestCaseSet},以及各个接口所属参数集合{ParamSet}的参数类型{ParamTypeSet}、参数测试数据{ParamTestValue}、参数类型配对集合{ParamPairSet}。

该步骤的时间复杂度与历史数据量大小成正比,为O(M*N),M为接口数量,N为接口参数列表数量。

4、获取测试数据:

遍历上述接口集合{InterfaceSet}中各个接口的参数类型配对集合{ParamPairSet},从中找到与被测接口的参数类型配对一致的参数配对集合{ParamPairSet_Same}。遍历该参数配对集合{ParamPairSet_Same},从参数集合{ParamSet}中找到参数类型与当前遍历的参数配对ParamPairSet_Samek(中间临时变量)相同的参数,获取其参数测试数据,将其以并集的方式加入到集合{ParamTestValue_Typek}(中间临时变量)中,完成遍历后可得到参数测试数据集合{ParamValueSet},具体形式为{ParamTestValue_Type0,ParamTestValue_Type1….ParamTestValue_Typek},最后将{ParamValueSet}中的数据依次对应到参数配对集合{ParamPairSet_Same}中,形成参数配对测试数据集合{ParamPairValue},如表1集合形式:

表1参数配对与测试数据形成的集合

注:ParamTypei为接口的第i个参数,ParamTypek为接口的第k个参数,表格实例中表示ParamTypei和ParamTypek均有两个测试数据,即Valuei0,Valuei1,Valuek0,Valuek1。

另外,若上述接口集合中历史数据为空,则采用等价类法、边界值法对所述历史数据进行生成,进而完成该步骤。

该步骤的执行时间取决于历史数据的大小,时间复杂度为O(N),N为参数数量。

5、更新测试数据并完成测试数据关系图:

对于每一组参数配对的测试数据值组合,算法会根据其所在的测试用例的执行情况给出相应的定量评价:

该公式中evaluate表示参数配对的测试数据值组合的评价值,value表示两个配对参数的测试数据值,DefectLevel指测试数据值组合所在的测试用例找的缺陷的等级,该等级分为4级,分别为致命、严重、一般、建议,对应的值为2、4、8、16,即测试用例发现的缺陷总数M值越大,对应的DefectLevel越小,从而将以上的{ParamPairSet_Same}更新为:

表2更新后的参数配对与测试数据形成的集合({ParamPairSet_Same}集合形式)

注:Evaik0~Evaik3分别为ParamTypei和ParamTypek各测试数据配对组合对应的评估值。上述步骤形成的测试数据值集合{ParamPairSet_Same}实际上是一个图的数据结构,如附图2所示。所有的ParamType为图中的各个节点,<ParamTypei,ParamTypek>为从i到k的路径(i为被测接口的第i个参数,k为被测接口的第k个参数),evaluate的值为路径的长短,算法将接口测试用例的选择问题转化为寻求最短路径的问题。

现有的参数配对覆盖法一般应用在测试用例生成中,本发明是将其应用在测试数据配对中,且在原有算法的基础上增加了一个评估值,即用例发现的问题数,该评估值能够大大的提升配对准确率。

二、生成测试用例算法:

采用面向对象编程方式,该蚁群寻路算法具体如下:

调用蚁群寻路算法主体AntFindWay(List<Ant>listAnt,List<Param>listParam)进行寻路,执行过程中需要完成指定迭代次数,每一次迭代需要让所有蚂蚁完成一次求解过程,即遍历完成所有参数。

该方法调用时,对上述参数测试数据集合进行排序,指定一个起点,每一个蚂蚁分别使用一个独立线程进行模拟,寻路过程中调用转移概率计算方法CalPercent(IEnumerable<Param>listNotArrived,Ant ant)、根据转移概率转移蚂蚁方法SelectPathByPercent(IEnumerable<Param>listNotArrived,Ant ant,List<Path>listUsedPath),当所有蚂蚁完成求解后,执行信息素挥发/叠加CalInfo(List<Path>listUsedPath)方法更新路径上的信息素,重复此过程直到迭代次数完成。此时求出遍历次数最多的前N个解作为被测接口的测试用例。

其在执行信息素挥发/叠加CalInfo方法中采用信息素的叠加算法,遵循公式如下:

τij(t+n)=(1-ρ)·τij(t)+Δτkij(t) (2)

其中ρ表示可控信息素的挥发速度,取值在(0,1)之间,τij(t+n)表示距离节点t有n个节点之后的剩余信息素数值,τij(t)表示节点t的剩余信息素数值,表示一只蚂蚁释放的信息素数值,的计算方式采取Ant-Cycle模型,即每完成一次遍历后更新所有路径的信息素浓度为:

其中,Q表示第k只蚂蚁完成一次遍历后在路径上释放的信息素总量,Lk表示第k只蚂蚁完成一次遍历后所移动的总路程。Ant-Cycle模型的信息素结算是在完成遍历之后进行,蚂蚁经过的每一段路径上的信息素量相同,与总路径长度成反比。

本发明将原有蚁群算法的主要对象由未知的路径变为已知的数据集合,并增加了设置搜索起始点的功能,为搜索图增加了方向,避免算法因随机执行不同而导致结果不同,进而影响到测试用例的有效性,因此,本发明将蚁群算法应用在接口测试用例的自动生成上,保证测试用例的有效性。

本发明软件接口测试用例的自动生成方法只需要历史的测试数据、被测接口结构以及人工设置迭代的次数和需要的蚂蚁数目即可,不需要额外的条目化需求描述等信息,接口结构包括的参数列表、参数类型能够和测试数据进行匹配,迭代次数决定被选择的测试用例的个数,蚂蚁数决定被选择测试用例的精确度,迭代次数和蚂蚁数可以由设计人员根据运行环境、测试要求灵活设置,设置不同对测试结果的影响几乎可以忽略。

综上,本发明软件接口测试用例的自动生成方法将参数配对覆盖法应用于生成测试数据上,以及将蚁群算法应用于生成测试用例上,通过两个算法的结合能够达到如下技术效果:

1、测试数据复用时有效性高

根据上述技术方案,复用历史测试数据时采用参数配对覆盖法,该方法是借用已有的参数配对覆盖法生成测试用例的思想来对测试数据进行复用,改进了原来直接用参数配对覆盖法生成测试用例的有效性差的问题。

2、自动化生成测试用例准确度高,且不必耗费额外的资源

采用蚁群算法结合参数配对覆盖算法,既能够复用有效的历史数据,又能通过配对的历史测试数据自动生成测试用例,且由于蚁群算法自身具有分布式、自组织以及反馈结果准确性高的特点,其中,分布式特点能够确保接口的参数之间互不影响,确保不会因配对而漏掉重要的测试数据;自组织是从独立向精确的组合靠拢的过程,使得测试用例寻路径过程逐渐趋于最优;良好的反馈机制是通过信息素而实现的,信息素随着时间的推移叠加或减少相当于为路径赋值系数,系数最大的路径即最优解;因此最终确保生成的测试用例的准确性、有效性。

以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,本领域技术人员利用上述揭示的技术内容做出些许简单修改、等同变化或修饰,均落在本发明的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1