为什么TestNg会成为Java测试框架的首选?还犹豫什么,看它!

上一篇自动化测试我们大概了解了测试的目标、测试的技术选型以及搭建平台的目标及需求,也确定了自动化测试方案以testNg作为整个测试流程贯穿的基础支持框架,那么testNg究竟有什么特点?本篇开始我们来详细的学习testNg这个测试框架。

图片

为什么要用testNg

  首先我们学习之前,先思考一个问题,java测试的框架很多,为什么要用testNg呢?比如junit,使用的人很多,几乎所有java开发人员都会使用junit作为测试框架,那么我们从以下三个点来大概了解下testNg比起junit不同的地方:

  1.灵活的方法命名

  junit使用过的人应该都知道,申明一个测试方法的传统方式是必须在方法名加一个test前缀,但是限制了测试方法的命名,的确从灵活度的角度来说不太适合,而TestNg完全不限制测试方法名,完全通过注解的方式查找测试方法

  2.方法支持灵活动态传参

  熟悉junit的人肯定知道,junit方法默认不支持传递参数,那么我们为了传递参数给方法,往往会选择其他的所谓设计模式技术,比如有参构造等方式避开构建参数的问题,可以说此种方式几乎断绝了我们使用junit做方法传递,方法连续性调用等集成测试的念头,而testNg则不同,不仅支持方法传递参数,而且支持 DataProvider等动态构建数据的方式(后面介绍),并且还支持方法依赖、组依赖等策略,可以灵活的将不同方法之间组合调用,实现单元测试以及集成测试等

  3.testNg支持多种模式多种扩展

  junit不用多说,仅提供很简单的测试方式,本身提供的扩展能力很弱,在遇到复杂测试或者定制化测试需求的时候,完全无从下手,而testNg支持xml、注解两种配置方式,且两种方式可以混合配置,并且在运行的周期内提供了多个注解和拦截、选择器等扩展机制,可以灵活的扩展和选择排除的方法

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】

图片

第一个testNg测试方法

  介绍了那么多testNg的优点,那么我们开始第一个简单的测试方法编写吧,打开我们上一篇创建的测试工程,我们首先进行一部分的修改,这里我们选择把测试的范围放开,并且将测试方法变成src/main目录下的正常开发代码使用(因为这里将testNg自动化测试作为某个工程项目进行开发迭代),所以我们需要将pom文件中的:

<dependency><groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

  scope范围标签注释掉,这样即可将test模块覆盖到整个工程,接着我们创建一个conf包,用来保存我们整个测试过程中遇到的所有的测试基础配置,现在我们在conf包下创建一个基础类--BaseTestNg,切继承AbstractTestNGSpringContextTests类,这个类可以用来获取测试过程中的运行周期和运行时参数与上下文等操作,这些方法对于扩展测试和负载测试相当重要,现在我们只需要继承即可:

/**

*基础测试父类-用来获取上下文、运行时参数、注入等

*/

public class BaseTestNg extends AbstractTestNGSpringContextTests {

}

  然后创建一个test包,在此包下创建一个demo01类,开始编写一个简单的测试方法吧:

public class demo01 extends BaseTestNg{

       @Test

       public void tDemo(){

             System.out.println("当前运行的是第一个测试方法");

       }

}

  这里需要注意一点,@Test注解使用org.testng.annotations.Test包下的,并且这里可以看到,我们方法命名并没有按照test开头,现在我们运行一下这个方法:

  运行成功了!咦,这个tDemo上面的demo01、test以及Default Suite分别是什么?为什么有这些东西呢?相信细心的你已经发现了,这里需要涉及testNg的一个运行机制,在testNg中会运行一个Suite测试套件,每个套件中可以存在多个test测试模块,并且每个test下可以存在多种策略,比如class或者方法等,但是我们刚才运行的仅仅是tDemo这一个方法而已,所以testNg在启动的时候,会按照默认值的方式,将当前方法挂载在名叫demo01的测试类上,并且将当前测试类挂载在名为test的测试模块上,在所有测试的模块中都会默认挂载在对应的Suite上,这里默认的即Default Suite

图片

