一种集成测试方法及装置
技术领域
本申请涉及计算机技术领域,尤其涉及一种集成测试方法及装置。
背景技术
互联网应用大多由多个系统协调处理完成,系统与系统之间通过远程过程调用(Remote Procedure Call,RPC)协议进行数据交换。一个应用系统通常会部署多个接口来提供相应的业务功能服务。
持续集成(Continuous Integration)是指在软件开发过程中,通过定时的(比如每天一次)、自动化的构建(比如自动化测试)来验证系统的接口功能的正确性,从而尽快地发现错误。由于互联网应用的系统改动、接口逻辑改动比较频繁,为了保证接口功能不会发生异常,都会定期使用持续集成系统来进行接口功能测试。
如图1所示,当有一个或者多个测试用例试跑失败后,持续集成工具(hudson)会自动发送用例失败提醒,以提醒相应的负责人员关注,从而及时发现业务功能的潜在问题,并进行修正。然而,由于hudson试跑的环境一般都是用于测试的开发环境,所连接的数据库一般也是用于测试的数据库,这就可能会因为网络环境的不稳定、数据库被开发人员临时加锁等各种原因导致测试用例执行异常,而这时接口功能本身并没有发生异常。由于只要测试用例不成功,hudson就会发送用例失败提醒,这就导致开发人员需要花费大量的时间查询用例失败原因,最后却发现是由于网络环境的不稳定等原因造成,而非接口功能本身出现问题。
显然,现有的只要测试用例失败就反馈用例失败的方式,会出现很多在接口功能正常时反馈用例失败的情况,从而增加了开发人员的工作负担。
发明内容
本申请实施例提供一种集成测试方法,用以解决现有的只要测试用例失败就反馈用例失败的方式,会出现很多在接口功能正常时反馈用例失败的情况,从而增加了开发人员的工作负担的问题。
本申请实施例提供一种集成测试方法,包括:
获取本次对测试用例的测试结果;
若所述测试结果为执行异常,则在之前的测试记录中查询最近N次针对该测试用例的测试结果;所述执行异常是指未得到测试用例的返回结果;N为正整数;
根据查询到的最近N次针对该测试用例的测试结果,确定本次对所述测试用例进行测试后指示给用户的反馈结果;所述反馈结果为执行成功或执行失败。
可选地,所述根据查询到的最近N次针对该测试用例的测试结果,确定本次对所述测试用例进行测试后指示给用户的反馈结果,包括:
若最近N次针对该测试用例的测试结果中存在至少M次执行成功的测试结果,则确定所述反馈结果为执行成功;M为正整数,且M小于或等于N;
否则,确定所述反馈结果为执行失败。
可选地,查询最近N次针对该测试用例的测试结果,包括:
根据该测试用例的以下参数信息中的一种或多种,查询最近N次针对该测试用例的测试结果:
测试用例所属的工程包的包名;
测试用例所属的工程包中的一类的类名;
测试用例的测试方法名;
测试用例的参数。
可选地,获取本次对测试用例的测试结果之后,还包括:
记录本次获取到的该测试结果,以便下一次在测试结果为执行异常时查询本次针对该测试用例的测试结果。
可选地,获取本次对测试用例的测试结果之后,还包括:
若本次对测试用例的测试结果为执行错误,则确定所述反馈结果为执行失败;所述执行错误是指测试用例的返回结果出现错误;
若本次对测试用例的测试结果为执行成功,则确定所述反馈结果为执行成功。
本申请实施例提供一种集成测试装置,包括:
获取模块,用于获取本次对测试用例的测试结果;
查询模块,用于若所述测试结果为执行异常,则在之前的测试记录中查询最近N次针对该测试用例的测试结果;所述执行异常是指未得到测试用例的返回结果;N为正整数;
确定模块,用于根据所述查询模块查询到的最近N次针对该测试用例的测试结果,确定本次对所述测试用例进行测试后指示给用户的反馈结果;所述反馈结果为执行成功或执行失败。
本申请实施例在测试结果为执行异常后,会结合最近针对该测试用例的测试结果,来确定本次对所述测试用例进行测试后指示给用户的反馈结果;比如若最近N次针对该测试用例的测试结果都为执行成功,则可以将本次指示给用户的反馈结果置为执行成功。因网络环境不稳定、数据库被开发人员临时加锁等原因导致执行异常的情况一般不会连续出现,因此,结合最近针对该测试用例的测试结果,来确定本次对所述测试用例进行测试后的反馈结果,可以减少在接口功能正常时反馈执行失败的情况,从而减少开发人员的工作负担。
附图说明
图1为集成测试示意图;
图2为本申请实施例一提供的集成测试方法流程图;
图3为本申请实施例二提供的集成测试方法流程图;
图4为本申请实施例三提供的集成测试方法流程图;
图5为本申请实施例四提供的集成测试装置结构示意图。
具体实施方式
本申请实施例中,在对测试用例进行测试之后,获取本次对测试用例的测试结果;若该测试结果为执行异常,则在之前的测试记录中查询最近N次针对该测试用例的测试结果;根据查询到的最近N次针对该测试用例的测试结果,确定本次对所述测试用例进行测试后指示给用户的反馈结果。可见,本申请实施例在测试结果为执行异常后,会结合最近针对该测试用例的测试结果,来确定本次对所述测试用例进行测试后指示给用户的反馈结果;比如若最近N次针对该测试用例的测试结果都为执行成功,则可以将本次的反馈结果置为执行成功。因网络环境不稳定、数据库被开发人员临时加锁等原因导致执行异常的情况一般不会连续出现,因此,结合最近针对该测试用例的测试结果,来确定本次对所述测试用例进行测试后的反馈结果,可以减少在接口功能正常时反馈执行失败的情况,从而减少开发人员的工作负担。
下面结合说明书附图对本申请实施例作进一步详细描述。
实施例一
如图2所示,为本申请实施例一提供的集成测试方法流程图,包括以下步骤:
S201:获取本次对测试用例的测试结果。
在具体实施中,在测试用例执行后,可以通过回调或者拦截器获取得到对测试用例的测试结果。
在具体实施过程中,若所述测试结果为执行错误,则将本次的反馈结果置为执行失败;其中,所述执行错误是指测试用例的返回结果出现错误。这里,若对测试用例进行测试后的返回结果出现错误,则说明接口功能本身出现了异常,因此需要向用户反馈执行失败的结果,以提醒用户用例失败。相反,若所述测试结果为执行成功,则可以直接向用户反馈执行成功的结果。
S202:若所述测试结果为执行异常,则在之前的测试记录中查询最近N次针对该测试用例的测试结果;所述执行异常是指未得到测试用例的返回结果;N为正整数。
S203:根据查询到的之前最近N次针对该测试用例的测试结果,确定本次对所述测试用例进行测试后指示给用户的反馈结果;所述反馈结果为执行成功或执行失败。
在具体实施过程中,若S201获取到的测试结果为执行异常(exception),而不是执行错误(false),说明本次的执行失败(包括执行异常和执行错误)有可能是因为网络环境不稳定(比如网络超时异常、网络调用不同异常等)等非接口功能本身异常的原因造成的,因此,本实施例可以提取最近N次针对该测试用例的测试结果,根据最近N次针对该测试用例的测试结果,确定本次指示给用户的反馈结果,比如,若最近N次针对该测试用例的执行结果都为执行失败(执行异常或执行错误),则可以认为本次执行异常是属于业务异常或空指针异常等接口功能本身异常的情况,需要提醒用户用例失败,因此将本次的反馈结果置为执行失败。若最近N次针对该测试用例的测试结果中有执行成功的测试结果,则可以认为本次执行异常是由于网络环境不稳定等非接口功能本身异常的原因造成的,因此将本次的反馈结果置为执行成功。
采用这种方式,虽然有可能出现本次执行异常确实是由于接口功能异常的原因造成,但由于之前的N次测试结果中有执行成功的测试结果,因此将本次的反馈结果置为了执行成功。但是,这并不会影响后续正确的执行结果的反馈,因为如果接口功能本身异常,会在后续几次测试中都会执行异常,按照本实施例的方式,在连续N+1次执行异常后,就会向用户反馈执行失败的结果。
下面通过几个具体的实施例对本申请进行用例失败提醒的方法作进一步说明。
实施例二
如图3所示,为本申请实施例二提供的集成测试方法流程图,包括:
S301:获取本次对测试用例的测试结果,并记录获取到的该测试结果;
这里,记录本次获取到的该测试结果,以便下一次在执行异常时查询本次针对该测试用例的测试结果。
在具体实施过程中,可以建立一张数据库的表test_result_record,用于记录每个测试用例的执行结果,表中可以包括几个与测试用例相关的核心字段,比如包括数据库标识(Identity,ID)、包名、类名、方法名、用例参数、执行结果、执行时间等。如下表一所示:
表一
在执行完一个测试用例后,通过回调或拦截器获取得到该测试用例的执行结果,并将该测试用例的相关信息及其执行结果、执行时间等插入到test_result_record中。比如,如下表二所示,测试用例A的功能出现问题,执行结果为false,测试用例B是正确用例,执行结果为true,持续集成系统会向用户反馈测试用例A的失败提醒,用户寻找测试用例A的失败原因,并进行修正。
表二
S302:若所述测试结果为执行异常,则在之前的测试记录中查询最近一次针对该测试用例的测试结果;所述执行异常是指未得到对测试用例进行测试后的返回结果。
在具体实施过程中,可以根据该测试用例的以下参数信息中的一种或多种,查询最近一次针对该测试用例的测试结果:
测试用例所属的工程包的包名;测试用例所属的工程包中的一类的类名;
测试用例的测试方法名;测试用例的参数。
上述信息可以用来标识测试用例。
如下表三所示,在经过一段时间的运行后,测试用例A和测试用例B都因网络环境问题出现了执行异常。
表三
S303:若最近一次针对该测试用例的测试结果为执行成功,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行成功;若最近一次针对该测试用例的测试结果为执行异常或执行错误,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行失败;其中,所述执行错误是指测试用例的返回结果出现错误。
在具体实施过程中,若本次对所述测试用例的测试结果为执行异常,最近一次的测试结果为执行成功,则认为本次执行异常是因网络环境不稳定等非接口功能本身的问题造成的,因此将本次的反馈结果置为执行成功。若最近一次的测试结果为执行异常或执行错误,则任务本次异常是因接口功能异常造成的,因此将本次的反馈结果置为执行失败。
S304:若所述测试结果为执行错误,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行失败;其中,所述执行错误是指测试用例的返回结果出现错误。
S305:若所述测试结果为执行成功,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行成功。
实施例三
如图4所示,为本申请实施例三提供的集成测试方法流程图,包括:
S401:获取本次对测试用例的测试结果,并记录获取到的该测试结果;
S402:若所述测试结果为执行异常,则在之前的测试记录中查询最近N次针对该测试用例的测试结果;所述执行异常是指未得到测试用例的返回结果。
在具体实施过程中,可以根据该测试用例的以下参数信息中的一种或多种,查询最近N次针对该测试用例的测试结果:
测试用例所属的工程包的包名;测试用例所属的工程包中的一类的类名;
测试用例的测试方法名;测试用例的参数。
S403:若最近N次针对该测试用例的测试结果中存在至少M次执行成功的测试结果,则确定所述反馈结果为执行成功;M为正整数,且M小于或等于N;否则,确定所述反馈结果为执行失败。
上述描述内容也即表达:若最近N次针对该测试用例的测试结果中存在大于或等于M次执行成功的测试结果,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行成功;否则,确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行失败,也即最近N次针对该测试用例的测试结果中,存在至少N-M+1次执行失败(执行异常或执行错误)的测试结果。比如M=1,则上述描述内容也即表达:若最近N次针对该测试用例的测试结果中存在至少一次执行成功的测试结果,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行成功;若最近N次针对该测试用例的测试结果中,每一次的测试结果都为执行异常或执行错误,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行失败。
在具体实施过程中,若连续N+1次的执行结果都是执行异常或执行错误,则认为最近几次的执行失败都是由于接口功能本身异常引起的,需要向用户反馈执行失败的结果。若在N+1次执行中,存在执行结果为执行成功,则认为执行失败可能是由于网络环境不稳定造成的,将反馈结果置为执行成功。
S404:若所述测试结果为执行错误,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行失败;其中,所述执行错误是指测试用例的返回结果出现错误。
S405:若所述测试结果为执行成功,则确定本次对所述测试用例进行测试后指示给用户的反馈结果为执行成功。
基于同一发明构思,本申请实施例中还提供了一种集成测试方法对应的集成测试装置,由于该装置解决问题的原理与本申请实施例集成测试方法相似,因此该装置的实施可以参见方法的实施,重复之处不再赘述。
实施例四
如图5所示,为本申请实施例四提供的集成测试装置结构示意图,包括:
获取模块51,用于获取本次对测试用例的测试结果;
查询模块52,用于若所述测试结果为执行异常,则在之前的测试记录中查询最近N次针对该测试用例的测试结果;所述执行异常是指未得到测试用例的返回结果;N为正整数;
确定模块53,用于根据所述查询模块52查询到的最近N次针对该测试用例的测试结果,确定本次对所述测试用例进行测试后指示给用户的反馈结果;所述反馈结果为执行成功或执行失败。
可选地,所述确定模块具体用于:
若最近N次针对该测试用例的测试结果中存在至少M次执行成功的测试结果,则确定所述反馈结果为执行成功;M为正整数,且M小于或等于N;否则,确定所述反馈结果为执行失败。
比如,N=1;所述确定模块53具体用于:
若最近一次针对该测试用例的测试结果为执行成功,则确定所述反馈结果为执行成功;若最近一次针对该测试用例的测试结果为执行异常或执行错误,则确定所述反馈结果为执行失败;其中,所述执行错误是指测试用例的返回结果出现错误。
再比如,N>1;所述确定模块53具体用于:
若最近N次针对该测试用例的测试结果包括执行成功,则确定所述反馈结果为执行成功;若最近N次针对该测试用例的测试结果中,任意一次的测试结果为执行异常或执行错误,则确定所述反馈结果为执行失败。
可选地,所述查询模块52具体用于:
根据该测试用例的以下参数信息中的一种或多种,查询最近N次针对该测试用例的测试结果:
测试用例所属的工程包的包名;
测试用例所属的工程包中的一类的类名;
测试用例的测试方法名;
测试用例的参数。
可选地,所述装置还包括:
记录模块54,用于在所述获取模块获取本次对测试用例的测试结果之后,还记录本次获取到的该测试结果,以便下一次在测试结果为执行异常时查询本次针对该测试用例的测试结果。
可选地,所述确定模块53还用于:
在所述获取模块51获取本次对测试用例的测试结果之后,若本次对测试用例的测试结果为执行错误,则确定所述反馈结果为执行失败;所述执行错误是指测试用例的返回结果出现错误;若本次对测试用例的测试结果为执行成功,则确定所述反馈结果为执行成功。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。