TestNG学会了,Java单元测试你就掌握了一半!

news2024/11/16 3:20:18

01、TestNG

01、简介

在日常测试工作中,经常需要用写代码和脚本来完成一些测试任务,比如自动化测试,接口测试,单元测试等。当写完若干脚本后,需要对这些脚本进行组织、管理和结果统计,这个时候就需要有一个工具来负责这些事情,于是TestNG就出现了。

TestNG是Java体系中的一个测试框架,可以用于做单元测试、集成测试等。在TestNG之前,有一个类似的框架早就出现了,那就是Junit。TestNG借鉴了Junit的一些特点,然后增加了很多更强大的功能。成为Java体系里使用最广泛的测试框架。

需要注意的是,很多人理解TestNG是一个接口测试框架,其实并不是的,TestNG本身不能做接口测试,它主要用来管理你的接口测试。类似于Python里的pytest框架。今天我们就来详细介绍下TestNG的使用。

02、环境安装

创建一个Maven工程,引入TestNG的依赖包

<dependency> 

   <groupId>org.testng</groupId>
   <artifactId>testng</artifactId>

   <version>6.8</version>

</dependency>

一个简单的小例子

写一个简单的计算器类

//一个简单的加减乘除计算器
public class Calculator {
    // 加法
    public int add(int a, int b){
        return a + b;
    }
    // 减法
    public int subtract(int a, int b){
        return a - b;
    }
    // 乘法
    public int multiply(int a, int b){
        return a * b;
    }
    // 除法
    public int divide(int a, int b){
        return a / b;
    }
}

接下来对这个计算器进行单元测试,创建一个测试类,并对加法运算编写了一个测试方法

// 计算器测试类
public class CalculatorTest {
    // 加法测试
    @Test
    public void testAdd(){
        System.out.println("开始执行testAdd");
        Calculator calculator = new Calculator();
        int result = calculator.add(1, 1);
        Assert.assertEquals(2, result);
    }
    // 减法测试
    @Test
    public void testSubtract(){
        System.out.println("开始执行testSubtract");
        Calculator calculator = new Calculator();
        int result = calculator.subtract(2, 1);
        Assert.assertEquals(1, result);
    }
}
注意:
  • 在上面代码中,testAdd方法上添加了一个@Test注解,这个是TestNG提供的一个注解(可以理解成一个标记),改注解标明此方法需要TestNG来执行,@Test注解也是最常使用的注解。
  • Assert是TestNG中的断言类,assertEquals是最常用的一个方法,用于判断期望值和实际值是否一致。如果一致,测试通过;如果不一致,测试不通过。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

03、TestNG的执行

IntelliJ IDEA中内置了TestNG的支持,因此直接在方法名上右键,选择"run testAdd"即可,并且会在控制台上打印用例的执行结果。

控制台打印,如果都显示为绿色,就代表执行成功了

也可以在类上右键运行,TestNG中会运行整个类中所有带@Test注解的测试方法

02、套件测试

01、套件定义

一个测试类里会编写若干个测试方法。如果某个场景需要执行多个测试类,就需要用到套件测试。套件是一组测试类的集合。在TestNG中,需要使用一个xml文件来定义一个套件,套件里可以包含1个或多个测试类。在xml中还可以很多灵活的配置,实现一些精细化的执行策略。

在Maven工程的resource目录下创建一个testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestAll">
  <!--执行整个类-->
    <test name="calculator_all_class">
        <classes>
             <!-- 指定类名,可以添加多个-->
            <class name="com.mtx.CalculatorTest"></class>
        </classes>
    </test>
    <!--仅执行某个方法-->
    <test name="calculator_one_method">
        <classes>
            <class name="com.mtx.CalculatorTest">
                <methods>
                       <!--指定方法名,可以添加多个-->
                    <include name="testAdd"></include>
                </methods>
            </class>
        </classes>
    </test>
</suite>

在xml中,一个test标签就代表了一个执行用例,可以执行一个或多个类,或者指定一个或多个方法(见注释)

02、套件执行

在xml上右键run即可运行整个套件,执行结果

03、数据驱动

在很多测试用例中,对于同一套逻辑,需要使用大量不同的数据进行验证,这个情况下可以使用TestNG的@DataProvider注解来提供数据,并驱动测试用例执行

在测试类中定义一个数据驱动方法,并添加@DataProvider注解

// 加法测试
@Test(dataProvider = "testAddData")
public void testAdd(int a, int b, int expect){
    System.out.println("开始执行testAdd");
    Calculator calculator = new Calculator();
    int result = calculator.add(a, b);
    Assert.assertEquals(expect, result);
}
// 提供了三组测试数据:{数字1, 数字2, 期望值}
// 因为返回类型的Object,所以数组中也可以写其他数据类型,String、int、char、float等
@DataProvider(name = "testAddData")
public Object[][] testAddData(){
    Object[][] data = new Object[][]{{1, 1, 2}, {2, 2, 4}, {3, 3, 5}};
    return data;
}
注意:
  • 提供数据的providerData方法必须添加注解@DataProvider,并且执行name为testAddData。方法返回的数据类型必须为Object二维数组
  • 使用数据的testAdd方法上,必须制定对应的dataprovider name,并且方法上定义对应数量和类型的入参,用于接受数据

