testNG单元测试学习
【demo的项目报以及流程文档放在了资源文件上】
1 TestNG的介绍
1.1 概念:
TestNG(Test Next Generation)是一个测试框架,在Junit和NUnit基础上引入新功能,它是一个开源自动化测试框架。
1.2 特点:
1. 注解;
2. TestNG使用Java和面向对象的功能;
3. 支持综合类测试(如,默认情况下,不用创建一个新的测试每个测试方法的类的实例);
4. 独立的编译时测试代码和运行时配置/数据信息;
5. 灵活的运行时配置;
6. 支持测试分组、依赖测试方法、并行测试、负载测试、局部故障等;
7. 灵活的插件API;
8. 支持多线程测试;
1.3 注解
注解 |
描述 |
@BeforeSuite |
在该套件的所有测试都运行在注释的方法之前,仅运行一次。 |
@AfterSuite |
在该套件的所有测试都运行在注释方法之后,仅运行一次。 |
@BeforeClass |
在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。 |
@AfterClass |
在调用当前类的第一个测试方法之后运行,注释方法仅运行一次 |
@BeforeTest |
注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。 |
@AfterTest |
注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。 |
@BeforeGroups |
配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。 |
@AfterGroups |
此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。 |
@BeforeMethod |
注释方法将在每个测试方法之前运行。 |
@AfterMethod |
注释方法将在每个测试方法之后运行。 |
@DataProvider |
标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。 |
@Factory |
将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []。 |
@Listeners |
定义测试类上的侦听器。 |
@Parameters |
描述如何将参数传递给@Test方法。 |
@Test |
将类或方法标记为测试的一部分。 |
其中,@BeforeSuite和@AfterSuite只执行一次,大致的顺序是:@BeforeSuite——@BeforeTest——@BeforeClass——@BeforeMethod——(method),然后@AfterXXX是逆序
2 TestNG框架的安装
2.1使用的工具:
TestNG插件、Maven、Eclipse
其中TestNG插件的安装:在ecplise的help栏目中找到Install New Software按钮按照以下操作:
2.2 TestNG依赖关系
在pom.xml中添加TestNG库
3 TestNG Demo的编写
3.1 套件测试
3.1.1 套件测试介绍
1)测试套件作用:用于测试软件程序的行为或一组行为的测试用例的集合。主要是用xml文件表示,由<suite>标记定义,<suite>是testng.xml的根标记,描述一个测试套件,<suite>又由几个<test>部分组成。
2)下表是<suite>接受的所有定义的合法属性
属性 |
描述 |
name |
套件的名称,这是一个强制属性。 |
verbose |
运行的级别或详细程度。 |
parallel |
TestNG是否运行不同的线程来运行这个套件。 |
thread-count |
如果启用并行模式(忽略其他方式),则要使用的线程数。 |
annotations |
在测试中使用的注释类型。 |
time-out |
在本测试中的所有测试方法上使用的默认超时。 |
3.1.2 套件测试Demo
1. 创建Demo目录如下:
2.创建三个测试类分别是TestConfig、TestDatabase、TestPerson如下
3.创建testng_suite.xml文件,进行套件测试
4.创建testng_package.xml文件,进行整个包的测试
3.2 分组测试
3.2.1分组测试介绍
1)分组测试是TestNG中的一个新的创新功能,在Junit框架中不存在。它允许声明属于某个分组的方法,也可以指定包含其他组的组。可以要求包含一组特定的组,同时排除另一个分组(include和exclude的使用)
2)在testng.xml文件中指定分组,使用<groups>标记,在<test>或<suite>标签下找到,<suite>标签中指定分组适用于所有<test>标签。
3.2.2分组测试Demo
1. 创建Demo目录如下:
2.创建TestGroup测试类
3.创建TestDatabase测试类
4.创建testng_groups.xml进行分组测试
运行后结果为:
3.3 依赖测试
3.3.1 依赖测试介绍
1)场景需求:需要以特定顺序调用测试用例中的方法,或者可能希望在方法之间共享一些数据和状态。 TestNG支持这种依赖关系,因为它支持在测试方法之间显式依赖的声明。
2)TestNG允许指定依赖关系:
在@Test注释中使用属性dependsOnMethods,
在@Test注释中使用属性dependsOnGroups。
3)在TestNG中,使用dependOnMethods和dependsOnGroups来实现依赖测试。 如果依赖方法失败,则将跳过所有后续测试方法。
3.3.2 依赖测试Demo
1. 创建Demo目录如下:
2.dependsOnMethods依赖方法
1)method2()依赖于method1(),如果method1()通过,那么执行method2()
2)如果method1()失败,则将跳过method2()
3.dependsOnGroups的使用
1)创建被依赖的分组测试类
2)创建依赖分组测试类
3)创建xml文件testng_dependency.xml进行依赖测试
3.4 超时测试
3.4.1 超时测试介绍
1)执行超时测试,“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么testNG将会中止它并将其标记为失败。
2)“超时”也可用于性能测试,以确保方法在合理的时间内返回。
3.4.2 超时测试Demo
1.创建Demo目录如下:
2.创建TestTimeout测试类:
3.5 忽略测试
3.5.1 忽略测试介绍
1)当编写的测试方法为准备就绪,并且测试用例要测试该方法/代码是否失败(或成功)。注释@Test(enabled= false)有助于禁用此测试用例。如果使用@Test(enabled= false)注释在测试方法上,则会绕过这个未准备好测试的测试用例。
2)默认情况下,注释为@Test等价于@Test(enabled=true)
3.5.2 忽略测试Demo
1.创建Demo目录如下:
2.创建TestIgnore测试类:
3.6 预期异常测试
3.6.1 预期异常测试介绍
1)TestNG可以简单方便的检测异常的发生,通过@expectedExceptions标注预期捕获的异常,当确实发生预期的异常,TestNG认为测试通过。也可以指定标注多个异常。
3.6.2 预期异常测试Demo
1.创建Demo目录如下:
2.创建测试对象类Order
2.创建业务对象类OrderBo:
3.创建三个Exception异常
4.运行时异常测试类TestRuntime:
5.检查异常测试TestCheckedException:
3.7 参数测试
3.7.1 参数化测试介绍
1)TestNG中参数化测试允许开发人员使用不同的值一次又一次地运行相同的测试。
2)TestNG可以通过两种不同的方式将参数直接传递给测试方法:
使用testng.xml即XML文件;
使用数据提供者@DataProvider;
3.7.2 参数化测试Demo
1.创建Demo目录如下
2.添加mysq-connector的Maven依赖包:
(1)使用XML传递参数
1.创建参数测试类TestParameterXML:
2.创建db.properties属性文件:
3.创建tesng_parameterTest.xml文件进行参数化测试:
(2)通过@DataProvider传递参数
1.创建测试类TestParameterDataProvider,传递一个int参数
2.创建一个测试类TestParameterDataProvider2,传递一个对象
运行结果:
(3)通过@DataProvider+方法的方式传递参数
1.创建一个测试类TestParameterDataProvider3,根据测试方法名称传递不同的参数
(4)使用@DataProvider+ITestContext传递参数
1.创建测试类TestParameterDataProvider4,根据包含的分组名称传递参数
2.创建testng_ITestContext.xml文件进行测试:
4 总结
1)学会套件测试的方式(主要是利用xml文件进行配置);
2)学会指定包名进行套件测试;
3)学会@BeforeGroups(groups=?)和@AfterGroups(groups=())的使用;
4)学会分组测试中,在xml文件中include和exclude的使用;
5)学会依赖测试(@Test(dependsOnMethods=?)和@Test(dependsOnGroups=?)的使用);
6)学会超时测试;
7) 学会忽略测试(通过@Test(enabled=false)可以进行测试方法的忽略,默认情况下是true);
8)学会预期异常测试(@Test(expectedExceptions=?)的使用);
9)学会参数化测试(使用XML传递参数,熟悉@Test(dataProvider="xxx")和@DataProvider(name="xxx")的使用;
testNG单元测试学习相关推荐
- Qt程序单元测试学习记录
7月比较忙,很少更新博客,上旬任务是给公司原来的程序做简单的单元测试.毕业这两年写过很多代码,从来没有注意过单元测试这东西,现在开始认真对待,开始看别人写的文章来学习.这里记录下最近学到的,以及自 ...
- TestNG单元测试实战
TestNG单元测试实战 单元测试是什么 对软件中最小可测试单元进行验证.小到一个方法,大到一个类.一个模块.都可以用单元测试覆盖. 单元测试有必要写吗 现状: 面对日复一日排满的需求,没有时间去写. ...
- Android 单元测试学习计划
网上查了一下Android单元测试相关的知识点,总结了一个学习步骤: 1. 什么是单元测试 2. 单元测试正反面: 2.1. 重要性 2.2. 缺陷 2.3. 策略 3. 单元测试的基础知识: 3.1 ...
- surefire 拉起testng单元测试类的源码流程阅读(二)
这里是基于surefire 2.19.1版本分析的. 还是根据surefire 拉起单元测试执行报错的日志展示的执行过程分析 java.lang.instrument.IllegalClassForm ...
- surefire 拉起testng单元测试类的源码流程阅读(一)
这里分析是基于2.5surefire 版本. 首先拿surefire 拉起单元测试报错日志 分析: Caused by: java.io.IOException: Error while instru ...
- Java接口自动化之TestNG单元测试框架(一)
上一篇Java接口自动化系列文章:Java接口自动化之log4j日志框架,主要介绍log4j日志介绍.日志三大组成部分及日志实战. 以下主要介绍TestNG的简介.@Test注解及其属性. 01 Te ...
- Android单元测试学习总结
文章目录 一.本地单元测试 1. 创建测试类 2. Assert类中的常用断言方法 3. 运行测试类 4. 运行单个测试方法或多个测试类 二.Mockito测试框架的使用 1. Mock概念的理解 2 ...
- Go单元测试学习笔记 V1.0
与你相识 博主介绍: – 本人是普通大学生一枚,每天钻研计算机技能,CSDN主要分享一些技术内容,因我常常去寻找资料,不经常能找到合适的,精品的,全面的内容,导致我花费了大量的时间,所以会将摸索的内容 ...
- GoogleTest单元测试学习
一.GTest简介 GoogleTest是一个单元测试的框架. 单元测试: 单元测试在函数在整个工程运行起来之前,对该函数进行测试,来判断当前函数能否达到预期的效果. 使用GoogleTest: 1. ...
最新文章
- 设计模式之Dynamic Proxy-动态代理
- 作为程序员,这些梗你都答得上来吗?
- html如何设置图片循环旋转动画效果,如何使用css3实现图片自动旋转的特效(完整代码)...
- 重磅公开!36个高考数学破题大招
- git 怎么拉去分支代码_Git使用技巧1——代码写错分支了怎么办?
- CCF推荐各种国际学术会议和期刊目录
- python装饰器简单理解_python装饰器的简单理解
- java正式测试数据隔离,开发环境要不要和测试环境隔离?
- 《计算机小常识》一不小心把windows资源管理器给结束任务了,电脑黑屏了怎么办?
- x[:,n]或者x[n,:]的用法
- 在Azure Cloud Service中部署Java Web App(2)
- mycat 读写分离 处理延时
- 千年3 『自动杀猪·无限挂』千年3脚本 千年3外挂
- 第八届“图灵杯”NEUQ-ACM程序设计竞赛(全题解详细)
- Zephyr events
- 贝尔-S-010W-A-芯片RK3228B卡刷固件
- dio设置自定义post请求_强大的dio封装,可能满足你的一切需要
- RNA核糖核酸修饰荧光染料|HiLyte Fluor 488/555/594/647/680/750标记RNA核糖核酸
- 神策数据埋点简单使用
- Android平台页面路由框架ARouter原理
热门文章
- Vue2+WebPack2使用css/sass+postcss的autoprefixer
- [Unity] AnimationEvent 的 receiver 需要继承 Mono
- 深度优先搜索(解题剑指Offer12、13)
- C++算法三:选择排序
- mui 图片预览(自定义)功能 - 案例篇
- GBK、UTF-8 快速转码工具 —— Notepad++
- java aes mysql blob_使用带有ORDER子句的AES_DECRYPT在MySQL中返回BLOB数据
- open with code 报错没有项目_Python开发:解决Ubuntu安装tesserocr报错
- python3 音乐播放器_Python3——MP3播放器
- Java快速入门学习笔记2 | Java语言中的基本类型