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 注解
注解 | 描述 |
在该套件的所有测试都运行在注释的方法之前,仅运行一次。 | |
在该套件的所有测试都运行在注释方法之后,仅运行一次。 | |
在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。 | |
在调用当前类的第一个测试方法之后运行,注释方法仅运行一次 | |
注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。 | |
注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。 | |
配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。 | |
此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。 | |
注释方法将在每个测试方法之前运行。 | |
注释方法将在每个测试方法之后运行。 | |
标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。 | |
将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []。 | |
定义测试类上的侦听器。 | |
描述如何将参数传递给@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")的使用;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)
2016-07-28 static关键字的使用
2016-07-28 mysql常用操作指令总结
2016-07-28 判断闰年
2016-07-28 一维数组&三维数组
2016-07-28 冒泡排序&乱序输出
2016-07-28 ==和equals()比较
2016-07-28 递归