测试运行周期

  刚刚我们运行了一个简单的测试方法,那么我们如何做灵活的方法控制呢?比如在测试之前我们需要做一些资源的准备工作,并且在测试完成以后,我们又需要做一些销毁资源释放内存的操作,怎么办?针对这一点,testNg中提供了一系列可以依赖的运行时方法,可以在不同的运行时生命周期中进行执行,目前支持的注解方法如下:

  • @BeforeSuite

  @BeforeSuite注解方法在套件运行之前执行

  • @BeforeTest

  @BeforeTest注解方法在测试用例之前执行

  • @BeforeClass

  @BeforeClass注解方法在测试类运行之前执行

  • @BeforeMethod

  @BeforeMethod注解方法在测试方法运行之前执行

  • @AfterSuite

  @AfterSuite注解方法在测试套件运行结束以后执行

  • @AfterTest

  @AfterTest注解方法在测试用例结束以后执行

  • @AfterClass

  @AfterClass注解方法在测试类运行结束以后执行

  • @AfterMethod

  @AfterMethod注解方法在测试方法运行结束以后执行

  那么,这些注解方法执行顺序是什么呢?与测试用例、测试方法的关系是什么呢?我们来写一个demo测试一下:

/**

*测试运行周期

*/

public class demoTest extends BaseTestNg {

//在套件运行之前执行

@BeforeSuite

public void BeforeSuite(){

System.out.println("BeforeSuite");

}

//在测试用例之前执行

@BeforeTest

public void BeforeTest(){

System.out.println("BeforeTest");

}

//在测试类运行之前执行

@BeforeClass

public void BeforeClass(){

System.out.println("BeforeClass");

}

//在测试方法运行之前执行

@BeforeMethod

public void BeforeMethod(){

System.out.println("BeforeMethod");

}

//在测试套件运行结束以后执行

@AfterSuite

public void AfterSuite(){

System.out.println("AfterSuite");

}

//在测试用例结束以后执行

@AfterTest

public void AfterTest(){

System.out.println("AfterTest");

}

//在测试类运行结束以后执行

@AfterClass

public void AfterClass(){

System.out.println("AfterClass");

}

//在测试方法运行结束以后执行

@AfterMethod

public void AfterMethod(){

System.out.println("AfterMethod");

}

@Test

public void test(){

System.out.println("test");

}

}

  编写以后,我们来运行这个测试方法,可以看到输出结果:

BeforeSuite

BeforeTest

BeforeClass

BeforeMethod

test

AfterMethod

AfterClass

AfterTest

AfterSuite

  可以看出来运行时周期执行顺序为:

BeforeSuite-->BeforeTest-->BeforeClass-->BeforeMethod-->测试方法-->AfterMethod-->AfterClass-- >AfterTest-->AfterSuite

图片

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2808770.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于Android的校园请假App的研究与实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

java面试题之mysql篇

1、数据库索引 ​​​​​​​ 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她&#xff0c;则与在表中搜索所有的行相比&#xff0c;索引有助于更快地获取信息。 索引的一个主要…

protobuf简单使用(二)

介绍 上一节中&#xff0c;我们介绍了protobuf&#xff0c;简单来说&#xff0c;它是一种消息数据格式&#xff0c;其作用类似于json&#xff0c;但是比json的使用效率要高。 除此以外&#xff0c;我们介绍了protobuf的简单使用&#xff0c;也就是如何可以像使用json一样&…

