CN107315686A - 一种自动化测试的运行方法 - Google Patents
一种自动化测试的运行方法 Download PDFInfo
- Publication number
- CN107315686A CN107315686A CN201710507840.0A CN201710507840A CN107315686A CN 107315686 A CN107315686 A CN 107315686A CN 201710507840 A CN201710507840 A CN 201710507840A CN 107315686 A CN107315686 A CN 107315686A
- Authority
- CN
- China
- Prior art keywords
- test
- environment
- case
- test environment
- pond
- 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.)
- Pending
Links
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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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
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
本发明公开了一种自动化测试的运行方法,该方法包括:在TestNG框架中根据配置文件加载本次需要运行的测试用例类,从测试用例中选择一个测试用例进行执行;利用测试用例从环境池中获取对应的测试环境,若测试环境获取成功,采用装饰者模式指定所需的高级测试环境;执行基本测试环境和高级测试环境的准备工作;执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试。该方法实现有效利用测试环境,节省测试时间。
Description
技术领域
本发明涉及自动化测试技术领域,特别是涉及一种自动化测试的运行方法。
背景技术
在CI/CD流行的今天,软件项目/产品的自动化测试是一种大的趋势。通过编写自动化测试用例并持续的运行,能够很好的替代之前项目中的测试所需的人力,并且良好的测试用例同时能规避人工测试引入的不确定因素(如人为失误)等,从而能稳定的保障相关的项目/产品的交付质量。现有的自动化用例管理框架比较多,如cucumber,testNG等,但是都是比较通用的自动化测试用例管理框架,距离真正的在业务上的实践应用尚有一定的距离。比如,在实际的用例运行中,会存在类似如下的问题:
测试用例数量很多,且用例之间存在互相依赖关系,这会导致后运行的用例是否成功严重依赖于前面用例的运行结果,增加了调试的复杂度和测试运行结果的的耦合度;测试用例对运行的环境有不同的要求,不同的用例需要运行在不同的测试环境之上;测试用例运行的准备过程中,有很多重复的步骤,增加了相关代码的重复度;如果环境在某个时间内因为客观因素不能使用,会影响所有在该环境上运行的测试用例,导致其运行失败;测试环境有时需要根据需求灵活增加或减少,需要支持实时的配置和修改;当同时在多个指定测试环境运行测试用例时,由于测试用例执行所需的时间不同,可能存在:某些环境上用例运行完成,但是某些环境上存在用例正在排队等待被运行的情况,增加了测试运行的时间。
发明内容
本发明的目的是提供一种自动化测试的运行方法,以实现有效利用测试环境,节省测试时间。
为解决上述技术问题,本发明提供一种自动化测试的运行方法,应用于TestNG框架,包括:
在TestNG框架中根据配置文件加载本次需要运行的测试用例类,从测试用例中选择一个测试用例进行执行;
利用测试用例从环境池中获取对应的测试环境,若测试环境获取成功,采用装饰者模式指定所需的高级测试环境;
执行基本测试环境和高级测试环境的准备工作;
执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试。
优选的,所述利用测试用例从环境池中获取对应的测试环境之后,还包括:
若测试环境获取失败,阻塞当前测试用例所在线程。
优选的,所述执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试之后,还包括:
按照高级测试环境的装饰顺序,倒序执行高级测试环境的还原初始状态逻辑;
执行基础测试环境的还原初始状态逻辑,完成测试环境的清理。
优选的,所述执行基础测试环境的还原初始状态逻辑,完成测试环境的清理之后,还包括:
若测试环境清理成功,调用环境池的正常释放环境接口,释放当前测试用例所持有的基本测试环境;
若测试环境清理失败,调用环境池的异常释放环境接口。
优选的,所述TestNG框架中包含环境池、测试用例对象、基本测试环境和高级测试环境。
优选的,所述TestNG框架还包括用例管理模块,用于测试用例的生命周期管理。
优选的,所述TestNG框架还包括环境池管理模块,用于基本测试环境的生命周期管理。
本发明所提供的一种自动化测试的运行方法,应用于TestNG框架,在TestNG框架中根据配置文件加载本次需要运行的测试用例类,从测试用例中选择一个测试用例进行执行;利用测试用例从环境池中获取对应的测试环境,若测试环境获取成功,采用装饰者模式指定所需的高级测试环境;执行基本测试环境和高级测试环境的准备工作;执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试。可见,本方法基于TestNG,完成了实际生产应用中,对自动化测试用例管理的需求,解决了单独使用TestNG所不能解决的用例解耦问题,环境管理与按需分配的需求,实现了自动化用例与环境的解耦,自动化用例之间的解耦,有效利用了有限的测试环境,节省了测试时间。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明所提供的一种自动化测试的运行方法的流程图。
具体实施方式
本发明的核心是提供一种自动化测试的运行方法,以实现有效利用测试环境,节省测试时间。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
术语解释如下:
env pool(环境池):base test env的集合;
CI:Continuous integration:持续集成;
CD:Continuous delivery:持续交付;
TestNG:开源测试框架的一种,基于java语言编写,完成测试用例的管理和运行;
Cucumber:开源测试框架,自然语言驱动模式;
base test env(基础测试环境):自动化测试运行时,所需的环境的一种;
senior test env(高级测试环境):自动化测试运行时,所需的环境的一种;
接口:对外提供的,可调用的功能/方法;
test case(测试用例):指自动化测试中一个具体的测试用例;
test case prepare:test case的一部分,包括了test case methods执行之前,准备前提条件所需执行的逻辑;
test case method(s):test case的一部分,自动化测试用例中具体的用例测试逻辑,一个test case可以包含一个或多个test case method;
test case destroy:test case的一部分,是测试方法执行完成之后,还原测试环境为初始状态所需的逻辑;
Group:test case的分组,是根据业务需求,来对test case进行分组,方便testcase分开运行,同时也可以根据Group来获取所需的base test env。
请参考图1,图1为本发明所提供的一种自动化测试的运行方法的流程图,该方法应用于TestNG框架,该方法包括以下步骤:
S11:在TestNG框架中根据配置文件加载本次需要运行的测试用例类,从测试用例中选择一个测试用例进行执行;
S12:利用测试用例从环境池中获取对应的测试环境,若测试环境获取成功,采用装饰者模式指定所需的高级测试环境;
S13:执行基本测试环境和高级测试环境的准备工作;
S14:执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试。
可见,本方法基于TestNG,完成了实际生产应用中,对自动化测试用例管理的需求,解决了单独使用TestNG所不能解决的用例解耦问题,环境管理与按需分配的需求,实现了自动化用例与环境的解耦,自动化用例之间的解耦,有效利用了有限的测试环境,节省了测试时间。
基于上述方法,进一步的,步骤S12中,利用测试用例从环境池中获取对应的测试环境之后,还包括:若测试环境获取失败,阻塞当前测试用例所在线程。
进一步的,步骤S14之后,还包括:按照高级测试环境的装饰顺序,倒序执行高级测试环境的还原初始状态逻辑;执行基础测试环境的还原初始状态逻辑,完成测试环境的清理。
其中,执行基础测试环境的还原初始状态逻辑,完成测试环境的清理之后,还包括:若测试环境清理成功,调用环境池的正常释放环境接口,释放当前测试用例所持有的基本测试环境;若测试环境清理失败,调用环境池的异常释放环境接口。
详细的,TestNG框架中包含环境池、测试用例对象、基本测试环境和高级测试环境。
其中,TestNG框架还包括用例管理模块,用于测试用例的生命周期管理。
其中,TestNG框架还包括环境池管理模块,用于基本测试环境的生命周期管理。
其中,测试用例包含Group,作为测试用例分组信息;测试用例包含prepare,testmethod,destroy三部分,分别完成测试用例环境准备,具体测试逻辑,测试用例环境销毁的功能。
本发明中,通过对TestNG框架的二次开发和封装,在TestNG框架实现了环境池、测试用例对象test case、基本测试环境base test env和高级测试环境senior test env。
环境池是测试环境的集合,完成了测试环境的生命周期管理即从初始化到销毁;提供接口支持环境的获取和释放;环境池内部提供了环境清理以及队列等待机制,保证了环境的利用率和健壮性。
test case是测试用例对象,规定自动化测试用例分为prepare,test methods,destroy三个阶段;test case之间是互相隔离且独立的,可以按照任意顺序执行而不会互相产生影响。
base test env是测试用例执行时,需要的基础环境。基础环境包含了测试环境中的基本信息,根据业务需求来定制添加。基础测试环境base test env包含了测试环境最基础的业务信息,提供prepare和destroy接口,分别包括了准备base test env和销毁basetest env的逻辑。
senior test env是测试用例执行时,需要的高级环境。高级测试环境seniortest env是对测试用例逻辑执行前,对基础环境进行的一系列操作的封装,提供prepare和destroy接口,分别包括了准备senior test env和销毁senior test env的逻辑。
有些test case method是不能直接在base test env中执行的,需要对测试环境进行进一步的准比操作。而senior test env就是对这类操作的一个封装,这样可以避免相同/类似的逻辑代码在不同的test case中被重复编写,从而带来维护的复杂度,并且senior test env也封装了一些环境准备的细节,有利于不同人员测试用例的编写。
可见,通过基础测试环境base test env和高级测试环境senior test env的结合解决了测试用例之间耦合的问题,保证每次测试用例执行前后所用的环境都是一致的。
本方法采用良好设计的测试用例与环境池的体系结构与工作流程,提高了自动化测试的效率。优化自动化测试***流程,提升自动化测试效率,保证了产品质量并节约了硬件开销。
本方法中,用例管理模块主要功能为测试用例的生命周期管理。测试用例的生命周期是基于TestNG的用例加载和管理机制,结合实际应用中,用例需要独立运行关系解耦的需求,设计了测试用例test case对象并实现。本方法具体步骤如下:
(1)TestNG根据配置文件,加载本次需要运行的测试用例类;
(2)TestNG选择步骤(1)得到的测试用例类中的一个测试用例进行执行;
(3)测试用例从环境池中,根据用例的Group,采用匹配策略,获取对应的测试环境;其中,匹配策略可以根据业务来进行定制,如优先级配置,分组映射等;
(4)如果获取成功,则执行步骤(6);如果获取失败,则执行步骤(5);
(5)将当前测试用例所在线程阻塞,等待可用的环境被归还到环境池;
(6)获取环境成功后,根据test case prepare中的配置,采用装饰者模式,来指定所需的senior test env;
(7)执行base test env的prepare以及senior test env的prepare,按照其中逻辑,完成环境的准备工作;
(8)执行test case中定义的test case methods,完成实际的测试逻辑;
(9)按照senior test env的装饰顺序,倒叙执行其对应的destroy方法,最后执行base test env的destroy方法,完成测试环境的清理。如果执行成功,执行步骤(11),否则执行步骤(10);
(10)执行清理失败,则调用环境池的接口(释放环境-异常)的接口;
(11)执行清理成功,则调用环境池接口(释放环境-正常),将当前test case所持有的base test env释放。
按照上述步骤完成TestNG已经解析并加载的所有test case执行。
测试用例生命周期的整个流程顺序为:加载用例、获取环境、环境准备、测试逻辑执行、环境清理和环境释放。
本方法中,环境池管理模块主要完成了base test env的生命周期管理。环境池生命周期的过程包括了环境初始化、获取环境池和环境池销毁。对于环境池,外部接口的功能包括:获取环境、释放环境-正常以及释放环境-异常。
其中,获取环境是根据test case上注明的group类型,根据业务需求选择合适的环境匹配策略来获取环境。如果存在可用的base test env,则获取成功;否则,进入等待队列,执行当前test case的线程阻塞,直至有对应的环境被归还,才尝试唤醒当前线程。
释放环境-正常是测试用例负责将base test env清理为获取时的状态,并归还到环境池。
释放环境-异常是测试用例负责将base test env清理为获取时的状态,但是在这个过程中清理失败,此时将该环境释放到env pool,同时包括其出现的异常的信息。envpool会对该base test env进行强制清理。
对于环境池,内部机制包括排队和环境清理。
基于排队,通常来讲,test case的数量是远大于base test env的数量的,这里就存在了test case在执行过程中可能获取不到合适的base test env。在env pool模块内部,使用java的Lock类与Condition类实现了test case获取base test env时的操作的原子性,同时对test case获取base test env失败的情况,进行了如下排队处理:
1、获取失败时,所在的线程会被阻塞,并设置了相应的超时时间;
2、如果在超时时间到来之前,有test case归还了base test env,则尝试唤醒正在阻塞的test case,使其尝试重新获取base test env;
3、如果超过超时时间仍未被唤醒,则抛出异常,本次获取base test env的调用失败。
环境清理是对于base test env,通过SSH的方式,远程连接对应的base testenv,并执行相应的清理命令。通常用于test case在清理环境时失败的情况。环境池模块完成了对base test env的统一管理即生命周期管理。
本方法通过合理设计测试用例模块结构与工作流程,以及环境池的模块结构与工作流程,能满足生产环境中自动化测试用例的要求,并能够节约用例运行时间,提高测试环境的单位利用效率。本方法通过设计环境池与测试用例的结构、功能与接口,基于TestNG,完成了实际生产应用中,对自动化测试用例管理的需求,解决了单独使用TestNG所不能解决的用例解耦问题,环境管理与按需分配(获取)的需求,实现了自动化用例与环境的解耦,自动化用例之间的解耦,有效利用了有限的测试环境,节省了测试时间。
以上对本发明所提供的一种自动化测试的运行方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。
Claims (7)
1.一种自动化测试的运行方法,其特征在于,应用于TestNG框架,包括:
在TestNG框架中根据配置文件加载本次需要运行的测试用例类,从测试用例中选择一个测试用例进行执行;
利用测试用例从环境池中获取对应的测试环境,若测试环境获取成功,采用装饰者模式指定所需的高级测试环境;
执行基本测试环境和高级测试环境的准备工作;
执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试。
2.如权利要求1所述的方法,其特征在于,所述利用测试用例从环境池中获取对应的测试环境之后,还包括:
若测试环境获取失败,阻塞当前测试用例所在线程。
3.如权利要求2所述的方法,其特征在于,所述执行测试用例中定义的用例测试逻辑,完成实际的逻辑测试之后,还包括:
按照高级测试环境的装饰顺序,倒序执行高级测试环境的还原初始状态逻辑;
执行基础测试环境的还原初始状态逻辑,完成测试环境的清理。
4.如权利要求3所述的方法,其特征在于,所述执行基础测试环境的还原初始状态逻辑,完成测试环境的清理之后,还包括:
若测试环境清理成功,调用环境池的正常释放环境接口,释放当前测试用例所持有的基本测试环境;
若测试环境清理失败,调用环境池的异常释放环境接口。
5.如权利要求1至4中任意一项所述的方法,所述TestNG框架中包含环境池、测试用例对象、基本测试环境和高级测试环境。
6.如权利要求5所述的方法,其特征在于,所述TestNG框架还包括用例管理模块,用于测试用例的生命周期管理。
7.如权利要求6所述的方法,其特征在于,所述TestNG框架还包括环境池管理模块,用于基本测试环境的生命周期管理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710507840.0A CN107315686A (zh) | 2017-06-28 | 2017-06-28 | 一种自动化测试的运行方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710507840.0A CN107315686A (zh) | 2017-06-28 | 2017-06-28 | 一种自动化测试的运行方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107315686A true CN107315686A (zh) | 2017-11-03 |
Family
ID=60181186
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710507840.0A Pending CN107315686A (zh) | 2017-06-28 | 2017-06-28 | 一种自动化测试的运行方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107315686A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766255A (zh) * | 2017-11-16 | 2018-03-06 | 郑州云海信息技术有限公司 | 基于Cucumber和Testng的WebUI自动化测试方法 |
CN108777648A (zh) * | 2018-05-18 | 2018-11-09 | 新华三信息安全技术有限公司 | 一种网络设备测试方法及装置 |
CN108845927A (zh) * | 2018-05-04 | 2018-11-20 | 联动优势电子商务有限公司 | 一种测试用例的筛选方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144593A1 (en) * | 2003-12-31 | 2005-06-30 | Raghuvir Yuvaraj A. | Method and system for testing an application framework and associated components |
CN101882107A (zh) * | 2010-06-28 | 2010-11-10 | 山东中创软件商用中间件股份有限公司 | 一种web应用自动化测试的方法及装置 |
CN105573904A (zh) * | 2014-10-11 | 2016-05-11 | 中兴通讯股份有限公司 | 一种测试资源动态申请的方法和装置 |
CN105653446A (zh) * | 2015-12-24 | 2016-06-08 | 北京奇虎科技有限公司 | 用于移动终端的自动化测试的方法及*** |
-
2017
- 2017-06-28 CN CN201710507840.0A patent/CN107315686A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144593A1 (en) * | 2003-12-31 | 2005-06-30 | Raghuvir Yuvaraj A. | Method and system for testing an application framework and associated components |
CN101882107A (zh) * | 2010-06-28 | 2010-11-10 | 山东中创软件商用中间件股份有限公司 | 一种web应用自动化测试的方法及装置 |
CN105573904A (zh) * | 2014-10-11 | 2016-05-11 | 中兴通讯股份有限公司 | 一种测试资源动态申请的方法和装置 |
CN105653446A (zh) * | 2015-12-24 | 2016-06-08 | 北京奇虎科技有限公司 | 用于移动终端的自动化测试的方法及*** |
Non-Patent Citations (1)
Title |
---|
王焱 等: "单元测试工具JUnit框架浅析", 《郧阳师范高等专科学校学报》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107766255A (zh) * | 2017-11-16 | 2018-03-06 | 郑州云海信息技术有限公司 | 基于Cucumber和Testng的WebUI自动化测试方法 |
CN108845927A (zh) * | 2018-05-04 | 2018-11-20 | 联动优势电子商务有限公司 | 一种测试用例的筛选方法及装置 |
CN108845927B (zh) * | 2018-05-04 | 2021-12-07 | 联动优势电子商务有限公司 | 一种测试用例的筛选方法及装置 |
CN108777648A (zh) * | 2018-05-18 | 2018-11-09 | 新华三信息安全技术有限公司 | 一种网络设备测试方法及装置 |
CN108777648B (zh) * | 2018-05-18 | 2020-12-25 | 新华三信息安全技术有限公司 | 一种网络设备测试方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107526645B (zh) | 一种通信优化方法及*** | |
CN106227605B (zh) | 一种多语言云编译的动态微服务扩容方法及装置 | |
CN101707399B (zh) | 电能信息采集方法及*** | |
CN109445802B (zh) | 基于容器的私有化Paas平台及其发布应用的方法 | |
CN104281906A (zh) | 一种业务流程中的流程引擎实现方法及其流程引擎*** | |
CN109495308A (zh) | 一种基于管理信息***的自动化运维*** | |
CN108156181A (zh) | 一种基于协程异步io的漏洞探测方法及其漏洞扫描*** | |
CN101853189B (zh) | 一种基于Java的异常处理装置及其异常处理方法 | |
CN103092670A (zh) | 一种云计算环境下跨平台的虚拟计算资源管理方法 | |
CN108255592A (zh) | 一种Quartz集群定时任务处理***及方法 | |
CN107315686A (zh) | 一种自动化测试的运行方法 | |
CN108243012B (zh) | 在线计费***ocs中计费应用处理***、方法及装置 | |
CN111158708A (zh) | 一种任务编排引擎*** | |
CN112667362A (zh) | Kubernetes上部署Kubernetes虚拟机集群的方法与*** | |
CN111176645A (zh) | 面向电网大数据应用的数据集成管理***及其实现方法 | |
CN101464810A (zh) | 服务程序处理方法及服务器 | |
CN105740139B (zh) | 一种基于虚拟环境的嵌入式软件调试方法 | |
CN108134690B (zh) | 网络业务部署流程控制方法、装置及*** | |
CN105607904B (zh) | 基于Linux平台的通信软件的快速开发框架及其使用方法 | |
CN102185860A (zh) | 用于集成电路制造设备的标准化底层控制驱动*** | |
CN110138876A (zh) | 任务部署方法、装置、设备及平台 | |
CN105843697B (zh) | 一种浏览器控件的中断恢复方法及*** | |
CN104636878A (zh) | 一种银行自动处理任务的调度方法及装置 | |
CN104660435A (zh) | 面向智能管道的事务型网管引擎及其网管事务处理方法 | |
CN114756357B (zh) | 一种基于jvm的非阻塞分布式计划任务调度方法 |
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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20171103 |
|
RJ01 | Rejection of invention patent application after publication |