一种自动化测试的运行方法与流程

文档序号:12863708阅读:243来源:国知局

本发明涉及自动化测试技术领域,特别是涉及一种自动化测试的运行方法。



背景技术:

在ci/cd流行的今天,软件项目/产品的自动化测试是一种大的趋势。通过编写自动化测试用例并持续的运行,能够很好的替代之前项目中的测试所需的人力,并且良好的测试用例同时能规避人工测试引入的不确定因素(如人为失误)等,从而能稳定的保障相关的项目/产品的交付质量。现有的自动化用例管理框架比较多,如cucumber,testng等,但是都是比较通用的自动化测试用例管理框架,距离真正的在业务上的实践应用尚有一定的距离。比如,在实际的用例运行中,会存在类似如下的问题:

测试用例数量很多,且用例之间存在互相依赖关系,这会导致后运行的用例是否成功严重依赖于前面用例的运行结果,增加了调试的复杂度和测试运行结果的的耦合度;测试用例对运行的环境有不同的要求,不同的用例需要运行在不同的测试环境之上;测试用例运行的准备过程中,有很多重复的步骤,增加了相关代码的重复度;如果环境在某个时间内因为客观因素不能使用,会影响所有在该环境上运行的测试用例,导致其运行失败;测试环境有时需要根据需求灵活增加或减少,需要支持实时的配置和修改;当同时在多个指定测试环境运行测试用例时,由于测试用例执行所需的时间不同,可能存在:某些环境上用例运行完成,但是某些环境上存在用例正在排队等待被运行的情况,增加了测试运行的时间。



技术实现要素:

本发明的目的是提供一种自动化测试的运行方法,以实现有效利用测试环境,节省测试时间。

为解决上述技术问题,本发明提供一种自动化测试的运行方法,应用于testng框架,包括:

在testng框架中根据配置文件加载本次需要运行的测试用例类,从测试用例中选择一个测试用例进行执行;

利用测试用例从环境池中获取对应的测试环境,若测试环境获取成功,采用装饰者模式指定所需的高级测试环境;

执行基本测试环境和高级测试环境的准备工作;

执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试。

优选的,所述利用测试用例从环境池中获取对应的测试环境之后,还包括:

若测试环境获取失败,阻塞当前测试用例所在线程。

优选的,所述执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试之后,还包括:

按照高级测试环境的装饰顺序,倒序执行高级测试环境的还原初始状态逻辑;

执行基础测试环境的还原初始状态逻辑,完成测试环境的清理。

优选的,所述执行基础测试环境的还原初始状态逻辑,完成测试环境的清理之后,还包括:

若测试环境清理成功,调用环境池的正常释放环境接口,释放当前测试用例所持有的基本测试环境;

若测试环境清理失败,调用环境池的异常释放环境接口。

优选的,所述testng框架中包含环境池、测试用例对象、基本测试环境和高级测试环境。

优选的,所述testng框架还包括用例管理模块,用于测试用例的生命周期管理。

优选的,所述testng框架还包括环境池管理模块,用于基本测试环境的生命周期管理。

本发明所提供的一种自动化测试的运行方法,应用于testng框架,在testng框架中根据配置文件加载本次需要运行的测试用例类,从测试用例中选择一个测试用例进行执行;利用测试用例从环境池中获取对应的测试环境,若测试环境获取成功,采用装饰者模式指定所需的高级测试环境;执行基本测试环境和高级测试环境的准备工作;执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试。可见,本方法基于testng,完成了实际生产应用中,对自动化测试用例管理的需求,解决了单独使用testng所不能解决的用例解耦问题,环境管理与按需分配的需求,实现了自动化用例与环境的解耦,自动化用例之间的解耦,有效利用了有限的测试环境,节省了测试时间。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明所提供的一种自动化测试的运行方法的流程图。

具体实施方式

本发明的核心是提供一种自动化测试的运行方法,以实现有效利用测试环境,节省测试时间。

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

术语解释如下:

envpool(环境池):basetestenv的集合;

ci:continuousintegration:持续集成;

cd:continuousdelivery:持续交付;

testng:开源测试框架的一种,基于java语言编写,完成测试用例的管理和运行;

cucumber:开源测试框架,自然语言驱动模式;

basetestenv(基础测试环境):自动化测试运行时,所需的环境的一种;

seniortestenv(高级测试环境):自动化测试运行时,所需的环境的一种;

