使用java+TestNG进行接口回归测试 1
【技术沙龙002期】数据中台:宜信敏捷数据中台建设实践|宜信技术沙龙 将于5月23日晚8点线上直播,点击报名
TestNG是一个开源自动化测试框架,“NG”表示下一代(Next Generation的首字母)。 TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展,相较于Junit而言,功能更强大,使用起来更加方便,比较适合测试人员来进行集成测试或是接口回归测试。
一、TestNG的特点
使用java和面向对象的功能
方法的名称就不必受限于某种固定的格式,可以通过注释来识别需要执行的方法;
方法中需要的一些参数可以通过注释传递;
注释是强类型的,所以有错误可以在编译期体现出来;
支持分组测试,依赖测试,并行测试,负载测试等
- 支持多线程测试
二、TestNG常用的注释类型
注释 | 描述 |
---|---|
@Test | 将类或是方法标记为测试的一部分 |
@BeforeSuite | 在该套件的所有测试都运行在注释的方法之前,仅运行一次。 |
@AfterSuite | 在该套件的所有测试都运行在注释的方法之后,仅运行一次 |
@BeforeClass | 在调用当前类的所有测试方法之前执行,注释方法仅运行一次 |
@AfterClass | 在调用当前类的所有测试方法之后执行,注释方法仅运行一次 |
@BeforeTest | 注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行 |
@AfterTest | 注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。 |
@BeforeGroups | 此方法是保证在运行属于任何这些组的第一个测试方法之前,该方法被调用 |
@AfterGroups | 此方法是保证运行属于任何这些组的所有测试方法执行之后,该方法被调用 |
@BeforeMethod | 被注释的方法将在每个测试方法之前执行 |
@AfterMethod | 被注释的方法将在每个测试方法之后执行 |
@DataProvider | 被注释的方法的作用是提供测试数据,如果某个测试方法希望从这个DataProvider接收数据,就必须使用一个名字等于这个注解名字的DataProvider |
@Parameters | 介绍如何将参数传递给测试方法 |
三、TestNG参数化测试
TestNG提供了2种传递参数的方式。
第一种: testng.xml
这种方式的优点是使得代码和测试数据分离,方便维护;缺点就是如果需要传递的参数不是基本的java类型,或是需要的值只能在运行时创建,这种方法就不再适用。
第二种:@DataProvider
这种能够提供比较复杂的参数(也叫data-driven testing)。
我们项目中使用的是第二种
如图示:首先给测试方法添加值为WithdrawBatchQueryLoopData的属性dataProvider,然后提供一个name与之对应的@DataProvider方法,这个方法里的具体实现,就是从配置文件或是数据库中读取数据。
四、TestNG分组测试
分组测试是TestNG中的创新功能,分组测试使得我们可以进行各种灵活的测试,在想要并行多组不同的测试时,不需要重新进行编译。
分组可以应用在方法上(一个方法可以属于一到多个分组),也可以应用在类上,应用在类上时,这个类中的所有public方法都变成测试方法,即便他们没有被注解,也可以继续在需要增加属性的方法上重复@Test注解。分组执行测试方法有多种形式:
可以通过在testng.xml配置,来指定具体要执行的分组
也可以通过集成到jenkins中,通过参数化构建来设置要执行的分组
还可以通过运行Run Configurations时,设置要执行的分组
需要注意的一点:Group标签会导致@BeforeMethod失效
@BeforeMethod的作用是标明所注解的方法在每一个测试方法运行之前会执行一次。例如:
@BeforeMethod
Public void beforeMehod()
@Test
Public void testCase1()
@Test
Public void testCase2()
正常的执行的顺序为:beforeMehod—> testCase1—> beforeMehod—> testCase2
但是,在将testCase放入某一个Group之后,@BeforeMethod就失效了
@BeforeMethod
Public void beforeMehod()
@Test(groups = "group1")
Public void testCase1()
@Test(groups = "group1")
Public void testCase2()
再次执行脚本,执行顺序变为testCase1—>testCase2
解决方法:
1、将@BeforeMethod同样加入group1
2、设置@BeforeMethod的属性alwaysRun=true
五、TestNG依赖测试
我们经常会遇到要测试的多个接口之间存在依赖关系,即某一个接口的执行需要依赖上一个接口的返回结果,比如执行批付查询时,需要先执行批量代付,那么这时就使用到了TestNG的依赖测试,TestNG使用dependsOnMethods配合alwaysRun来设置测试方法之间的依赖关系,使用dependsOnGroups来设置分组之间的依赖关系
强依赖:在测试方法运行之前,所有的依赖方法都必须运行并且成功,哪怕只有一个失败,测试方法都不会被调用(是skip而不是fail)
- 软依赖(alwaysRun=true):测试方法在依赖方法运行之后总是会被执行,即便某些依赖方法运行失败。
六、TestNG预期异常测试
测试中,有时候我们期望某些代码抛出异常。
TestNG通过@Test(expectedExceptions) 来判断期待的异常, 并且判断Error Message
七、TestNG测试报告
执行完测试用例之后,会在项目的test-output(默认目录)下生成测试报告
打开index.html文件可以看到测试结果摘要,包括:套件名、测试用例成功数、测试用例失败数、测试用例忽略数、执行时间和testng.xml文件。
测试用例都成功的话,测试结果以绿底标志,测试用例有失败的话,测试结果以红底标志。testNG自带生成的测试报告不太美观,可以使用testng-xslt进行美化。
作者:王海燕
来源:宜信技术学院
转载于:https://blog.51cto.com/14159827/2395634
使用java+TestNG进行接口回归测试 1相关推荐
- 使用java+TestNG进行接口回归测试
TestNG是一个开源自动化测试框架,TestNG表示下一代(Next Generation的首字母). TestNG类似于JUnit(特别是JUnit 4),但它不是JUnit框架的扩展,相较于Ju ...
- java post接口测试_接口测试——Java + TestNG 国家气象局接口(json解析)实例
后端测试,主要以测试接口为主.需要代码支撑,近期便找了个天气接口捣鼓了. 使用到的工具是:Eclipse + TestNG + Maven + ReportNG,全国城市编码:http://www.c ...
- java接口自动化Excel占位符_基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport的接口自动化测试框架...
接口自动化框架 项目说明 本框架是一套基于maven+java+TestNG+httpclient+poi+jsonpath+ExtentReport而设计的数据驱动接口自动化测试框架,TestNG ...
- IDEA,Java + Maven + TestNG编写接口自动化测试用例脚本
testng配置文件 1.1.Java基础教程 我先复习Java的基本简介.语法.写法.使用.参考资料 安装java 开发工具包:JDK8 或更高版本 配置环境变量 安装java开发工具:IDEA J ...
- java testng 优化_Java自动化测试框架-10 - TestNG之测试结果篇(详细教程)
1.-测试结果 1.1-成功,失败和断言 测试被认为是成功的,如果它不引发任何异常完成,还是它扔的预期异常(请参阅文档expectedExceptions属性上找到的@Test注释). 您的测试方法通 ...
- java类引用接口的注释_java – 在接口类型上使用注释有什么好处?
在这个 example中,注释类型(@interface)下面: @interface ClassPreamble { String author(); String date(); int curr ...
- 初识java类的接口实现
初识java类的接口实现 如果两个类之间不存在继承关系,且两个类都想实现同一个接口,两个类都必须实现接口中全部方法,否则报语法错误 如果两个类之间存在继承关系也想实现同一个接口,父类如果实现了某个接口 ...
- closeable java_【转】java.io.Closeable接口
说到java.io.Closeable接口就避不开java.lang.AutoCloseable接口,因为在java版本7.0时引入了java.lang.AutoCloseable接口,同时java. ...
- Java中实现接口与继承的区别
** Java中实现接口与继承的区别 ** 首先,先来了解一下什么是接口和继承.接口一般是使用interface来定义的.接口定义同类的定义类似,分为接口的声明和接口体,其中接口体由常量定义和方法定义 ...
最新文章
- 算法笔记-递归算法、递归排序、递归的时间复杂度、master公式(也叫主方法)
- ocs(office communications server)通讯簿无法同步的问题集锦及解决方法
- java监听所有端口_(变强、变秃)Java从零开始之zookeeper安装
- python语言属于-python属于解释语言吗
- IOC注解注入View
- 微博收藏(机器学习课程与论文)(三)
- Systick 延时函数详解
- Codeforces 1054D Changing Array
- python jsonpath set value_Python学习:json对象快速访问(续)
- matplotlib.pyplot.figure
- Revit Family API 添加几何实体
- multisim10元件库介绍
- 2014年的暑假ACM之旅!
- Microsoft Dynamics 365咨询服务研究报告-Microsoft Dynamics 365咨询服务生产基地、总部、竞争对手及市场地位
- 火狐浏览器设置关闭提醒
- 基于C++实现(WinForm)家谱管理系统【100010033】
- 如何进行APP界面设计
- 【Python】Webpy 源码学习
- 俗话说:十赌九输。因为大多数赌局的背后都藏有阴谋。不过也不尽然,有些赌局背后藏有的是:“阳谋”。
- 用生成模型来做图像恢复的介绍和回顾:上下文编码器
热门文章
- boost::mp11::mp_copy_if相关用法的测试程序
- boost::math模块计算艾里函数的零点的测试程序
- boost::intrusive::treap_algorithms用法的测试程序
- boost::coroutine模块实现power的测试程序
- Qt Creator在设计模式下编辑3D资产
- C语言orders order订单的算法(附完整源码)
- OpenGL cubemap 立方体贴图实例
- 安装驱动器于当前运行的windows驱动器不能相同_如何预防硬盘故障?5个迹象表明硬盘驱动器即将故障...
- android模拟器后台截屏,【Android】Android模拟器下截屏及格式转换
- php 内容转换dom,php – 防止DOMDocument :: loadHTML()转换实体