Springboot+vue的社区医疗综合服务平台(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频&#xff1a; Springbootvue的社区医疗综合服务平台&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的社区医疗综合服务平台&#xff0c;采用M&#xff08;m…

五、数组——Java基础篇

六、数组 1、数组元素的遍历 1.1数组的遍历&#xff1a;将数组内的元素展现出来 1、普通for遍历&#xff1a;根据下表获取数组内的元素 2、增强for遍历&#xff1a; for&#xff08;数据元素类型 变量名&#xff1a;数组名&#xff09;{ 变量名&#xff1a;数组内的每一个值…

面试经典150题【21-30】

文章目录 面试经典150题【21-30】6.Z字形变换28.找出字符串中第一个匹配项的下标68.文本左右对齐392.判断子序列167.两数之和11.盛最多水的容器15.三数之和209.长度最小的子数组3.无重复字符的最长子串30.串联所有单词的子串 面试经典150题【21-30】 6.Z字形变换 对于“LEETC…

【Java多线程】对线程池的理解并模拟实现线程池

目录 1、池 1.1、线程池 2、ThreadPoolExecutor 线程池类 3、Executors 工厂类 4、模拟实现线程池 1、池 “池”这个概念见到非常多&#xff0c;例如常量池、数据库连接池、线程池、进程池、内存池。 所谓“池”的概念就是&#xff1a;&#xff08;提高效率&#xff09; 1…

计网day5

六 传输层 6.1 传输层概述 6.2 UDP协议 6.3 TCP协议 TCP连接管理&#xff1a; TCP可靠传输&#xff1a; TCP拥塞控制&#xff1a;

[ROS 系列学习教程] rosbag 命令行介绍

ROS 系列学习教程(总目录) 本文目录 rosbag 命令行1.1 rosbag check1.2 rosbag compress1.3 rosbag decompress1.4 rosbag filter1.5 rosbag fix1.6 rosbag info1.7 rosbag play1.8 rosbag record1.9 rosbag reindex 有时我们需要将 topic 中的数据保存下来以便后面分析&#x…

istio实战:springboot项目在istio中服务调用

目录 一、前言二、准备工作三、问题排查四、总结参考资料 一、前言 在经过前面几天k8s和Istio的安装之后&#xff0c;开始进入最核心的阶段。微服务在抛弃传统的服务注册和服务发现之后&#xff0c;是怎么在istio怎么做服务间的调用的呢&#xff1f;本次实战花费了我2-3天的时…

【监控】grafana图表使用快速上手

目录 1.前言 2.连接 3.图表 4.job和path 5.总结 1.前言 上一篇文章中&#xff0c;我们使用spring actuatorPrometheusgrafana实现了对一个spring boot应用的可视化监控。 【监控】Spring BootPrometheusGrafana实现可视化监控-CSDN博客 其中对grafana只是打开了一下&am…

Seata分布式事务实战AT模式

目录 分布式事务简介 典型的分布式事务应用场景 两阶段提交协议(2PC) 2PC存在的问题 什么是Seata&#xff1f; Seata的三大角色 Seata AT模式的设计思路 一阶段 二阶段 Seata快速开始 Seata Server&#xff08;TC&#xff09;环境搭建 db存储模式Nacos(注册&配…

vue3个人网站电子宠物

预览 具体代码 Attack.gif Attacked.gif Static.gif Walk.gif <template><div class"pet-container" ref"petContainer"><p class"pet-msg">{{ pet.msg }}</p><img ref"petRef" click"debounce(attc…

LemonSqueezy

信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-08 11:22 CST Nmap scan report for 192.168.1.1 Host is up (0.00037s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan r…

论文精读--GPT3

不像GPT2一样追求zero-shot&#xff0c;而换成了few-shot Abstract Recent work has demonstrated substantial gains on many NLP tasks and benchmarks by pre-training on a large corpus of text followed by fine-tuning on a specific task. While typically task-agnos…

基于springboot+vue的校园社团信息管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

306_C++_QT_创建多个tag页面,使用QMdiArea容器控件,每个页面都是一个新的表格[或者其他]页面

程序目的是可以打开多个styles文件(int后缀文件),且是tag样式的(就是可以切多个页面出来,并且能够单独关闭);其中读取ini文件,将其插入到表格中的操作,也是比较复杂的,因为需要保持RGB字符串和前面的说明字符串对齐 ini文件举例: [MainMenu] Foreground\Selected=&…

栈和队列笔试题

答案&#xff1a;&#xff08;1&#xff09;seqn[tail]data; tail(tail1)%SEQLEN; &#xff08;2&#xff09;data seqn[head]; head (head1)%SEQLEN; &#xff08;3&#xff09;head tail; &#xff08;4&#xff09;(tail1)%SEQLEN head; (5) while(head!tail) head (h…

【北京迅为】《iTOP-3588开发板快速测试手册》第三章 Buildroot系统功能测试

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

导图解文 从梦想到财富(43)只要会请客吃饭,你就能设计出好产品

系列文章说明&#xff1a; 本系列文章 主要是 使用 ​​​​​​​思维导图 对知乎 上一个知乎上的专题系列文章《从梦想到财富》的 一个解读。 1 文章链接 本章节 对应 《从梦想到财富》专栏的 文章链接为&#xff1a;只要会请客吃饭&#xff0c;你就能设计出好产品 2 导图…