接口:对外提供的,可调用的功能/方法;

testcase(测试用例):指自动化测试中一个具体的测试用例;

testcaseprepare:testcase的一部分,包括了testcasemethods执行之前,准备前提条件所需执行的逻辑;

testcasemethod(s):testcase的一部分,自动化测试用例中具体的用例测试逻辑,一个testcase可以包含一个或多个testcasemethod;

testcasedestroy:testcase的一部分,是测试方法执行完成之后,还原测试环境为初始状态所需的逻辑;

group:testcase的分组,是根据业务需求,来对testcase进行分组,方便testcase分开运行,同时也可以根据group来获取所需的basetestenv。

请参考图1,图1为本发明所提供的一种自动化测试的运行方法的流程图,该方法应用于testng框架,该方法包括以下步骤:

s11:在testng框架中根据配置文件加载本次需要运行的测试用例类,从测试用例中选择一个测试用例进行执行;

s12:利用测试用例从环境池中获取对应的测试环境,若测试环境获取成功,采用装饰者模式指定所需的高级测试环境;

s13:执行基本测试环境和高级测试环境的准备工作;

s14:执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试。

可见,本方法基于testng,完成了实际生产应用中,对自动化测试用例管理的需求,解决了单独使用testng所不能解决的用例解耦问题,环境管理与按需分配的需求,实现了自动化用例与环境的解耦,自动化用例之间的解耦,有效利用了有限的测试环境,节省了测试时间。

基于上述方法,进一步的,步骤s12中,利用测试用例从环境池中获取对应的测试环境之后,还包括:若测试环境获取失败,阻塞当前测试用例所在线程。

进一步的,步骤s14之后,还包括:按照高级测试环境的装饰顺序,倒序执行高级测试环境的还原初始状态逻辑;执行基础测试环境的还原初始状态逻辑,完成测试环境的清理。

其中,执行基础测试环境的还原初始状态逻辑,完成测试环境的清理之后,还包括:若测试环境清理成功,调用环境池的正常释放环境接口,释放当前测试用例所持有的基本测试环境;若测试环境清理失败,调用环境池的异常释放环境接口。

详细的,testng框架中包含环境池、测试用例对象、基本测试环境和高级测试环境。

其中,testng框架还包括用例管理模块,用于测试用例的生命周期管理。

其中,testng框架还包括环境池管理模块,用于基本测试环境的生命周期管理。

其中,测试用例包含group,作为测试用例分组信息;测试用例包含prepare,testmethod,destroy三部分,分别完成测试用例环境准备,具体测试逻辑,测试用例环境销毁的功能。

本发明中,通过对testng框架的二次开发和封装,在testng框架实现了环境池、测试用例对象testcase、基本测试环境basetestenv和高级测试环境seniortestenv。

环境池是测试环境的集合,完成了测试环境的生命周期管理即从初始化到销毁;提供接口支持环境的获取和释放;环境池内部提供了环境清理以及队列等待机制,保证了环境的利用率和健壮性。

testcase是测试用例对象,规定自动化测试用例分为prepare,testmethods,destroy三个阶段;testcase之间是互相隔离且独立的,可以按照任意顺序执行而不会互相产生影响。

basetestenv是测试用例执行时,需要的基础环境。基础环境包含了测试环境中的基本信息,根据业务需求来定制添加。基础测试环境basetestenv包含了测试环境最基础的业务信息,提供prepare和destroy接口,分别包括了准备basetestenv和销毁basetestenv的逻辑。

seniortestenv是测试用例执行时,需要的高级环境。高级测试环境seniortestenv是对测试用例逻辑执行前,对基础环境进行的一系列操作的封装,提供prepare和destroy接口,分别包括了准备seniortestenv和销毁seniortestenv的逻辑。

有些testcasemethod是不能直接在basetestenv中执行的,需要对测试环境进行进一步的准比操作。而seniortestenv就是对这类操作的一个封装,这样可以避免相同/类似的逻辑代码在不同的testcase中被重复编写,从而带来维护的复杂度,并且seniortestenv也封装了一些环境准备的细节,有利于不同人员测试用例的编写。

可见,通过基础测试环境basetestenv和高级测试环境seniortestenv的结合解决了测试用例之间耦合的问题,保证每次测试用例执行前后所用的环境都是一致的。

