TestNG注释
目录
TestNG注释列表
@BeforeXXX和@AfterXXX注释放在超类上时如何工作?
使用@BeforeXXX和@AfterXXX TestNG注释
TestNG是一个测试框架,旨在简化广泛的测试需求,从单元测试(隔离测试一个类)到集成测试(测试由几个类、几个包甚至几个外部框架组成的整个系统,如应用程序服务器)。
在TestNG中,NG代表下一代测试
TestNG为我们提供了许多注释,允许在某个点之前和之后执行一些Java逻辑以及更多。
那么,什么是注解呢?注释是元数据的一种形式,它提供有关程序的数据,而这些数据不是程序本身的一部分。注释对它们所注释的代码的操作没有直接影响。
TestNG注释列表
| 注释名称 | 它有什么用? |
|---|---|
| @BeforeSuite | 带注释的方法将在此套件中的所有测试运行之前运行 |
| @AfterSuite | 带注释的方法将在此套件中的所有测试运行之后运行。 |
| @BeforeTest | 带注释的方法将在任何属于标记中的类的测试方法运行之前运行<test>。 |
| @测试后 | 带注释的方法将在所有属于标记中的类的测试方法运行之后运行<test>。 |
| @BeforeGroups | 此配置方法将在其之前运行的组的列表。此方法保证在调用属于任何这些组的第一个测试方法之前不久运行。 |
| @AfterGroups | 此配置方法将在其之后运行的组的列表。此方法保证在调用属于这些组中任何一个的最后一个测试方法后不久运行。 |
| @BeforeClass | 带注释的方法将在调用当前类中的第一个测试方法之前运行。 |
| @AfterClass | 带注释的方法将在当前类中的所有测试方法运行之后运行。 |
| @BeforeMethod | 注释方法将在每个测试方法之前运行。 |
| @AfterMethod | 注释方法将在每个测试方法之后运行。 |
| @DataProvider | 将方法标记为提供测试方法的数据。带注释的方法必须返回一个Object[][],其中每个Object[]可以被分配测试方法的参数列表。想要从这个DataProvider接收数据的@Test方法需要使用一个与这个annotation的名称相等的dataProvider名称。 |
| @Factory | 将方法标记为工厂,该工厂返回将由TestNG用作Test类的对象。方法必须返回Object[]。 |
| @Listeners | 定义测试类上的侦听器。 |
| @Parameters | 描述如何将参数传递给@Test方法。 |
| @Test | Marks a class or a method as part of the test. |
@BeforeXXX和@AfterXXX注释放在超类上时如何工作?
如果将这些注释放在超类上,则子类也将继承这些注释。这对于将多个测试类的测试设置集中在一个公共超类中非常有用。在这种情况下,TestNG保证@Before方法按照继承顺序执行(首先是最高的超类,然后沿着继承链向下),而@After方法则按照相反的顺序执行(沿着继承链向上)。
现在,我们将创建两个类,其中CodekruTest将是CodekruTestSubclass的超类,并具有以下结构