执行testAdd方法后,发现执行了三次,每次分别传入不同的参数,第三组数据执行因为实际和预期不一致,执行结果为失败

04、其他注解

除了@Test注解,还有一些其他的注解也经常使用,具体如下:

注解描述
@BeforeSuite在套件测试执行前执行,仅运行一次
@AfterSuite在套件测试执行后执行,仅运行一次
@BeforeClass在整个测试类执行前执行,仅运行一次
@AfterClass在整个测试类执行后执行,仅运行一次
@BeforeTest在@Test注解的方法执行前执行,每个@Test方法都执行一次
@AfterTest在@Test注解的方法执行后执行,每个@Test方法都执行一次
@BeforeSuite
public void suiteInit(){
    System.out.println("套件执行前测试");
}
@AfterSuite
public void suiteEnd(){
    System.out.println("套件执行后测试");
}
@BeforeClass
public void classInit(){
    System.out.println("类执行前测试");
}
@AfterClass
public void classEnd(){
    System.out.println("类执行后测试");
}
@BeforeTest
public void testInit(){
    System.out.println("测试方法执行前测试");
}
@AfterTest
public void testEnd(){
    System.out.println("测试方法执行后测试");
}

执行结果:

05、命令行执行

除了在idea中执行TestNG测试方法外,另外一种更实用的执行方法是命令行执行,使用命令行执行更容易和其他外部工具进行集成,比如Jenkins。然而TestNG自身提供的命令行执行方式并不好用。比较简单的方法是和Maven集成,实用maven的方式来调用TestNG。

在工程的pom文件里,添加插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <testFailureIgnore>true</testFailureIgnore>
                <suiteXmlFiles>
                    <suiteXmlFile>src/main/resources/testng.xml</suiteXmlFile>
                </suiteXmlFiles>
            </configuration>
        </plugin>
    </plugins>
</build>

在suiteXmlFile标签里,指定testng.xml文件的相对位置。

然后在cmd下,进入到工程的目录下,执行命令:mvn test,可以看到,最终在控制台里打印出了测试结果

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

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

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

相关文章

三维模型3DTile格式轻量化的跨平台兼容性问题分析

三维模型3DTile格式轻量化的跨平台兼容性问题分析 三维模型3DTile格式是一种开放的、高效的和互操作的空间信息数据格式。然而&#xff0c;它作为一种新兴的技术&#xff0c;其在轻量化与跨平台兼容性方面存在着一些问题。 首先&#xff0c;由于3DTile格式主要针对大型三维场景…

JVM面试题:(一)类加载机制和双亲委派

类加载过程&#xff1a; 常量池符号引用解析为直接引用&#xff1f; 符号引用包括了下面三类常量&#xff1a; 类和接口的全限定名&#xff0c;字段的名称和描述符&#xff0c;方法的名称和描述符 直接引用可以是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄…

antd的upload上传组件,上传成功后清除表单校验——基础积累

今天在写后台管理系统时&#xff0c;发现之前的一个bug&#xff0c;就是antd的upload上传组件&#xff0c;需要进行表单校验。 直接上代码&#xff1a; 1.html部分 <a-form-modelref"ruleForm":model"form":label-col"labelCol":wrapper-col…

轻量限制流量?阿里云轻量应用服务器月流量包收费说明

阿里云轻量应用服务器部分套餐限制月流量&#xff0c;轻量应用服务器按照套餐售卖&#xff0c;有的套餐限制月流量&#xff0c;有的不限制流量。像阿里云轻量2核2G3M带宽轻量服务器一年108元和轻量2核4G4M带宽一年297.98元12个月&#xff0c;这两款是不限制月流量的。阿里云百科…

c语言练习题82:顺序表的使用

顺序表的使用 1、顺序表的概念及结构 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是⼀种在实际中⼴泛使 ⽤的数据结构&#xff0c;常⻅的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性…

基于工业5G网关的工业机器人监测控制方案

随着智能制造、自动化生产的发展进步&#xff0c;工业机器人的身影越来越多地出现在工厂现场&#xff0c;成为新型无人化、智能化生产制造的中坚力量。 工业机器人的运行伴生着海量的数据采集、传输、分析和反馈执行&#xff0c;因此也需要高速、低延迟的5G网络&#xff0c;支撑…

Oracle 云服务即将支持 PostgreSQL!

2023 年 9 月 19 日&#xff0c;Oracle 产品团队发布了一篇文章&#xff0c;宣布 Oracle 云基础架构&#xff08;OCI&#xff09;开始提供 PostgreSQL 服务。目前支持的版本为 PostgreSQL 14.9&#xff0c;提供有限支持&#xff0c;12 月份将会提供正式版本。 众所周知&#x…

