欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java优秀测试框架TestNG详解

程序员文章站 2024-02-19 09:37:10
我们为什么需要testng?java有好几个测试框架,junit是比较常见的一个,spring系列默认的测试框架就是junit。testng也是java的一个测试框架,与junit功能类似, 但支持更...

我们为什么需要testng?

java有好几个测试框架,junit是比较常见的一个,spring系列默认的测试框架就是junit。testng也是java的一个测试框架,与junit功能类似, 但支持更多的注解与功能。

我们常使用junit做单元测试,而在做自动化测试时,更偏向于选择testng。

testng搭建

maven工程中,添加testng依赖包即可,可自行选择版本:

testng注解及功能

testng的注解与junit类似,但会更丰富,更细致:

注解 描述
@test 标记一个类里所有的public void方法,或某个方法,作为测试案例。
@beforesuite 对于套件测试,在此套件中的所有测试执行之前运行,仅运行一次。
@aftersuite 对于套件测试,在此套件中的所有测试执行之后运行,仅运行一次。
@beforeclass 在调用当前类之前运行,只运行一次。
@afterclass 在调用当前类之后运行,只运行一次。
@beforetest 对于套件测试,在属于标签内的所有类的测试方法执行之前运行。
@aftertest 对于套件测试,在属于标签内的所有类的测试方法都已执行完之后运行。
@beforegroups 在调用属于该组的第一个测试方法之前运行。
@aftergroups 在调用属于该组的最后一个测试方法执行之后运行 。
@beforemethod 注解的方法将每个测试方法之前运行。
@aftermethod 在每个测试方法执行之前都会运行。
@dataprovider 标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个object[] [],其中每个对象[]的测试方法的参数列表中可以分配。该@test 方法,希望从这个dataprovider的接收数据,需要使用一个dataprovider名称等于这个注解的名字。
@factory 作为一个工厂,返回testng的测试类的对象将被用于标记的方法。该方法必须返回object[]。
@listeners 定义一个测试类的监听器。
@parameters 用于将参数传递给@test方法。

testng配置文件

对比junit,testng最显眼的区别就是多了一个配置文件。

有了这个配置文件的存在,可以更方便的管理测试案例的执行。

1.新增配置文件

在项目根目录下,新增testng.xml格式的配置文件,文件名任意,配置文件可以有多个。

maven工程在pom文件中,指定配置文件路径后,可以直接运行配置文件:

testng配置的内容并不复杂,这里的配置并不是testng启动的依赖,而是对测试案例的执行方式进行划分。

2.配置测试套件(suit)

一个配置文件,有且只能有一个测试套件。suit标签的常见属性如下,其中name为强制填写的,会展示在最终的测试报告中。

属性 描述
name 套件的名称,这是一个强制属性
verbose 运行的级别或详细程度,级别为0-10,其中10最详细
parallel testng是否运行不同的线程来运行这个套件,默认为none,其他级别为methods、tests、classes、instances
thread-count 如果启用并行模式(忽略其他方式),则为使用的线程数
annotations 在测试中使用的注释类型
time-out 在本测试中的所有测试方法上使用的默认超时
preserve-order 用于配置测试案例是否按顺序执行

3.配置测试案例

按照groups组进行划分(使用了@test (groups={“group1”})进行注解的),include标签标注的组名会被执行,被exclude标注的组则不会被执行:

按照包、类、方法三个层级划分:

包:

类:

方法:

完整配置示例:

配置完成后,可以直接运行配置文件,以执行测试案例。也可以通过maven-lifecycle的test命令执行。

Java优秀测试框架TestNG详解

testng测试

1.异常测试

预期异常测试通过在@test注解后加入预期的exception来进行添加,示例如下:

2.忽略测试

有时候我们写的用例没准备好,或者该次测试不想运行此用例,那么删掉显然不明智,那么就可以通过注解@test(enabled = false)来将其忽略掉,此用例就不会运行了,如下范例:

3.超时测试

“超时”表示如果单元测试花费的时间超过指定的毫秒数,那么testng将会中止它并将其标记为失败。此项常用于性能测试。如下为一个范例:

4.参数化测试

4.1 使用xml配置文件提供

代码如下:

xml配置如下:

4.2 使用@dataprovider传递参数

此处需要注意,传参的类型必须要一致,且带有@dataprovider注解的函数返回的必然是object[][],此处需要注意。当提供多组数据时,测试案例则会执行相应次数。

5.依赖测试

有时候,我们需要按顺序来调用测试用例,那么测试用例之间就存在依赖关系。 testng支持测试用例之间的依赖,使用dependonmethods和dependsongroups来实现依赖测试。如下案例,testnglearn1()案例失败时,testnglearn2()案例则不会执行:

testng测试报告

使用maven执行完测试用例后,会在 工程根目录\target\surefire-reports 目录下,生成测试报告文件,点击index.html文件则可以在浏览器中查看。

这里的报告比较简单,不够美观。我们可以结合allure插件,生成更美观的测试报告。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!