CodekruTest.java
package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;public class CodekruTest {@BeforeClasspublic void beforeSuperClassMethod() {System.out.println("In before method of Superclass");Assert.assertTrue(true);}@AfterClasspublic void AfterSuperClassMethod() {System.out.println("In after method of Superclass");Assert.assertTrue(true);}}
CodekruTestSubclass.java
package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;public class CodekruTestSubclass extends CodekruTest {@BeforeClasspublic void beforeSubClassMethod() {System.out.println("In before method of Subclass");Assert.assertTrue(true);}@AfterClasspublic void AfterSubClassMethod() {System.out.println("In after method of Subclass");Assert.assertTrue(true);}@Testpublic void test() {System.out.println("Executing the test");Assert.assertTrue(true);}}
现在,我们将只运行CodekruTestSubclass,看看会发生什么。下面是用于此的testng.xml
<suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTestSubclass" /></classes></test>
</suite>
输出-
In before method of Superclass
In before method of Subclass
Executing the test
In after method of Subclass
In after method of Superclass===============================================
codekru
Total tests run: 1, Failures: 0, Skips: 0
===============================================
因此,我们可以看到超类的before方法首先运行,after方法随后运行。
使用@BeforeXXX和@AfterXXX TestNG注释
层级是-
- @BeforeSuite
- @BeforeTest
- @BeforeClass
- @BeforeMethod
- @测试
- @AfterMethod
- @AfterClass
- @AfterTest
- @AfterSuite
下面是一个小例子,以演示上述层级-
package Test;import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;public class CodekruTest {@BeforeSuitepublic void beforeSuiteMethod() {System.out.println("before Suite");Assert.assertTrue(true);}@BeforeTestpublic void beforeTestMethod() {System.out.println("before Test");Assert.assertTrue(true);}@BeforeClasspublic void beforeClassMethod() {System.out.println("before Class");Assert.assertTrue(true);}@BeforeMethodpublic void beforeMethod() {System.out.println("before Method");Assert.assertTrue(true);}@AfterSuitepublic void afterSuiteMethod() {System.out.println("after Suite");Assert.assertTrue(true);}@AfterTestpublic void afterTestMethod() {System.out.println("after Test");Assert.assertTrue(true);}@AfterClasspublic void afterClassMethod() {System.out.println("after Class");Assert.assertTrue(true);}@AfterMethodpublic void afterMethod() {System.out.println("after Method");Assert.assertTrue(true);}@Test()public void test() {System.out.println("Executing the test");Assert.assertTrue(true);}}
现在,我们将在testng.xml文件下面运行,看看会发生什么以及输出的打印顺序
<suite name="codekru"><test name="codekru"><classes><class name="Test.CodekruTest" /></classes></test>
</suite>
输出-
before Suite
before Test
before Class
before Method
Executing the test
after Method
after Class
after Test
after Suite===============================================
codekru
Total tests run: 1, Failures: 0, Skips: 0相关文章:
TestNG注释
目录 TestNG注释列表 BeforeXXX和AfterXXX注释放在超类上时如何工作? 使用BeforeXXX和AfterXXX TestNG注释 TestNG是一个测试框架,旨在简化广泛的测试需求,从单元测试(隔离测试一个类)到集成测试(测试由…...
数据预处理 matlab 数据质量评估
知乎 数据类型转换等 Mathworks 数据预处理 概念辨析 配对是同一批样本的前后比较,独立是两批不同样本的的比较 独立样本是指我们得到的样本是相互独立的。配对样本就是一个样本中的数据与另一个样本中的数据相对应的两个样本。配对样本可以消除由于样本指定的不公…...
对象存储, 开源MinIO docker-compose.yml 文件
文章目录 python SDK 文档地址:docker-compose.yml 文件控制台使用:应用服务中使用样例: python SDK 文档地址: https://min.io/docs/minio/linux/developers/python/API.html docker-compose.yml 文件 version: 3services:min…...
爬虫笔记(一):实战登录古诗文网站
需求:登录古诗文网站,账号+密码+图形验证码 第一:自己注册一个账号+密码哈 第二:图形验证码,需要一个打码平台(充钱,超能力power!)或…...
适用于 Windows 11 的 12 个最佳免费 PDF 编辑器
除了绘图等基本功能外,一些适用于 Windows 11 的免费 PDF 编辑器还具有 AI、OCR 识别和书签等高级功能。 我们的列表包含易于立即下载的 PDF 编辑软件工具。 这些工具不仅可以帮助转换 PDF、编辑、上传、删除、裁剪、分割、提取等。 PDF 是指便携式文档格式&…...
力扣每日一练(24-1-18)
经验一:不要把问题想复杂 Python: min_price float(inf)max_profit 0for price in prices:min_price min(min_price, price)max_profit max(max_profit, price - min_price)return max_profit C#: public int MaxProfit(int[] prices) {i…...
MyBatis 使用报错:org.xml.sax.SAXParseException 元素内容必须由格式正确的字符数据或标记组成
文章目录 前言问题分析解决方案方案一:使用 CDATA 区块,依然使用 “ > ” 或者 “ < ”方案二:使用转义字符 个人简介 前言 今天在使用 MyBatis 时出现报错: Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式…...
PDF.js - 免费开源的 JavaScript 读取、显示 PDF 文档的工具库,由 Mozilla 开发并且持续维护
最近新项目需要处理 PDF,研究了 PDf.js 之后觉得很不错,于是写篇文章推荐给大家。 PDF.js 的功能和它的名字一样简单,是一个使用 HTML5 技术来让前端网页支持读取、解析和显示 PDF 文档的 JS 工具库。这个项目由大名鼎鼎的 Mozilla 组织开发…...
UI开发布局-HarmonyOS应用UI开发布局
UI页面的构建不用再像Android开发过程中在.xml文件中书写,可直接在页面上使用声明式UI的方式按照布局进行排列,构建应用的页面。 如下代码使用Row、Column构建一个页面布局,在页面布局中添加组件Text、Button,共同构成页面&#…...
大数据开发之Hadoop(完整版+练习)
第 1 章:Hadoop概述 1.1 Hadoop是什么 1、Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 2、主要解决,海量数据的存储和海量数据的分析计算问题。 3、Hadoop通常是指一个更广泛的概念-Hadoop生态圈 1.2 Hadoop优势(4高…...
Redis与DB数据一致性-个人总结
缓存读写策略: Cache-Aside Pattern 读缓存: 先查询缓存,存在则返回, 如果不存在则查询DB, 再塞回缓存中,最后返回结果. 写缓存: 更新完成DB之后,删除缓存. 适合场景: 读比较多的场景,更新比较少的场景. 像我们工作当中&#…...
VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络
VMware workstation安装debian-12.1.0虚拟机(最小化安装)并配置网络 Debian 是一个完全自由的操作系统!Debian 有一个由普罗大众组成的社区!该文档适用于在VMware workstation平台安装最小化安装debian-12.1.0虚拟机。 1.安装准…...
SG-9101CGA(汽车+125°C可编程晶体振荡器)
SG-9101CGA是用于汽车CMOS输出的可编程晶体振荡器,彩用2.5 x 2.0 (mm)封装,0.67 MHz至170 MHz频率范围、工作温度范围为-40℃~125℃,符合车规级晶振,无铅,绿色环保,满足汽车工业标准,电源电压范…...
第十五届蓝桥杯单片机组备赛——独立键盘矩阵键盘
文章目录 一、按键原理二、独立键盘&矩阵键盘2.1 独立按键2.2 矩阵键盘2.2.1 列扫描2.2.2 行扫描2.2.3 代码实现(行扫描实现) 三、矩阵键盘注意事项3.1 为什么要设置C1C2C3C413.2 按键消抖 一、按键原理 原理很简单,当我们没有按下SW2时,由于上拉电阻…...
HCIA—— 16每日一讲:HTTP和HTTPS、无状态和cookie、持久连接和管线化、(初稿丢了,这是新稿,请宽恕我)
学习目标: HTTP和HTTPS、无状态和cookie、持久连接和管线化、HTTP的报文、URI和URL(初稿丢了,这是新稿,请宽恕我😶🌫️) 学习内容: HTTP无状态和cookieHTTPS持久连接和管线化 目…...
使用JavaScript实现一个复杂功能:日期范围选择器
日期范围选择器是一个常见的Web应用功能,它允许用户选择一个日期范围。在本篇文章中,我们将使用JavaScript来实现这个功能。 一、实现思路 创建一个开始日期输入框和一个结束日期输入框。 添加事件监听器,监听开始日期输入框和结束日期输入…...
[C#]winform部署openvino调用padleocr模型
【官方框架地址】 https://github.com/PaddlePaddle/PaddleOCR 【算法介绍】 OpenVINO和PaddleOCR都是用于计算机视觉应用的工具,但它们有不同的特点和用途。OpenVINO是一个由Intel开发的开源工具套件,主要用于加速深度学习推理,而PaddleOC…...
【docker-compose】【nginx】内网环境https配置
目录 1、openssl生成自签名证书和私钥2、nginx.conf配置ssl3、docker-compose挂载 1、openssl生成自签名证书和私钥 在部署服务器上,新建cert目录,执行以下指令,然后生成.crt和.key文件 openssl req -newkey rsa:2048 -nodes -keyout rsa_pri…...
大语言模型无代码构建知识图谱概述
2023年3月15日,ChatGPT4.0的横空出世,将人们对大语言模型的关注推到了风口浪尖。由于其在智能问答、翻译以及文本生成等工作任务上的卓越表现,业界一度出现了不再需要发展知识图谱相关技术的观点,知识图谱相关概念严重受挫。无可置…...
链表回文结构
链表回文结构 编写一个函数,检查输入的链表是否是回文的。 示例 1: 输入: 1->2 输出: false 示例 2: 输入: 1->2->2->1 输出: true 链表的回文结构,应该先找到中间节…...
基于YOLOv11深度学习的花卉识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
一、项目介绍 花卉识别是计算机视觉在植物学领域的重要应用方向,对于植物分类研究、生态保护、园林管理等领域具有重要意义。然而,由于花卉种类繁多、形态各异,且受光照、角度、遮挡等因素影响,传统方法难以实现高效准确的识别。…...
【技术突破】douyin-downloader:重新定义抖音内容采集效率的智能引擎
【技术突破】douyin-downloader:重新定义抖音内容采集效率的智能引擎 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser …...
三角函数公式速查手册:从基础到进阶的实用指南
三角函数公式速查手册:从基础到进阶的实用指南 三角函数是数学中最基础也最重要的工具之一,无论是学生应对考试,还是开发者在图形编程、信号处理等领域的实际应用,都离不开这些公式的灵活运用。本文将系统整理从基础定义到高级变换…...
通义千问1.5-1.8B-Chat-GPTQ-Int4在MySQL数据库中的智能应用
通义千问1.5-1.8B-Chat-GPTQ-Int4在MySQL数据库中的智能应用 让数据库听懂人话,让查询像聊天一样简单 你有没有遇到过这样的情况:面对复杂的业务数据,明明知道想要什么结果,却不知道怎么写SQL语句?或者看着慢查询日志头…...
告别编译报错!手把手教你用Keil MDK5搭建GD32F103开发环境(含AC5编译器配置)
告别编译报错!手把手教你用Keil MDK5搭建GD32F103开发环境(含AC5编译器配置) 嵌入式开发新手在初次接触GD32F103时,往往会被各种编译报错搞得焦头烂额。特别是从STM32转过来的开发者,本以为操作流程相似,结…...
ai辅助开发,让快马智能生成centos下openclaw安装与配置的疑难解决方案
在CentOS系统上安装和配置OpenClaw这类工具时,经常会遇到各种依赖冲突、环境配置问题,以及需要定制化爬取规则的情况。传统方式下,我们需要手动查阅文档、调试命令,甚至反复尝试不同版本的依赖包,过程相当耗时。而借助…...
MTK手机屏显干扰全解析:亮灭屏、射频干扰与TP失灵,我是如何用PLL_CLOCK和Porch参数解决的
MTK手机屏显干扰全解析:亮灭屏、射频干扰与TP失灵实战解决方案 引言:当屏幕开始"跳舞"——移动设备显示异常背后的复杂世界 那块6.5英寸的OLED屏幕又一次在通话过程中突然闪烁起来,像被无形的幽灵操控着。作为MTK平台驱动开发工程师…...
comsol地热井周期性抽采回灌 浅层地热水利用,非均匀周期循环抽住。 夏季注热抽冷冬季注冷抽...
comsol地热井周期性抽采回灌 浅层地热水利用,非均匀周期循环抽住。 夏季注热抽冷冬季注冷抽热 comsol论文复现,建模指导地热井的周期性调度像极了呼吸运动。我盯着屏幕上跳动的温度场云图,突然意识到这种冷热交替的运作模式,本质上…...
如何用快马平台为网站开发公司快速生成企业官网原型,提升方案演示效率
作为一名经常需要快速响应客户需求的网站开发者,我最近发现了一个能大幅提升工作效率的好方法 - 使用InsCode(快马)平台来生成企业官网原型。这个方法特别适合像我们华网三百每年.cn这样需要快速为客户提供方案演示的网站开发公司。 需求分析阶段 当接到一个新客户…...
pngquant终极内存优化:处理大文件时的10个高效故障排除技巧
pngquant终极内存优化:处理大文件时的10个高效故障排除技巧 【免费下载链接】pngquant Lossy PNG compressor — pngquant command based on libimagequant library 项目地址: https://gitcode.com/gh_mirrors/pn/pngquant 想要高效压缩大型PNG文件却遇到内存…...
