CN111459821B - 一种基于TestNG的软件自动化单元测试方法 - Google Patents
一种基于TestNG的软件自动化单元测试方法 Download PDFInfo
- Publication number
- CN111459821B CN111459821B CN202010247911.XA CN202010247911A CN111459821B CN 111459821 B CN111459821 B CN 111459821B CN 202010247911 A CN202010247911 A CN 202010247911A CN 111459821 B CN111459821 B CN 111459821B
- Authority
- CN
- China
- Prior art keywords
- test
- module
- data
- type
- class
- 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.)
- Active
Links
Images
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/3684—Test management for test design, e.g. generating new test cases
-
- 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
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)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于TestNG的软件自动化单元测试方法,其中,编译软件开发人员研发的用于单元测试的内核代码,得到测试项目程序所进行的单元测试。所述方法包括:建立公共支撑模块(100);建立单元测试业务数据和测试脚本模块(200);建立结果处理引擎模块(300);针对待测试的软件,构建测试项目区分测试场景,并生成报告管理模块(400)。软件自动化单元测试项目活动的全生命周期管理。相较现有技术中通过***调用间接执行内核函数,有效避免了因出参校验不全,场景校验不完善,数据和脚本耦合度强造成的软件质量困扰,提高了发现bug的概率和提高了测试的质量。
Description
技术领域
本发明属于软件自动化测试***技术领域,尤其涉及一种基于TestNG的软件自动化单元测试方法。
背景技术
目前现有单元测试软件自动化平台的建设,普遍采用单个项目活动逐一建设的自动化模式进行配置,为了避免测试用例之间相互影响,灵活性更高,每一个测试资源和测试脚本都独立搭建,只在需要进行最终项目活动测试用例资源处理时,调用独立的的测试脚本,通过测试脚本调用独立的测试资源处理服务,这种建设方式,每当有新项目活动需求时,新项目活动需要基于业务需求重新做全量的自动化测试用例编码开发,并且需要根据项目活动的监控需求重新定义植入监控代码对接监控平台进行活动运行监控,活动与活动之间的互斥或共生关系也不能灵活配置,需要额外编码控制。
上述技术中提到的单个项目活动独立开发测试自动化脚本模式的主要缺点在于自动化平台的灵活性差,资源消耗大:每个项目活动的自动化测试人员都需要重新输出测试用例,才能发布上线,无法适应快节奏的研发效率提升的需求;项目活动之间的互斥或共生关系无法灵活配置,无法快速接入外部项目测试用例处理内外部项目的测试用例关系,需要针对每个项目活动需求进行单独重复测试脚本编码开发,耗时长还容易导致自动化测试代码不稳定,造成资源损失;在需要进行项目活动测试效果监控时,因为独立开发的项目活动方案通常规范格式不一致,无法进行统一监控建模,单个项目活动的监控开发困难,所以往往只关注活动的运行结果,缺少对项目活动创建到结算的全生命周期监控。
发明内容
发明目的:为解决背景技术中存在的技术问题,本发明提出一种基于TestNG的软件自动化单元测试方法,包括以下步骤:
步骤1,建立公共支撑模块;
步骤2,建立单元测试业务数据和测试脚本模块;
步骤3,建立结果处理引擎模块;
步骤4,建立报告管理模块,所述报告管理模块用于,针对待测试的软件,构建测试项目区分测试场景,并生成报告。
步骤1包括:建立公共支撑模块,公共支撑模块包括公共资源模块、依赖模块、业务处理模块和多数据源交叉连接模块。
步骤1中,所述公共资源模块用于,提供DTO数据传输模块和公共方法公共类;
其中,所述DTO数据传输模块用于传输不同渠道的数据;比如从数据库中查询的数据转换为程序对象;
所述公共方法公共类用于提供公共方法和公共类,其中,所述公共方法包括包装方法和公共比较方法,所述包装方法用于,对公共方法校验模块返回的不同类型的结果分别断言;所述公共比较方法用于,对公共方法校验模块返回的不同类型的结果进行统一处理;
所述公共类包括以下内容:
响应结果类:提供接口通用数据传输的数据传输对象的定义;
测试数据数据传输类:提供根据测试数据生成testng脚本数据传输对象的定义;
方法数据传输对象类:提供根据表格自动生成测试脚本数据传输对象的定义;
Xml数据传输对象类:提供生成测试脚本编排文件数据传输对象的定义;
方法监听类:提供根据表格自动生成测试用例脚本方法的定义与实现;
Xml监听类:提供根据测试数据和测试脚本自动生成测试统一调度文件编排脚本的方法;
扩展TestNG报告监听类:提供组织和生成测试报告方法和实现。
步骤1中,所述依赖模块用于提供软件自动化单元测试需要的各种依赖资源,所述各种依赖资源包括以下内容:
适配器依赖对各大中心资源依赖、io.dubbo分布式调度依赖、分布式注册中心调度客户端所需要的依赖、Testng测试框架所需要的依赖、电子表格操作模块easyexcel所需要的依赖模块和操作JSON协议的字符串的fastjson所需要的依赖模块。
步骤1中,所述业务处理模块用于,处理具体的项目中的测试业务,例如用户登陆场景,用户下订单场景。具体通过如下步骤实现:
步骤a1,新建项目命名native-cloud-integrate-test,用作业务中台接口断言;
步骤a2,采用横向分包方法新建分包,即按照业务划分;例如对业务中台的基础中心、价格中心、仓储中心、店铺中心、会员中心、用户中心、商品中心、订单中心、交易中心、促销中心、活动中心。就会创建几个分包,方便归纳逻辑。例如cn.htd.cloud.center.ng.basecenter;
步骤a3,创建测试类:测试类统一用Test开头,方便维护。命名规则采用驼峰命名的形式。例如TestBaseAddressService其中每一个单词的开始字母以大写开头,例如Base基础这个单词以大写的B开头。Test后面跟上服务名,业务中的每一个服务都有对应的Test服务进行对应;
步骤a4,在测试类下创建测试方法:测试方法名称采用以小写字母开头,以case开头,后面跟上测试用例编号;
例如public void caseBc0001(String param,String expectValue)throwsException,测试方法名称采用以小写字母开头,以case开头,后面跟上测试用例编号。例如caseBc0001。其中case表示用例。Bc0001表示用例编号。
采用驼峰命名方式,B为大写的B。public表示的是公共的方法,表示这个测试方法可以被其它的包调用。其中void表示方法无需有返回值。括号中表示方法的参数。这里面的param参数表示测试者传递给程序的输入值,即是入参。expectValue表示测试者判断程序执行后应该返回的值,即为期待值。其中throws Exception表示抛出异常。表示向上一层方法的调用者抛出的异常;
步骤a5,注解@Test(priority=0):这个注解表示testng(测试框架)的核心注解,表示为一个测试方法,priority指定测试方法的优先级,数值越低表示优先级越高。将会比它优先级低的测试方法优先调用。
步骤a6,注解@Parameters:这个注解是testng的参数化注解。Testng通过参数化注解读取testng.xml文件中的参数。在java类中定义参数名@Parameters({"param"});在TestNG.xml中设置参数值<parameter name="param"value="paraValue"/>;
步骤1中,所述多数据源交叉连接模块用于提供测试平台连接业务中台各个中心的数据中心的操作,在用例执行期间能够根据设置自由切换各个中心的数据库连接,从而达到对不同中心的业务数据库操作的目的。这样在有些场景用例中例如在接口场景严格依赖库表状态情况下,可以连接不同中心数据中心进行库表操作。具体做法就是利用切面技术在调用库表操作之前设置要连接的中心。
步骤2包括:设置单元测试业务数据和测试脚本模块,所述设置单元测试业务数据和测试脚本模块用于完成对各自动化项目测试脚本活动之间关系的调用管理,具体实现方式有两种:第一种方式:采用编排文件方式,编排两个不同的脚本,编排文件能够根据场景,触发脚本之间按不同的优先级顺序执行管理;第二种方式:利用脚本之间的互相引用,能够根据用户场景,在脚本A的代码块中声明对代码B的引用,完成脚本A调用脚本B的目的;
单元测试业务数据和测试脚本模块包括单元测试脚本模块和数据文件模块,单元测试脚本模块用于完成脚本输出,数据文件模块用于完成测试验证数据输出;数据文件模块具有新增用例数据、编辑用例数据和修改测试数据的功能;
所述单元测试脚本模块具体执行如下步骤完成脚本输出:
步骤b1,在测试类下面建立测试方法,在测试方法下面建立接口脚本开发,并完成入参转化,对任意输入的字符串都能够转化成相应的类型的实体变量,包括带有泛型的类型;
例如定义会员基本信息注册数据传输对象,先写一个注册会员基础信息数据传输对象类,后面跟上注册会员基础信息数据传输对象实体,后面跟上赋值符号,JSON提供的解析对象的方法,其中方法的第一个参数填上入参,第二个参数填上新建的类型引用的实体变量,类型引用的实体变量的泛型里面填上相应的调用接口需要传入的参数的类型,这样一来,对任意输入的字符串都可以转化成相应的类型的实体变量,包括带有泛型的类型。
步骤b2,期待值转化:如果期待值返回的是执行结果返回类型,执行结果返回类型泛型是字符串类型,先声明类型,然后在后面跟上相应的实体变量,然后跟上赋值符号,赋值符号右边是JSON提供的解析对象的方法,其中的一个参数是期待值,第二个参数是新建的类型引用的实体变量,类型引用的实体变量的泛型里面填上相应的调用接口返回的类型,从而将期待值转换成调用接口实际返回的实体变量的类型;
步骤b3,接口调用:声明一个接口调用返回的数据类型,然后后面紧接着跟上对应的类型的实体变量,然后后面跟上接口的服务类的实体变量,然后后面跟上点号,后紧接着跟上被测试的方法;接口的服务类的实体变量在测试脚本的文件上面声明,声明的时候实体变量的上一行需要加上引用注解,达到引用被测服务的目的,引用注解中包含可选参数,可选参数包括检查被测服务是否存在、被测服务是否超时、被测试服务的版本号;注解是由开源框架提供的。这个注解的解析是在测试平台的框架中进行处理,具体就是用到注解的解析方法。
步骤b4,结果比较:通过公共方法公共类中的比较方法,对测试者的期望返回值和接口调用返回值进行比较,其中比较方法的第一个参数就是测试框架调用被测试接口返回的返回值,第二个参数是测试者提供的预判值,即是测试者认为根据测试入参通过测试平台框架调用被测接口应该返回的值;通过公共工具提供的比较方法就能够判断出测试者认为的预期值和测试框架调用的实际返回值是否一致;
步骤b5,对响应结果类:提供接口通用数据传输的数据传输对象的定义;例如对调用接口进行调用前需要前置条件的,前置条件通过方法调用,方法返回响应结果可以统一使用结果响应类进行处理。
所述数据文件模块具体执行如下步骤完成测试验证数据输出并实现新增用例数据、编辑用例数据和修改测试数据的功能:
在数据文件模块中建立基线格式模板,模板的字段分为必填字段和选填字段,必填字段包含:测试用例编号、用例优先级、输入数据参数字符串、期待值、接口入参接口说明和接口路径;选填字段包含测试人、测试时间和备注;
例如,新建用例数据,用户登陆接口,在数据文件模块中增加用例编号为1,用例优先级为2级,输入数据入参为用户ID和用户名称输出期待值为登陆成功,登陆时间,登陆地点等。如果需要编辑用户登陆接口数据,可以直接修改对应的字段数据即可。
在数据文件模块中能够根据用户场景和基线格式模板对用例字段内容进行调整和扩展;在新增测试用例过程中根据模板的内容自动匹配对应的测试用例;
数据文件模块的优势除了可以新增用例外,可以在不依赖与测试脚本直接编辑测试用例。输出测试用例后,当执行过程中代码用例报错,可以直接编辑数据文件模块的内容,不需要执行程序代码,节省了脚本调试的时间。针对不需要的测试用例可以不用进行脚本编辑之间在数据文件模块中直接删除对应的测试用例。
所述数据文件模块和单元测试脚本模块具有相互关联的关系,具体执行如下步骤完成文件输出和脚本执行:
步骤d1,根据测试数据传输类,提供根据测试数据生成testng脚本数据传输对象的定义。在扩展场景测试时候,该类提供了根据具体的数据文件模块中的测试用例编号,场景编号等进行生成场景编排文件的数据对象。
步骤d2,方法数据传输对象类:提供根据数据文件模块,自动生成测试脚本数据传输对象的定义;在生成简单的测试脚本时,可以根据方法数据传输对象类,运行公共调度类,根据用例数据生成对应的简单的测试脚本,这期间用到方法数据传输对象类,把测试用例转换成对应的测试脚本需要的数据对象。
步骤d3,Xml数据传输对象类:提供生成测试脚本编排文件数据传输对象的定义;在根据数据文件模块生成编排文件的时候,会通过Xml数据传输对象类转化成相应的编排文件脚本所需要的数据对象。
步骤d4,方法监听类:提供根据数据文件模块自动生成测试用例脚本方法的定义与实现;在生成简单的测试脚本的时,该类通过配合方法数据传输对象类,进行简单的测试脚本的生成。其中该方法监听类提供了不同的测试者生成简单的测试脚本。
步骤d5,Xml监听类:提供根据测试数据和测试脚本自动生成测试统一调度文件编排脚本的方法;在生成测试脚本编排文件的时候,该监听类通过和Xml数据传输对象类进行配合,按照编排文件要求的格式进行编排文件的自动生成。
步骤3中,所述结果处理引擎模块包括公共方法校验模块和特殊场景校验模块,
包括如下步骤:RPC是远程过程调用(Remote Procedure Call)的缩写形式,接口单元测试,在程序中需要做,设置结果处理引擎模块;***采用关键逻辑主分支测试、业务分支测试、多用例、多脚本、多场景全面覆盖;被测接口返回相应逻辑结果、逻辑状态、逻辑内容;对被测接口返回逻辑结果、逻辑状态、逻辑内容进行分结果、分状态、分内容进行校验断言;
公共方法校验模块用于,通过公共方法公共类对接口的出参和期望值做全参数自动比对校验,保障每个公共的出参得到有效校验,减少单元测试脚本的开发工作量;
公共方法校验模块返回的结果分为以下五种类型:
第一种,字符串类型String;
第二种,Boolean类型;
第三种,执行结果类型,其中的泛型为字符串类型;
第四种,执行结果类型,其中的泛型为列表类型,列表类型中的类型为一个数据传输对象类型;
第五种,执行结果类型,其中的泛型为数据表格类型,数据表格类型中的类型为一个数据传输对象类型;
其中执行结果类型中包含状态码、结果消息、错误消息列表和执行结果;
公共方法校验模块通过两种方法对上述五种类型的结果进行断言,一种方法是通过公共方法公共类中提供的包装方法对上述五种类型的结果分别断言(断言:指接口返回值和预期结果值进行比对);另一种方法是对上述五种类型的结果进行统一处理,即通过公共资源模块提供的公共方法公共类中的公共比较方法,将调用结果返回值和测试者期待的值传入,然后进行比较。
第一种分别断言方法提供了对状态码,结果消息,错误消息列表,执行结果几种元素分别比较断言,这就需要测试脚本开发者对调用被测试接口返回值进行拆分后调用此方法。
除了公共方法校验模块以外,程序需要做针对特殊场景校验,根据RPC接口的业务场景特殊校验。特殊场景校验模块校验。
对于特殊场景校验,例如场景一、对修改密码的接口进行测试。对于这种需要修改密码的接口需要有旧的密码。这样就会存在需要记住旧的密码的要求。对于这样的特殊场景,提供了一个记住密码的数据库。测试平台通过连接数据库取得旧的密码,然后修改密码,修改成功后把当前修改后的密码作为旧的密码通过测试平台框架存储到数据库中。
场景二、对与需要加密解密的接口测试,除了提供公共的方法对于全部参数进行校验,还提供了对这种需要加解密的接口进行特殊比较处理。可以不比较这个特殊字段。
场景三、对于新增接口的测试。有些新增接口本身对于数据的唯一性进行了校验。这样就需要对于入参进行特殊处理。例如在唯一性参数后面加上时间戳,确保数据的唯一性。
场景四、对于依赖修改状态的这种接口,提供了记住上一次的状态的id,在下次进行修改的时候首先提供了预处理,在预处理中可以将状态编程初始状态。这样就可以达到重复修改目的。
步骤4中,报告管理模块包括报告配置项和报告生成触发器;
所述报告配置项用于,根据不同配置***输出不同的测试报告,具体包括:根据业务处理模块中的分包文件或者测试类文件,以及数据文件模块的具体字段选择自动比对输出测试报告;报告的配置可以根据各中心数据分别维护、不同测试人员、不同测试分支数据分开维护、也可以统一维护。
所述报告生成触发器用于,根据测试数据生成测试报告,具体包括:
运行XmlWrite类中的simpleRead方法,根据测试业务数据生成对应的testng.xml文件;
运行testng.xml文件调用测试脚本生成测试报告,在testng.xml中增加扩展testng报告监听生成testng扩展测试报告;
在XmlWrite中提供根据EasyExcel操作测试业务数据表格方法读取和组合不同的测试者提供的测试业务数据最终生成testng.xml文件。
根据扩展TestNG报告监听类,提供组织和生成测试报告方法和实现。该类主要结合第三方开源测试报告框架extentreports(第三方开源测试报告框架)生成业务中台测试报告,其中在该类中包括对测试用例的名称,特殊字符等进行处理加工。
根据类目查看各大中心测试集测试结果、其中可以查看测试时间、测试集名称、测试状态。可以在线查看各大中心测试集测试用例执行失败分析展示。
各大中心测试报告可以按照看板分类展示、其中看版中内容有测试、测试步骤、测试失败多少、测试通过多少、测试跳过多少、测试开始时间、测试结束时间、测试花费时间、按类目分支展示测试通过失败其它原因情况。
本发明方法具有如下有益效果:
(1)测试结果可以根据条件按照类目以看板的形式方便查看,清晰的测试报告,可以查看项目的用例的总数,失败的数目,成功的数目。并且保留历史测试报告。
(2)可以集合不同的测试者测试用例的编写,形成统一的测试用例管理,有效的管理用例的项目名称,用例模块,用例优先级级等。
(3)可以对项目的单元测试进行有效的***性的测试,分脚本和分数据进行测试有利于数据的维护方便,直接在脚本很正宗进行脚本更改。
(4)可以很大的节约测试者的代码编写工作量和提升测试的工作效率。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是本发明方法架构图。
具体实施方式
如图1所示,本发明提出一种基于TestNG的软件自动化单元测试方法,包括以下步骤:
步骤1,建立公共支撑模块;
步骤2,建立单元测试业务数据和测试脚本模块;
步骤3,建立结果处理引擎模块;
步骤4,建立报告管理模块,所述报告管理模块用于,针对待测试的软件,构建测试项目区分测试场景,并生成报告。
步骤1包括:建立公共支撑模块,公共支撑模块包括公共资源模块、依赖模块、业务处理模块和多数据源交叉连接模块。
步骤1中,所述公共资源模块用于,提供DTO数据传输模块和公共方法公共类;
其中,所述DTO数据传输模块用于传输不同渠道的数据;比如从数据库中查询的数据转换为程序对象;
所述公共方法公共类用于提供公共方法和公共类,其中,所述公共方法包括包装方法和公共比较方法,所述包装方法用于,对公共方法校验模块返回的不同类型的结果分别断言;所述公共比较方法用于,对公共方法校验模块返回的不同类型的结果进行统一处理;
所述公共类包括以下内容:
响应结果类:提供接口通用数据传输的数据传输对象的定义;
测试数据数据传输类:提供根据测试数据生成testng脚本数据传输对象的定义;
方法数据传输对象类:提供根据表格自动生成测试脚本数据传输对象的定义;
Xml数据传输对象类:提供生成测试脚本编排文件数据传输对象的定义;
方法监听类:提供根据表格自动生成测试用例脚本方法的定义与实现;
Xml监听类:提供根据测试数据和测试脚本自动生成测试统一调度文件编排脚本的方法;
扩展TestNG报告监听类:提供组织和生成测试报告方法和实现。
步骤1中,所述依赖模块用于提供软件自动化单元测试需要的各种依赖资源,所述各种依赖资源包括以下内容:
适配器依赖对各大中心资源依赖、io.dubbo分布式调度依赖、分布式注册中心调度客户端所需要的依赖、Testng测试框架所需要的依赖、电子表格操作模块easyexcel所需要的依赖模块和操作JSON协议的字符串的fastjson所需要的依赖模块。
步骤1中,所述业务处理模块用于,处理具体的项目中的测试业务,例如用户登陆场景,用户下订单场景。具体通过如下步骤实现:
步骤a1,新建项目命名native-cloud-integrate-test,用作业务中台接口断言;
步骤a2,采用横向分包方法新建分包,即按照业务划分;例如对业务中台的基础中心、价格中心、仓储中心、店铺中心、会员中心、用户中心、商品中心、订单中心、交易中心、促销中心、活动中心。就会创建几个分包,方便归纳逻辑。例如cn.htd.cloud.center.ng.basecenter;
步骤a3,创建测试类:测试类统一用Test开头,方便维护。命名规则采用驼峰命名的形式。例如TestBaseAddressService其中每一个单词的开始字母以大写开头,例如Base基础这个单词以大写的B开头。Test后面跟上服务名,业务中的每一个服务都有对应的Test服务进行对应;
步骤a4,在测试类下创建测试方法:测试方法名称采用以小写字母开头,以case开头,后面跟上测试用例编号;
例如public void caseBc0001(String param,String expectValue)throwsException,测试方法名称采用以小写字母开头,以case开头,后面跟上测试用例编号。例如caseBc0001。其中case表示用例。Bc0001表示用例编号。
采用驼峰命名方式,B为大写的B。public表示的是公共的方法,表示这个测试方法可以被其它的包调用。其中void表示方法无需有返回值。括号中表示方法的参数。这里面的param参数表示测试者传递给程序的输入值,即是入参。expectValue表示测试者判断程序执行后应该返回的值,即为期待值。其中throws Exception表示抛出异常。表示向上一层方法的调用者抛出的异常;
步骤a5,注解@Test(priority=0):这个注解表示testng(测试框架)的核心注解,表示为一个测试方法,priority指定测试方法的优先级,数值越低表示优先级越高。将会比它优先级低的测试方法优先调用。
步骤a6,注解@Parameters:这个注解是testng的参数化注解。Testng通过参数化注解读取testng.xml文件中的参数。在java类中定义参数名@Parameters({"param"});在TestNG.xml中设置参数值<parameter name="param"value="paraValue"/>;
步骤1中,所述多数据源交叉连接模块用于提供测试平台连接业务中台各个中心的数据中心的操作,在用例执行期间能够根据设置自由切换各个中心的数据库连接,从而达到对不同中心的业务数据库操作的目的。这样在有些场景用例中例如在接口场景严格依赖库表状态情况下,可以连接不同中心数据中心进行库表操作。具体做法就是利用切面技术在调用库表操作之前设置要连接的中心。
步骤2包括:设置单元测试业务数据和测试脚本模块,所述设置单元测试业务数据和测试脚本模块用于完成对各自动化项目测试脚本活动之间关系的调用管理,具体实现方式有两种:第一种方式:采用编排文件方式,编排两个不同的脚本,编排文件能够根据场景,触发脚本之间按不同的优先级顺序执行管理;第二种方式:利用脚本之间的互相引用,能够根据用户场景,在脚本A的代码块中声明对代码B的引用,完成脚本A调用脚本B的目的;
单元测试业务数据和测试脚本模块包括单元测试脚本模块和数据文件模块,单元测试脚本模块用于完成脚本输出,数据文件模块用于完成测试验证数据输出;数据文件模块具有新增用例数据、编辑用例数据和修改测试数据的功能;
所述单元测试脚本模块具体执行如下步骤完成脚本输出:
步骤b1,在测试类下面建立测试方法,在测试方法下面建立接口脚本开发,并完成入参转化,对任意输入的字符串都能够转化成相应的类型的实体变量,包括带有泛型的类型;
例如定义会员基本信息注册数据传输对象,先写一个注册会员基础信息数据传输对象类,后面跟上注册会员基础信息数据传输对象实体,后面跟上赋值符号,JSON提供的解析对象的方法,其中方法的第一个参数填上入参,第二个参数填上新建的类型引用的实体变量,类型引用的实体变量的泛型里面填上相应的调用接口需要传入的参数的类型,这样一来,对任意输入的字符串都可以转化成相应的类型的实体变量,包括带有泛型的类型。
步骤b2,期待值转化:如果期待值返回的是执行结果返回类型,执行结果返回类型泛型是字符串类型,先声明类型,然后在后面跟上相应的实体变量,然后跟上赋值符号,赋值符号右边是JSON提供的解析对象的方法,其中的一个参数是期待值,第二个参数是新建的类型引用的实体变量,类型引用的实体变量的泛型里面填上相应的调用接口返回的类型,从而将期待值转换成调用接口实际返回的实体变量的类型;
步骤b3,接口调用:声明一个接口调用返回的数据类型,然后后面紧接着跟上对应的类型的实体变量,然后后面跟上接口的服务类的实体变量,然后后面跟上点号,后紧接着跟上被测试的方法;接口的服务类的实体变量在测试脚本的文件上面声明,声明的时候实体变量的上一行需要加上引用注解,达到引用被测服务的目的,引用注解中包含可选参数,可选参数包括检查被测服务是否存在、被测服务是否超时、被测试服务的版本号;注解是由开源框架提供的。这个注解的解析是在测试平台的框架中进行处理,具体就是用到注解的解析方法。
步骤b4,结果比较:通过公共方法公共类中的比较方法,对测试者的期望返回值和接口调用返回值进行比较,其中比较方法的第一个参数就是测试框架调用被测试接口返回的返回值,第二个参数是测试者提供的预判值,即是测试者认为根据测试入参通过测试平台框架调用被测接口应该返回的值;通过公共工具提供的比较方法就能够判断出测试者认为的预期值和测试框架调用的实际返回值是否一致;
所述数据文件模块具体执行如下步骤完成测试验证数据输出并实现新增用例数据、编辑用例数据和修改测试数据的功能:
在数据文件模块中建立基线格式模板,模板的字段分为必填字段和选填字段,必填字段包含:测试用例编号、用例优先级、输入数据参数字符串、期待值、接口入参接口说明和接口路径;选填字段包含测试人、测试时间和备注;
例如,新建用例数据,用户登陆接口,在数据文件模块中增加用例编号为1,用例优先级为2级,输入数据入参为用户ID和用户名称输出期待值为登陆成功,登陆时间,登陆地点等。如果需要编辑用户登陆接口数据,可以直接修改对应的字段数据即可。
在数据文件模块中能够根据用户场景和基线格式模板对用例字段内容进行调整和扩展;在新增测试用例过程中根据模板的内容自动匹配对应的测试用例;
数据文件模块的优势除了可以新增用例外,可以在不依赖与测试脚本直接编辑测试用例。输出测试用例后,当执行过程中代码用例报错,可以直接编辑数据文件模块的内容,不需要执行程序代码,节省了脚本调试的时间。针对不需要的测试用例可以不用进行脚本编辑之间在数据文件模块中直接删除对应的测试用例。
步骤3中,所述结果处理引擎模块包括公共方法校验模块和特殊场景校验模块,
包括如下步骤:RPC是远程过程调用(Remote Procedure Call)的缩写形式,接口单元测试,在程序中需要做,设置结果处理引擎模块;***采用关键逻辑主分支测试、业务分支测试、多用例、多脚本、多场景全面覆盖;被测接口返回相应逻辑结果、逻辑状态、逻辑内容;对被测接口返回逻辑结果、逻辑状态、逻辑内容进行分结果、分状态、分内容进行校验断言;
公共方法校验模块用于,通过公共方法公共类对接口的出参和期望值做全参数自动比对校验,保障每个公共的出参得到有效校验,减少单元测试脚本的开发工作量;
公共方法校验模块返回的结果分为以下五种类型:
第一种,字符串类型String;
第二种,Boolean类型;
第三种,执行结果类型,其中的泛型为字符串类型;
第四种,执行结果类型,其中的泛型为列表类型,列表类型中的类型为一个数据传输对象类型;
第五种,执行结果类型,其中的泛型为数据表格类型,数据表格类型中的类型为一个数据传输对象类型;
其中执行结果类型中包含状态码、结果消息、错误消息列表和执行结果;
公共方法校验模块通过两种方法对上述五种类型的结果进行断言,一种方法是通过公共方法公共类中提供的包装方法对上述五种类型的结果分别断言(断言:指接口返回值和预期结果值进行比对);另一种方法是对上述五种类型的结果进行统一处理,即通过公共资源模块提供的公共方法公共类中的公共比较方法,将调用结果返回值和测试者期待的值传入,然后进行比较。
第一种分别断言方法提供了对状态码,结果消息,错误消息列表,执行结果几种元素分别比较断言,这就需要测试脚本开发者对调用被测试接口返回值进行拆分后调用此方法。
除了公共方法校验模块以外,程序需要做针对特殊场景校验,根据RPC接口的业务场景特殊校验。特殊场景校验模块校验。
对于特殊场景校验,例如场景一、对修改密码的接口进行测试。对于这种需要修改密码的接口需要有旧的密码。这样就会存在需要记住旧的密码的要求。对于这样的特殊场景,提供了一个记住密码的数据库。测试平台通过连接数据库取得旧的密码,然后修改密码,修改成功后把当前修改后的密码作为旧的密码通过测试平台框架存储到数据库中。
场景二、对与需要加密解密的接口测试,除了提供公共的方法对于全部参数进行校验,还提供了对这种需要加解密的接口进行特殊比较处理。可以不比较这个特殊字段。
场景三、对于新增接口的测试。有些新增接口本身对于数据的唯一性进行了校验。这样就需要对于入参进行特殊处理。例如在唯一性参数后面加上时间戳,确保数据的唯一性。
场景四、对于依赖修改状态的这种接口,提供了记住上一次的状态的id,在下次进行修改的时候首先提供了预处理,在预处理中可以将状态编程初始状态。这样就可以达到重复修改目的。
步骤4中,报告管理模块包括报告配置项和报告生成触发器;
所述报告配置项用于,根据不同配置***输出不同的测试报告,具体包括:根据业务处理模块中的分包文件或者测试类文件,以及数据文件模块的具体字段选择自动比对输出测试报告;报告的配置可以根据各中心数据分别维护、不同测试人员、不同测试分支数据分开维护、也可以统一维护。
所述报告生成触发器用于,根据测试数据生成测试报告,具体包括:
运行XmlWrite类中的simpleRead方法,根据测试业务数据生成对应的testng.xml文件;
运行testng.xml文件调用测试脚本生成测试报告,在testng.xml中增加扩展testng报告监听生成testng扩展测试报告;
在XmlWrite中提供根据EasyExcel操作测试业务数据表格方法读取和组合不同的测试者提供的测试业务数据最终生成testng.xml文件。
根据类目查看各大中心测试集测试结果、其中可以查看测试时间、测试集名称、测试状态。可以在线查看各大中心测试集测试用例执行失败分析展示。
各大中心测试报告可以按照看板分类展示、其中看版中内容有测试、测试步骤、测试失败多少、测试通过多少、测试跳过多少、测试开始时间、测试结束时间、测试花费时间、按类目分支展示测试通过失败其它原因情况。
本发明提供了一种基于TestNG的软件自动化单元测试方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (1)
1.一种基于TestNG的软件自动化单元测试方法,其特征在于,包括以下步骤:
步骤1,建立公共支撑模块;
步骤2,建立单元测试业务数据和测试脚本模块;
步骤3,建立结果处理引擎模块;
步骤4,建立报告管理模块,所述报告管理模块用于,针对待测试的软件,构建测试项目区分测试场景,并生成报告;
步骤1包括:建立公共支撑模块,公共支撑模块包括公共资源模块、依赖模块、业务处理模块和多数据源交叉连接模块;
步骤1中,所述公共资源模块用于,提供DTO数据传输模块和公共方法公共类;
其中,所述DTO数据传输模块用于传输不同渠道的数据;
所述公共方法公共类用于提供公共方法和公共类,其中,所述公共方法包括包装方法和公共比较方法;
所述公共类包括以下内容:
响应结果类:提供接口通用数据传输的数据传输对象的定义;
测试数据数据传输类:提供根据测试数据生成testng脚本数据传输对象的定义;
方法数据传输对象类:提供根据表格自动生成测试脚本数据传输对象的定义;
Xml数据传输对象类:提供生成测试脚本编排文件数据传输对象的定义;
方法监听类:提供根据表格自动生成测试用例脚本方法的定义与实现;
Xml监听类:提供根据测试数据和测试脚本自动生成测试统一调度文件编排脚本的方法;
扩展TestNG报告监听类:提供组织和生成测试报告方法和实现;
步骤1中,所述依赖模块用于提供软件自动化单元测试需要的各种依赖资源,所述各种依赖资源包括以下内容:
适配器依赖对各大中心资源依赖、io.dubbo分布式调度依赖、分布式注册中心调度客户端所需要的依赖、Testng测试框架所需要的依赖、电子表格操作模块easyexcel所需要的依赖模块和操作JSON协议的字符串的fastjson所需要的依赖模块;
步骤1中,所述业务处理模块用于,处理具体的项目中的测试业务,具体通过如下步骤实现:
步骤a1,新建项目命名native-cloud-integrate-test,用作业务中台接口断言;
步骤a2,采用横向分包方法新建分包,即按照业务划分;
步骤a3,创建测试类:测试类统一用Test开头,命名规则采用驼峰命名的形式,Test后面跟上服务名,业务中的每一个服务都有对应的Test服务进行对应;
步骤a4,在测试类下创建测试方法:测试方法名称采用以小写字母开头,以case开头,后面跟上测试用例编号;
步骤1中,所述多数据源交叉连接模块用于提供测试平台连接业务中台各个中心的数据中心的操作,在用例执行期间能够根据设置自由切换各个中心的数据库连接,从而达到对不同中心的业务数据库操作的目的;
步骤2包括:设置单元测试业务数据和测试脚本模块,所述设置单元测试业务数据和测试脚本模块用于完成对各自动化项目测试脚本活动之间关系的调用管理,具体实现方式有两种:第一种方式:采用编排文件方式,编排两个不同的脚本,编排文件能够根据场景,触发脚本之间按不同的优先级顺序执行管理;第二种方式:利用脚本之间的互相引用,能够根据用户场景,在脚本A的代码块中声明对代码B的引用,完成脚本A调用脚本B的目的;
单元测试业务数据和测试脚本模块包括单元测试脚本模块和数据文件模块,单元测试脚本模块用于完成脚本输出,数据文件模块用于完成测试验证数据输出;数据文件模块具有新增用例数据、编辑用例数据和修改测试数据的功能;
所述单元测试脚本模块具体执行如下步骤完成脚本输出:
步骤b1,在测试类下面建立测试方法,在测试方法下面建立接口脚本开发,并完成入参转化,对任意输入的字符串都能够转化成相应的类型的实体变量,包括带有泛型的类型;
步骤b2,期待值转化:如果期待值返回的是执行结果返回类型,执行结果返回类型泛型是字符串类型,先声明类型,然后在后面跟上相应的实体变量,然后跟上赋值符号,赋值符号右边是JSON提供的解析对象的方法,其中的一个参数是期待值,第二个参数是新建的类型引用的实体变量,类型引用的实体变量的泛型里面填上相应的调用接口返回的类型,从而将期待值转换成调用接口实际返回的实体变量的类型;
步骤b3,接口调用:声明一个接口调用返回的数据类型,然后后面紧接着跟上对应的类型的实体变量,然后后面跟上接口的服务类的实体变量,然后后面跟上点号,后紧接着跟上被测试的方法;接口的服务类的实体变量在测试脚本的文件上面声明,声明的时候实体变量的上一行需要加上引用注解,达到引用被测服务的目的,引用注解中包含可选参数,可选参数包括:
检查被测服务是否存在;
被测服务是否超时;
被测试服务的版本号;
步骤b4,结果比较:通过公共方法公共类中的比较方法,对测试者的期望返回值和接口调用返回值进行比较,其中比较方法的第一个参数就是测试框架调用被测试接口返回的返回值,第二个参数是测试者提供的预判值,即是测试者认为根据测试入参通过测试平台框架调用被测接口应该返回的值;通过公共工具提供的比较方法就能够判断出测试者认为的预期值和测试框架调用的实际返回值是否一致;
所述数据文件模块具体执行如下步骤完成测试验证数据输出并实现新增用例数据、编辑用例数据和修改测试数据的功能:
在数据文件模块中建立基线格式模板,模板的字段分为必填字段和选填字段,必填字段包含:测试用例编号、用例优先级、输入数据参数字符串、期待值、接口入参接口说明和接口路径;选填字段包含测试人、测试时间和备注;
在数据文件模块中能够根据用户场景和基线格式模板对用例字段内容进行调整和扩展;在新增测试用例过程中根据模板的内容自动匹配对应的测试用例;
步骤3中,所述结果处理引擎模块包括公共方法校验模块和特殊场景校验模块,
公共方法校验模块用于,通过公共方法公共类对接口的出参和期望值做全参数自动比对校验,保障每个公共的出参得到有效校验,减少单元测试脚本的开发工作量;
公共方法校验模块返回的结果分为以下五种类型:
第一种,字符串类型String;
第二种,Boolean类型;
第三种,执行结果类型,其中的泛型为字符串类型;
第四种,执行结果类型,其中的泛型为列表类型,列表类型中的类型为一个数据传输对象类型;
第五种,执行结果类型,其中的泛型为数据表格类型,数据表格类型中的类型为一个数据传输对象类型;
其中执行结果类型中包含状态码、结果消息、错误消息列表和执行结果;
公共方法校验模块通过两种方法对上述五种类型的结果进行断言,一种方法是通过公共方法公共类中提供的包装方法对上述五种类型的结果分别断言;另一种方法是对上述五种类型的结果进行统一处理,即通过公共资源模块提供的公共方法公共类中的公共比较方法,将调用结果返回值和测试者期待的值传入,然后进行比较;
所述包装方法用于,对公共方法校验模块返回的不同类型的结果分别断言;所述公共比较方法用于,对公共方法校验模块返回的不同类型的结果进行统一处理;
步骤4中,报告管理模块包括报告配置项和报告生成触发器;
所述报告配置项用于,根据不同配置***输出不同的测试报告,具体包括:根据业务处理模块中的分包文件或者测试类文件,以及数据文件模块的具体字段选择自动比对输出测试报告;
所述报告生成触发器用于,根据测试数据生成测试报告,具体包括:
运行XmlWrite类中的simpleRead方法,根据测试业务数据生成对应的testng.xml文件;
运行testng.xml文件调用测试脚本生成测试报告,在testng.xml中增加扩展testng报告监听生成testng扩展测试报告;
在XmlWrite中提供根据EasyExcel操作测试业务数据表格方法读取和组合不同的测试者提供的测试业务数据最终生成testng.xml文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010247911.XA CN111459821B (zh) | 2020-04-01 | 2020-04-01 | 一种基于TestNG的软件自动化单元测试方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010247911.XA CN111459821B (zh) | 2020-04-01 | 2020-04-01 | 一种基于TestNG的软件自动化单元测试方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111459821A CN111459821A (zh) | 2020-07-28 |
CN111459821B true CN111459821B (zh) | 2023-05-30 |
Family
ID=71684325
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010247911.XA Active CN111459821B (zh) | 2020-04-01 | 2020-04-01 | 一种基于TestNG的软件自动化单元测试方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111459821B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035357B (zh) * | 2020-08-31 | 2022-11-29 | 深圳平安医疗健康科技服务有限公司 | 智能测试方法、装置、设备及存储介质 |
CN112306521B (zh) * | 2020-09-29 | 2024-07-16 | 北京沃东天骏信息技术有限公司 | 中台服务***、方法和存储介质 |
CN112181845A (zh) * | 2020-10-13 | 2021-01-05 | 湖南快乐阳光互动娱乐传媒有限公司 | 一种接口测试方法及装置 |
CN112241370B (zh) * | 2020-10-21 | 2023-06-16 | 网易(杭州)网络有限公司 | 一种api接口类的校验方法、***及装置 |
CN112417699A (zh) * | 2020-11-26 | 2021-02-26 | 中国科学院电子学研究所苏州研究院 | 一种面向服务能力的结构化描述校验***及其方法 |
CN117951005A (zh) * | 2021-01-25 | 2024-04-30 | 杭州衣科信息技术股份有限公司 | 接口自动化测试装置、计算机设备及存储介质 |
CN112882931B (zh) * | 2021-02-06 | 2023-05-09 | 重庆富民银行股份有限公司 | 基于ddt的自动化测试方法及装置 |
CN113110982B (zh) * | 2021-03-29 | 2023-02-03 | 青岛海尔科技有限公司 | 数据访问层验证方法及装置、存储介质及电子装置 |
CN113138922A (zh) * | 2021-04-23 | 2021-07-20 | 上海中通吉网络技术有限公司 | 基于TestNG参数化读取Excel测试数据的方法 |
CN113407460B (zh) * | 2021-07-16 | 2023-04-11 | 抖音视界有限公司 | 一种页面测试方法、装置、设备及存储介质 |
CN117076332B (zh) * | 2023-10-13 | 2024-01-23 | 博智安全科技股份有限公司 | 一种测试用例的测试方法、装置、电子设备及存储介质 |
CN117931635B (zh) * | 2023-12-19 | 2024-07-05 | 深圳计算科学研究院 | 数据库测试用例执行结果的分析方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407112A (zh) * | 2016-09-09 | 2017-02-15 | 浪潮软件集团有限公司 | 基于Selenium和TestNG的自动化测试方法 |
CN110232024A (zh) * | 2019-05-26 | 2019-09-13 | 必成汇(成都)科技有限公司 | 软件自动化测试框架及测试方法 |
CN110851356A (zh) * | 2019-10-30 | 2020-02-28 | 河海大学 | 一种基于Selenium的Web应用自动化测试框架及其构建方法、*** |
-
2020
- 2020-04-01 CN CN202010247911.XA patent/CN111459821B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407112A (zh) * | 2016-09-09 | 2017-02-15 | 浪潮软件集团有限公司 | 基于Selenium和TestNG的自动化测试方法 |
CN110232024A (zh) * | 2019-05-26 | 2019-09-13 | 必成汇(成都)科技有限公司 | 软件自动化测试框架及测试方法 |
CN110851356A (zh) * | 2019-10-30 | 2020-02-28 | 河海大学 | 一种基于Selenium的Web应用自动化测试框架及其构建方法、*** |
Also Published As
Publication number | Publication date |
---|---|
CN111459821A (zh) | 2020-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111459821B (zh) | 一种基于TestNG的软件自动化单元测试方法 | |
CN107273286B (zh) | 针对任务应用的场景自动化测试平台及方法 | |
CN109582301B (zh) | 基于任务调度***的业务处理方法、装置、设备及介质 | |
CN106095677B (zh) | 基于Robot Framework实现的RESTful Webservice接口自动化测试方法 | |
US7421621B1 (en) | Application integration testing | |
CN103150249B (zh) | 一种自动化测试的方法和*** | |
CN108845940B (zh) | 一种企业级信息***自动化功能测试方法和*** | |
US20090271351A1 (en) | Rules engine test harness | |
CN109933521A (zh) | 基于bdd的自动化测试方法、装置、计算机设备及存储介质 | |
US20060020931A1 (en) | Method and apparatus for managing complex processes | |
US20050114838A1 (en) | Dynamically tunable software test verification | |
CN111399828A (zh) | 一种基于模型驱动的逻辑设备建模方法及终端 | |
CN110162365A (zh) | 一种自动操作sap业务软件的方法和*** | |
CN111597104A (zh) | 一种多协议适配的接口回归测试方法、***、设备和介质 | |
CN115576817A (zh) | 一种自动化测试***、方法、电子设备及存储介质 | |
CN116483730A (zh) | 基于国产软硬件和开源测试工具的业务***自动测试方法 | |
CN113448826A (zh) | 一种软件自动化测试***及方法 | |
CN111459809A (zh) | 一种基于快速需求版本迭代的软件测试方法 | |
CN114968192A (zh) | 一种项目创建方法、装置、计算机设备及存储介质 | |
CN110928796A (zh) | 一种自动化测试平台 | |
CN113342679A (zh) | 接口测试方法及测试装置 | |
Li et al. | Towards a practical and effective method for web services test case generation | |
CN112130823A (zh) | 一种平台开发方法、装置、计算机设备及存储介质 | |
CN116467188A (zh) | 一种多环境场景下的通用本地复现***和方法 | |
CN115525561A (zh) | 协议接口测试方法、装置、终端设备以及存储介质 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |