Java自动化测试框架--TestNG详解
一. 什么是TestNG
TestNG是一个开源的自动化测试框架,它受JUnit和NUnit启发,其中“NG”即表示Next Generation,其功能更强大使用更方便。
二. TestNG配置
2.1 POM文件配置
在maven工程的pom.xml文件中加入以下依赖:
<dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.14.2</version></dependency>
2.2 TestNG插件安装
三. 用例运行方法
3.1 单个用例
选中该用例->右键,Run As ->TestNG Test

3.2 单个类的用例
打开类文件,空白处右键,Run As ->TestNG Test
和单个用例一样,不同之处只是在类文件里空白处点击右键。此操作会执行该类下所有的测试用例。
3.3 多个类的用例(Test Suite)
使用testng.xml文件,该文件用来管理测试用例,并运行testNG。
<suite>:套件就是将所有的测试类整理在一块,形成一套测试用例
<test>:测试集是指测试模块,一般一个项目可以按照模块分为几部分,即不同的test
<classes>:测试集下的所有测试类
<class>:具体测试类,name 属性指定测试类的路径
<methods>:测试类下具体的测试方法,如果不写此标签则默认包含测试类下的所有方法。
举例,本文的testng.xml内容如下:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="testng test" parallel="false"><test name="API test"><classes><class name="com.apitest.APITest"/><class name="com.apitest.APITest2"/></classes></test><test name="GUI test"><classes><class name="com.seletest.FirstWebTest"/></classes></test></suite>
注:<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 必须要添加,这是testng.xml文件的规范要求。
运行结果如下:

四. TestNG注解
4.1 Before/After注解

4.2 Test注解
@Test 注解的作用很简单,即用来标识当前方法是测试方法。它可以加很多参数:
1) denpendsOnMethonds: 用来设置用例依赖。
@Testpublic void apitest01() {System.out.println("in APITest, apitest01");Assert.assertEquals(false,true);}@Test(dependsOnMethods= {"apitest01"})public void apitest02() {System.out.println("in APITest, apitest02");}
如上的两个用例,apitest01执行通过,则执行apitest02;如果apitest01执行失败,则apitest02直接跳过,不会执行:

2) alwaysRun:默认是false,设置为true时,无论什么情况都会运行。一般和dependsOnMethods结合。
@Testpublic void apitest01() {System.out.println("in APITest, apitest01");Assert.assertEquals(false,true);}@Test(dependsOnMethods= {"apitest01"},alwaysRun=true)public void apitest02() {System.out.println("in APITest, apitest02");}
如上的两个用例,不管apitest01是否失败,apitest02都运行。运行结果如下:

3) enabled:默认是true,设置为false时表示用例失效(即不运行)。使用方法:
@Test(enabled=false)
4) Priority:设置用例运行的优先级。默认是0,优先级P0最高,其次是P1;高优先级的用例优先运行
@Test(priority=3)public void apitest01() {System.out.println("in APITest, apitest01 -- P3 ");//Assert.assertEquals(false,true);}@Test(priority=2)public void apitest02() {System.out.println("in APITest, apitest02 -- P2");}@Test(priority=1)public void apitest03() {System.out.println("in APITest, apitest03 -- P1");}
上述用例的运行结果如下:

5)timeOut:指定测试方法执行的超时时间,如果超过指定的毫秒数,则认为执行失败并终止执行抛出异常。使用方法:
@Test(timeOut = 1000)
6)Groups: 指定用例所属的组,一般是对用例进行逻辑划分,譬如只想执行一部分用例,例如冒烟测试,可以定义一个冒烟用例集:
@Test(groups="smoke")public void apitest01() {System.out.println("in APITest, apitest01 -- P3 ");//Assert.assertEquals(false,true);}@Test(groups="regression")public void apitest02() {System.out.println("in APITest, apitest02 -- P2");}@Test()public void apitest03() {System.out.println("in APITest, apitest03 -- P1");}
注意,group需要在testng.xml中加入以下配置:

则运行结果如下,即“API test”中,只有属于smoke组的用例才会执行:
五. 用例的传参
即给测试方法传递参数,更进一步说,如何实现数据-脚本的分离。
5.1 Parameters
需要首先在testng.xml里设置,注意此时必须通过testng.xml来运行,否则找不到parameter。

@Test()@Parameters({"name","age"})public void apitest01(String name, int age) {System.out.println("in APITest, apitest01");System.out.println(name + "'s age is: " + age + ".");}
运行结果如下:

这种方式传参缺点很明显:
·只能通过testng.xml来运行,不够灵活
· 只能传递基础类型的参数
· 只能传递一组参数
5.2 DataProvider
DataProvider是更灵活更强大的参数传递方式。它支持各种数据类型的参数,可以传递多组参数。其返回值类型是Object类型的二维数组,定义如下:
@DataProvider(name="paraDatas")public Object[][] paraDatas(){Object[][] paras = {{"zhang san", 20},{"li si", 21},{"wang wu", 22}};return paras;}
在测试用例的Test方法里,使用方法如下:
@Test(dataProvider = "paraDatas")public void apitest01(String name, int age) {System.out.println("in APITest, apitest01");System.out.println(name + "'s age is: " + age + ".");}
运行结果如下:

DataProvider比较灵活且强大,但它也有局限,即实际上还是在代码中hardcode的方式。如果多一种情况,还需要修改case(paraDatas)。
5.3 POI技术
Apache POI 是基于 Office Open XML 标准(OOXML)和 Microsoft 的 OLE 2 复合文档格式(OLE2)处理各种文件格式的开源项目。简而言之,可以使用 Java 读写 MS Excel 文件,可以使用 Java 读写 MS Word 和 MS PowerPoint 文件。
本质上它还是使用DataProvider的方式传参,但可以真正实现数据-脚本的分离。
这里不多讲了~
此外还可以将数据库查询的结果作为参数传递,但本质是一样的。
六. 思考与总结
testNG还有很多很强大的机制,例如用例失败重试,需要实现IRetryAnalyzer接口,相比其他参数的使用,其稍微复杂一些,有空了再搞吧~
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】


相关文章:
Java自动化测试框架--TestNG详解
一. 什么是TestNG TestNG是一个开源的自动化测试框架,它受JUnit和NUnit启发,其中“NG”即表示Next Generation,其功能更强大使用更方便。 二. TestNG配置 2.1 POM文件配置 在maven工程的pom.xml文件中加入以下依赖: <depe…...
【分布式 | 第五篇】何为分布式?分布式锁?和微服务关系?
文章目录 5.何为分布式?分布式锁?和微服务关系?5.1何为分布式?5.1.1定义5.1.2例子5.1.3优缺点(1)优点(2)缺点 5.2何为分布式锁?5.2.1定义5.2.2必要性 5.3区分分布式和微服…...
JavaScript百炼成仙自学笔记——13
函数七重关之六(“new”一个函数) 看个代码: function hello(){console.log(this); } 1、this:也是JavaScript中的一个关键字,永远指向当前函数的调用者 解释一下,有两层意思: ①this要嘛不出现&#…...
【skill】小米10让app永驻后台
小米10(国行), 8128不能让app驻留后台我也忍了,但是12256依然如此,各种尝试,全网检索不杀app的方法,除了在系统设置里调,什么adb、shizuku冰箱冰柜的没一个能用 系统版本试过国行版…...
《架构风清扬-Java面试系列第29讲》聊聊DelayQueue的使用场景
DelayQueue是BlockingQueue接口的一个实现类之一 这个属于基础性问题,老规矩,我们将从使用场景和代码示例来进行讲解 来,思考片刻,给出你的答案 1,使用场景 实现:延迟队列,其中元素只有在其预定…...
说说SpringBoot自动配置原理
Spring Boot的自动配置原理可以概括为:通过读取jar包中的配置信息,并根据项目依赖和条件注解自动配置应用程序所需的bean,从而减少手动配置的工作量。 第一、代码入口 SpringBootApplication 👇 EnableAutoConfiguration &#…...
bash: docker-compose: 未找到命令
bash: docker-compose: 未找到命令 在一台新的服务器上使用 docker-compose 命令时,报错说 docker-compose 命令找不到,在网上试了一些安装方法,良莠不齐,所以在这块整理一下,如何正确快速的安装 docker-compose cd…...
linux 权限和权限的设置
在Linux中,文件和目录的权限是一个重要的安全特性。这些权限决定了哪些用户可以读取、写入或执行某个文件或目录。以下是关于Linux权限和如何设置它们的基本信息。 权限类型 Linux中有三种基本的权限类型: 读取(r):…...
基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…...
springboot3项目练习详细步骤(第一部分:用户业务模块)
目录 环境准备 用户模块 注册 注册接口文档 编辑 实现结构 Spring Validation 登录 登录的接口文档 实现登录逻辑 JWT令牌 完善登录认证 拦截器 获取用户详细信息 接口文档 Usercontroller类中编写方法接口 忽略属性返回 优化代码ThreadLocal 更新用户基本信…...
推荐算法顶会论文博客笔记合集
小小挖掘机学习笔记 https://mp.weixin.qq.com/s/rp2xXueEyT8IKvTr2Qss3A 推荐系统学习笔记 https://blog.csdn.net/wuzhongqiang/category_10128687.html SIGIR SIGIR 2022 | 推荐系统相关论文分类整理:8.74 https://mp.weixin.qq.com/s/vH0qJ-jGHL7s5wSn7Oy…...
DRM/RESP无法连接linux上redis的原因
问题一: redis.conf配置文件 进入到自己的redis软件目录 vim redis.conf 将bind 127.0.0.1 : 1 注释掉,改成bind 0.0.0.0,让远程所有ip都可以访问 将daemonize yes 守护进程,修改后可在后台运行 protected-mod…...
vim怎么选中多行后在头部插入#(随手记)
方法1 进入可视行模式: 按下 V(大写 V),选中整行,包括行尾空白字符。使用 v(小写 v),然后移动光标选择从行中间开始的多行。 插入 #: 选中多行后,使用 I&…...
Objective-C的对象复制与拷贝选项
对象复制与拷贝 文章目录 对象复制与拷贝copy与mutablecopycopy与mutablecopy的简介示例:不可变对象的复制可变对象的复制 NSCopying和NSMutableCopying协议深复刻和浅复刻浅拷贝(Shallow Copy):深拷贝(Deep Copy&…...
HTML5 中的离线缓存机制,即应用缓存(Application Cache 或 AppCache)已被废弃并正在被逐步移除
HTML5 中的离线缓存机制,即应用缓存(Application Cache 或 AppCache)已被废弃并正在被逐步移除。这是因为应用缓存存在一些设计上的缺陷和限制,导致它在实际应用中经常出现问题。 取而代之的是一种更强大、更灵活的技术——Servi…...
vue3+ant design实现表格数据导出Excel
提示:实现表格数据导出Excel 文章目录 前言 一、安装ant design? 二、引用ant design 1.搭建框架 2.获取表格数据 三、封装导出表格的代码 四、导出 1.获取导出地址 2.在下载导出事件中添加导出代码 五、全部代码 前言 今天终于有时间来更新文章了,最近公司项目比较紧…...
VBA_NZ系列工具NZ06:VBA创建PDF文件说明
我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑,这么多知识点该如何组织…...
Git === Git概述 Git安装
第1章 Git概述 Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。 Git易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion…...
Linux diff命令(比较两个文件或目录的内容差异)
文章目录 Linux diff 命令详解教程基本用法比较文件输出解释 递归比较(-r)示例代码 控制输出格式统一格式(-u)上下文格式(-c) 高级选项忽略所有空白差异(-w)仅报告文件是否不同 Linu…...
从传统到现代:水表的远程抄表革命
1.引言:技术驱动的转型 在过去的几十年里,我们的生活方式被科技的快速发展深深影响,其中就包括了公用设施的管理方式。传统水表的远程抄表系统就是这样一个例子,它将老旧的手动抄表模式转变为高效、精确的自动化系统。 2.传统水…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