网络原理之TCP_IP

目录 应用层重点协议 传输层重点协议 1.UDP协议 (一)UDP协议段格式 (二)UDP的特点 无连接 不可靠传输 面向数据报 全双工 缓冲区 大小受限 (三)基于UDP的应用层协议 (四)面试题 2.TCP协议 (一)TCP协议段格式 (二)TCP的特点 有连接 可靠传输 面向字节流 缓冲…

竞赛选题 深度学习 python opencv 火焰检测识别

文章目录 0 前言1 基于YOLO的火焰检测与识别2 课题背景3 卷积神经网络3.1 卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV54.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 数据集准备5.1 数…

Vue数据代理的原理

一、Object.defineProperty方法 我们可以使用一个Object.defineProperty方法给一个对象添加属性&#xff0c;并对该属性进行权限设置 语法格式如下&#xff1a; Object.defineProperty(对象 , "属性名" , { // 配置项 }) let Person {name:"寻霖",age:1…

HTTP协议的请求协议和响应协议的组成,HTTP常见的状态信息

HTTP协议 什么是协议 协议实际上是某些人或组织提前制定好的一套规范,大家只要都按照这个规范来就可以做到沟通无障碍 HTTP协议是W3C(万维网联盟组织)制定的一种超文本传输通信协议(发送消息的模板和数据的格式),除了传送字符串,还有声音、视频、图片等流媒体等超文本信息 …

单目3D目标检测——SMOKE 模型推理 | 可视化结果

本文分享SMOKE的模型推理&#xff0c;和可视化结果。以kitti数据集为例子&#xff0c;对训练完的模型进行推理&#xff0c;并可视化3D框的结果&#xff0c;画到图像中。 关于模型原理、搭建开发环境、模型训练&#xff0c;可以参考之前的博客&#xff1a; 【论文解读】SMOKE …

【分享】Word文档“只读方式”的两种模式

如果想要防止Word文档的内容被意外更改&#xff0c;可以设置成以“只读方式”打开&#xff0c;这样就算更改了也不用担心不小心保存了文档。 Word文档“只读方式”有两种模式&#xff0c;下面我们来看看这两种模式具体是如何设置的。 模式一&#xff1a;无密码的“只读方式” …

基于YOLOv5、YOLOv8的火灾检测(超实用项目)

目录 1.简介 2.YOLO算法 3.基于YOLOv5、YOLOv8的火灾检测 视频已上传b站 YOLOv5/YOLOv8的火灾检测&#xff08;超实用项目&#xff09;_哔哩哔哩_bilibili 本文为系列专栏&#xff0c;包括各种YOLO检测算法项目、追踪算法项目、双目视觉、深度结构光相机测距测速三维测量项…

基于黏菌优化的BP神经网络(分类应用) - 附代码

基于黏菌优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于黏菌优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.黏菌优化BP神经网络3.1 BP神经网络参数设置3.2 黏菌算法应用 4.测试结果&#xff1a;5.M…

教你如何『SSH』远程连接『内网』服务器

前言 最近博主实验室要搬家&#xff0c;因为服务器只有连接内网才能使用&#xff0c;所以搬走之后就无法在公网连接使用服务器&#xff0c;确实是让人非常苦恼&#xff0c;所以本文将会主要讲解如何使用公网服务器 SSH 连接内网服务器 系统配置 内网服务器&#xff1a;Ubuntu …

【配置vscode编写Java代码和输出在外部控制台】

配置vscode编写Java代码和输出在外部控制台 打开vscode&#xff0c;扩展中搜索java安装如下插件&#xff0c; 安装完成后&#xff0c;打开一个文件夹&#xff0c;新建hello.java文件&#xff0c;粘贴下面代码 public class hello {public static void main(String[] args) {S…

【Python】win安装

目录标题 下载目录安装步骤验证是否安装成功linux 、MacOs 安装 下载目录 https://www.python.org/downloads/ 安装步骤 验证是否安装成功 进入命令行&#xff0c;输入 &#xff1a; python 出现版本号即查看成功&#xff1a; linux 、MacOs 安装 Python 安装到 Linux 上…

小黑子—MyBatis:第三章

MyBatis入门3.0 七 小黑子使用javassist生成类7.1 Javassist的使用7.2 javassist生成动态类并实现接口7.3 工具类GenerateDaoProxy的编写7.3.1 每一个方法体的动态拼接7.3.2 MyBatis的getMapper方法 八 MyBatis中接口代理机制及使用8.1 面向接口的方式进行CRUD8.1.1 步骤18.1.2…

idea将jar包deploy到本地仓库

1、pom.xml文件引入配置&#xff0c;如下参考&#xff1a; <distributionManagement><snapshotRepository><id>maven-snapshots</id><url>http://nexus1.coralglobal.cn/repository/maven-snapshots/</url></snapshotRepository><…