本方法采用良好设计的测试用例与环境池的体系结构与工作流程,提高了自动化测试的效率。优化自动化测试系统流程,提升自动化测试效率,保证了产品质量并节约了硬件开销。

本方法中,用例管理模块主要功能为测试用例的生命周期管理。测试用例的生命周期是基于testng的用例加载和管理机制,结合实际应用中,用例需要独立运行关系解耦的需求,设计了测试用例testcase对象并实现。本方法具体步骤如下:

(1)testng根据配置文件,加载本次需要运行的测试用例类;

(2)testng选择步骤(1)得到的测试用例类中的一个测试用例进行执行;

(3)测试用例从环境池中,根据用例的group,采用匹配策略,获取对应的测试环境;其中,匹配策略可以根据业务来进行定制,如优先级配置,分组映射等;

(4)如果获取成功,则执行步骤(6);如果获取失败,则执行步骤(5);

(5)将当前测试用例所在线程阻塞,等待可用的环境被归还到环境池;

(6)获取环境成功后,根据testcaseprepare中的配置,采用装饰者模式,来指定所需的seniortestenv;

(7)执行basetestenv的prepare以及seniortestenv的prepare,按照其中逻辑,完成环境的准备工作;

(8)执行testcase中定义的testcasemethods,完成实际的测试逻辑;

(9)按照seniortestenv的装饰顺序,倒叙执行其对应的destroy方法,最后执行basetestenv的destroy方法,完成测试环境的清理。如果执行成功,执行步骤(11),否则执行步骤(10);

(10)执行清理失败,则调用环境池的接口(释放环境-异常)的接口;

(11)执行清理成功,则调用环境池接口(释放环境-正常),将当前testcase所持有的basetestenv释放。

按照上述步骤完成testng已经解析并加载的所有testcase执行。

测试用例生命周期的整个流程顺序为:加载用例、获取环境、环境准备、测试逻辑执行、环境清理和环境释放。

本方法中,环境池管理模块主要完成了basetestenv的生命周期管理。环境池生命周期的过程包括了环境初始化、获取环境池和环境池销毁。对于环境池,外部接口的功能包括:获取环境、释放环境-正常以及释放环境-异常。

其中,获取环境是根据testcase上注明的group类型,根据业务需求选择合适的环境匹配策略来获取环境。如果存在可用的basetestenv,则获取成功;否则,进入等待队列,执行当前testcase的线程阻塞,直至有对应的环境被归还,才尝试唤醒当前线程。

释放环境-正常是测试用例负责将basetestenv清理为获取时的状态,并归还到环境池。

释放环境-异常是测试用例负责将basetestenv清理为获取时的状态,但是在这个过程中清理失败,此时将该环境释放到envpool,同时包括其出现的异常的信息。envpool会对该basetestenv进行强制清理。

对于环境池,内部机制包括排队和环境清理。

基于排队,通常来讲,testcase的数量是远大于basetestenv的数量的,这里就存在了testcase在执行过程中可能获取不到合适的basetestenv。在envpool模块内部,使用java的lock类与condition类实现了testcase获取basetestenv时的操作的原子性,同时对testcase获取basetestenv失败的情况,进行了如下排队处理:

1、获取失败时,所在的线程会被阻塞,并设置了相应的超时时间;

2、如果在超时时间到来之前,有testcase归还了basetestenv,则尝试唤醒正在阻塞的testcase,使其尝试重新获取basetestenv;

3、如果超过超时时间仍未被唤醒,则抛出异常,本次获取basetestenv的调用失败。

环境清理是对于basetestenv,通过ssh的方式,远程连接对应的basetestenv,并执行相应的清理命令。通常用于testcase在清理环境时失败的情况。环境池模块完成了对basetestenv的统一管理即生命周期管理。

本方法通过合理设计测试用例模块结构与工作流程,以及环境池的模块结构与工作流程,能满足生产环境中自动化测试用例的要求,并能够节约用例运行时间,提高测试环境的单位利用效率。本方法通过设计环境池与测试用例的结构、功能与接口,基于testng,完成了实际生产应用中,对自动化测试用例管理的需求,解决了单独使用testng所不能解决的用例解耦问题,环境管理与按需分配(获取)的需求,实现了自动化用例与环境的解耦,自动化用例之间的解耦,有效利用了有限的测试环境,节省了测试时间。

以上对本发明所提供的一种自动化测试的运行方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

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