Java+TestNG

TestNG是Java中的一个测试框架,主要用于编写和执行自动化测试用例。它是一个功能强大的测试工具,旨在提供一个比JUnit更强大、更灵活的测试框架。TestNG的设计目标是简化广泛的测试需求,从单元测试(隔离测试一个类)到集成测试(测试由多个类、多个包甚至多个外部框架组成的整个系统)

一、配置maven

        TestNG现在自动集成到IEDA中,在创建maven项目后,在pom文件中添加testng的依赖

二、生成测试类并使用注解

        然后根据src下的类,生成对应的测试类,里面可以定义测试方法,并用不同的注解修饰

@BeforeSuite在该测试套件的所有测试运行之前执行,只执行一次
@AfterSuite在该套件的所有测试运行之后执行,只执行一次
@BeforeTest注释的方法将在属于test标签内的所有类的所有测试方法运行之前运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次
@AfterSuite
注释的方法将在属于test标签内的所有类的所有测试方法运行之后运行,一个test标签内可能有多个class(类),在当前test标签内仅运行一次
@BeforeClass在属于test标签下的,当前类的第一个测试方法执行之前执行
@AfterClass在属于test标签下的,当前类的最后一个测试方法执行之后执行
@BeforeGroups配置方法将在组列表运行之前运行。 此方法保证在调用属于这些组中的任何第一个测试方法之前不久运行
@AfterGroups   配置方法将在组列表运行之后运行。 此方法保证在调用属于这些组中的最后一个测试方法之后不久运行
@BeforeMethod注释方法将在每个测试方法执行前执行
@AfterMethod        注释方法将在每个测试方法执行后执行
@Parameters描述怎么传递参数
@DataProvider标记一种方法来提供测试方法的数据。 注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称
@Listener定义类上的监听器
@Factory将一个方法定义为工厂
@Test将方法作为测试方法,将类作为测试类,里面的公共方法都视为测试方法

                各个注解在测试套件执行期间,对应的先后顺序是:

        

@BeforeSuite -> @BeforeTest -> @BeforeClass ->

{@BeforeGroups[@BeforeMethod -> @Test1 -> @AfterMethod,

                            @BeforeMethod -> @Test2 -> @AfterMethod

                                , ...] -> @AfterGroups ->

@BeforeGroups[@BeforeMethod -> @Test3 -> @AfterMethod,

                           @BeforeMethod -> @Test4 -> @AfterMethod

                                , ...] -> @AfterGroups, ...}->

@AfterClass->@AfterTest->@AfterSuite

     

        每个测试类下可以存在多个组Groups,而一个组又可以定义多个测试方法,每个测试方法执行前后都要执行。所以测试方法执行完毕,再执行组的方法,直到该类下的所有组测试完毕,执行另一个类,到所有类测试完。

 三、通过xml文件执行测试

 

        定义xml文件,文件头为 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >  

        然后定义各种标签,注意标签之间的嵌套关系,和意思

        写完后右键执行,里面包含的所有测试类都会被测试 

      3.1 suite标签

        是xml文件的根标签,即测试套件,其下可以有多个<test>和<groups>,只存在一个suite标签。suite标签存在多个属性
        TestNG单元测试框架详解_testng框架-CSDN博客

四、通过maven执行测试

        可以打开终端,输入mvn -D 后面跟上测试的文件路径

五、测试中常用的断言

1、assertEqual (expected value, actual value, [String message], )        

        断言两个值相等。值可能是类型有 int, short, long, byte, char or java.lang.Object.         message参数是一个可选的字符串消息,表示断言失败输出的信息
2、assertTrue(boolean condition, [String message],)               

        断言一个条件为真;        

        message参数是一个可选的字符串消息,表示断言失败输出的信息
3、assertFalse(boolean condition,[String message])              

        断言一个条件为假;

        message参数是一个可选的字符串消息,表示断言失败输出的信息
4、assertNotNull(java.lang.Object object ,[String message])          

        断言一个对象不为空(null);

        message参数是一个可选的字符串消息,表示断言失败输出的信息
5、assertNull(java.lang.Object object, [String message] )           

        断言一个对象为空(null);    

        message参数是一个可选的字符串消息,表示断言失败输出的信息
6、assertSame(java.lang.Object expected, java.lang.Object actual, [String message] )               断言两个对象引用相同的对象;            

        message参数是一个可选的字符串消息,表示断言失败输出的信息
7、assertNotSame( java.lang.Object unexpected, java.lang.Object actual, [String message])    

        断言两个对象不是引用同一个对象;    

        message参数是一个可选的字符串消息,表示断言失败输出的信息

8、assertArrayEquals( expectedArray, resultArray, [String message])                          断言预期数组和结果数组相等。数组的类型可能是 int, long, short, char, byte or                     java.lang.Object.;    

          message参数是一个可选的字符串消息,表示断言失败输出的信息

六、Test注解的常用属性解释

       6.1 预期异常测试:

               通过@Test注解的exceptions 属性,可以定义测试报异常时想捕获的异常类型

                如果抛出的异常为该异常类型,则测试通过,否则测试失败。

       6.2 忽略测试:

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

        6.3 超时测试:

                “超时”表示如果单元测试花费的时间超过指定的毫秒数,那么TestNG将会中止它并将其标记为失败。timeOut设置超时时间,单位是毫秒,此项常用于性能测试

        6.4 分组测试:

                就是groups属性,对应xml文件里的<groups>

                如果是直接在class中,是通过@Test(groups="group2")这种方式来分组

                而且@BeforeGroup是需要添加group名称才可以正确挂载到该group下的;
                这个group说明可以是在单个的测试方法上,也可以在class上,

                只要具有同样的group名称,都会在同一个group中,

                同时group名称可以有多个,类似@Test(groups = {"mysql","database"})这种

        6.5 分suite测试:

                测试套件是用于测试软件程序的行为或一组行为的测试用例的集合。

                在TestNG中,我们无法在测试源代码中定义一个套件,但它可以由一个XML文件表示

                因为套件是执行的功能。 它还允许灵活配置要运行的测试。

                套件可以包含一个或多个测试,并由<suite>标记定义。

                 <suite>是testng.xml的根标记。 描述了一个测试套件,它又由几个<test>部分组成
                下表列出了<suite>接受的所有定义的合法属性

                注意xml文件下,suite作为根标签只存在一个,而里面的test标签可以多个

        6.6 依赖测试:          

                有时,我们可能需要以特定顺序调用测试用例中的方法,或者可能希望在方法之间共享一些数据和状态。

                TestNG支持这种依赖关系,因为它支持在测试方法之间显式依赖的声明。
                TestNG允许指定依赖关系:

                在@Test注释中使用属性dependsOnMethods指定要依赖的方法名称

                在@Test注释中使用属性dependsOnGroups指定要依赖的组名称
                除此之外依赖还分为hard依赖和soft依赖:

                简而言之,硬依赖就是被依赖的方法或组,只要出错,依赖它的方法和类就不会执行测试,被略过

                  软依赖是被依赖的方法或组,只要出错,依赖它的方法和类还是会执行测试,但是要加入属性alwaysRun=true,如@Test(dependsOnMethods= {"TestNgLearn1"}, alwaysRun=true);
             

        6.7 参数化测试:

               在大多数情况下,您会遇到业务逻辑需要大量测试的场景。 参数化测试允许开发人员使用不同的值一次又一次地运行相同的测试。
TestNG可以通过两种不同的方式将参数直接传递给测试方法:

使用xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false"><test name="Test"><parameter name="param1" value="1011111" /><parameter name="param2" value="10" /><classes><class name="com.demo.test.testng.TestCase1"/></classes></test> <!-- Test -->
</suite> <!-- Suite -->
public class TestCase1 {@Test(enabled=true)@Parameters({"param1", "param2"})public void TestNgLearn1(String param1, int param2) {System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);Assert.assertFalse(false);}@Test(dependsOnMethods= {"TestNgLearn1"})public void TestNgLearn2() {System.out.println("this is TestNG test case2");}
}

        这里使用了parameters注解,里面定义参数名称,这样就可以把xml文件里的参数对应到,获取值

使用注解@DataProvider:

        

public class TestCase1 {@DataProvider(name = "provideNumbers")public Object[][] provideData() {return new Object[][] { { 10, 20 }, { 100, 110 }, { 200, 210 } };}@Test(dataProvider = "provideNumbers")public void TestNgLearn1(int param1, int param2) {System.out.println("this is TestNG test case1, and param1 is:"+param1+"; param2 is:"+param2);Assert.assertFalse(false);}@Test(dependsOnMethods= {"TestNgLearn1"})public void TestNgLearn2() {System.out.println("this is TestNG test case2");}
}

        之前说过使用@DataProvider的方法,返回值一定为Object类型的二维数组,这个就是参数值

        然后方法的参数列表定义参数进行接收,参数类型可以不同

        每次接收到一个数组元素,就是一个不同参数的同名测试

        这样就实现了大量相同的测试,但是传入的参数不同

        

七、testNG报告产出

        

        使用IDEA+TestNG进行测试,没有生成 测试报告,是因为没有勾选监听器使用默认报告,具体操作如下:

        输出报告在项目目录下的index.html文件中

八、与JUnit的区别

        

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

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

相关文章

福派斯牛肉高脂猫粮,为何成猫舍首选?揭秘其神奇功效!

&#x1f43e; 说到猫咪的伙食&#xff0c;咱们当铲屎官的可是操碎了心&#xff01;想让自家毛孩子吃得健康又开心&#xff0c;选对猫粮真的太重要了。今天就来聊聊为啥福派斯牛肉高脂猫粮能成为众多猫舍的首选&#xff0c;以及它到底能帮咱们的小猫咪哪些忙吧&#xff01; 1️…

mybatis查询数据字段返回空值

1.描述 数据苦衷实际存储字段全不为空 查询后brand_name/company_name为空 2.原因分析 带下划线的字段&#xff0c;都会返回空值&#xff0c;应该是字段映射出了问题 3.解决方案 在配置文件中添加下划线自动映射为驼峰 <configuration><settings><sett…

编写Dockerfile文件解释

编写Dockerfile文件的基本步骤如下&#xff1a; 首先&#xff0c;创建一个新的文本文件&#xff0c;并将其命名为Dockerfile。 在Dockerfile的第一行添加基础镜像的指令。例如&#xff0c;使用ubuntu 18.04作为基础镜像&#xff0c;可以添加以下指令&#xff1a; FROM ubunt…

电子档案系统与双层PDF及基于Elasticsearch全文检索技术的探索

随着信息化时代的到来&#xff0c;电子档案系统作为信息资源管理的重要工具&#xff0c;其发展和应用受到了广泛关注。本文旨在探讨电子档案系统中扫描件的数字化处理、双层PDF的构建及其优势&#xff0c;并详细阐述了全文检索技术在电子档案管理中的应用&#xff0c;特别是基于…

鸿蒙开发——axios封装请求、拦截器

描述&#xff1a;接口用的是PHP&#xff0c;框架TP5 源码地址 链接&#xff1a;https://pan.quark.cn/s/a610610ca406 提取码&#xff1a;rbYX 请求登录 HttpUtil HttpApi 使用方法

LangChain结合LLM做RAG文档搜索

我们知道LLM&#xff08;大语言模型&#xff09;的底模是基于已经过期的公开数据训练出来的&#xff0c;对于新的知识或者私有化的数据LLM一般无法作答&#xff0c;此时LLM会出现“幻觉”。针对“幻觉”问题&#xff0c;一般的解决方案是采用RAG做检索增强。 但是我们不可能把…

十、Docker版Redis集群搭建

目录 一、3主3从Redis集群配置 1、新建6个docker容器实例 2、进入容器redis-node-1并为6台机器构建集群关系 3、以6381为切入点,查看集群状态 二、主从容错切换迁移案例 1、数据读写存储 2、假如6381宕机了,他的从库6386会不会切换 三、主从扩容案例 1、新建6387、63…

SQL 基础知识

SQL&#xff08;结构化查询语言&#xff09;是一种用于管理和操作关系数据库的标准编程语言。以下是一些 SQL 的基础知识&#xff1a; 基本概念 数据库&#xff08;Database&#xff09;&#xff1a; 存储和管理数据的容器。一个数据库可以包含多个表。 表&#xff08;Table&…

C语言 | Leetcode C语言题解之第292题Nim游戏

题目&#xff1a; 题解&#xff1a; bool canWinNim(int n) {return n % 4 ! 0; }

C语言模块化编程技术详解

C语言模块化编程技术详解&#xff08;第一部分&#xff09; 模块化编程是一种将程序划分为多个模块的编程方法&#xff0c;每个模块负责完成特定的功能。在C语言中&#xff0c;模块化编程可以提高代码的可读性、可维护性和可重用性。本文将深入探讨C语言模块化编程的工作原理&…

【Linux】文件系统|CHS寻址|LBA逻辑块|文件索引|inode|Date block|inodeBitmap|blockBitmap

前言 一个进程通过文件描述符标识一个打开的文件&#xff0c;进程拿着文件描述符可以在内核中找到目标文件进行读写等操作。这是打开的文件&#xff0c;而没有被打开的文件存储在磁盘中&#xff0c;是如何管理的&#xff1f;操作系统在偌大的磁盘中如何找到想要的文件并打开的…

在CentOS 7上安装Apache Tomcat 10.0.27

要在CentOS 7上安装Apache Tomcat 10.0.27&#xff0c;可以按照以下步骤操作&#xff1a; 安装Java开发工具包 (JDK): Tomcat需要Java环境。可以使用以下命令安装OpenJDK 11&#xff1a; sudo yum install java-11-openjdk-devel下载Tomcat 10.0.27: 从Tomcat官方网站下载Tomca…

凸优化笔记-基本概念

原文 文章目录 最小二乘问题 仿射affine hullaffine dimension 凸集锥集超平面和半空间单纯形整半定锥保凸性的操作透视函数 凸函数的条件1阶判定条件2阶判定条件 Epigraph 外图 m i n i m i z e f 0 ( x ) minimize\ \ \ f_0(x) minimize f0​(x) s u b j e c t t o f i ( …

Leetcode32-求出出现两次数字的 XOR 值(3158)

1、题目 给你一个数组 nums &#xff0c;数组中的数字 要么 出现一次&#xff0c;要么 出现两次。 请你返回数组中所有出现两次数字的按位 XOR 值&#xff0c;如果没有数字出现过两次&#xff0c;返回 0 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,1,3] 输出&…

C#实现数据采集系统-Tcp粘包处理

Tcp通信中会出现粘包的情况,Tcp数据不是完全一收一发,而是会将接收到数据存在一个接收缓冲区,等到调用接收的把数据从缓冲区取出来 大部分时候,我们收发消息频率不高,看上去就是发一条,收一条,完整数据;理论上,接收一次,是会出现各种情况, 粘包的几种情况 接收不完…

Spring Boot入门指南:留言板

一.留言板 1.输⼊留⾔信息,点击提交.后端把数据存储起来. 2.⻚⾯展⽰输⼊的表⽩墙的信息 规范&#xff1a; 1.写一个类MessageInfo对象&#xff0c;添加构造方法 虽然有快捷键&#xff0c;但是还是不够偷懒 项目添加Lombok。 Lombok是⼀个Java⼯具库&#xff0c;通过添加注…

Java从基础到高级特性及应用

Java&#xff0c;作为一门历史悠久且广泛应用的编程语言&#xff0c;自1995年问世以来&#xff0c;便以其跨平台性、面向对象、自动内存管理等特点&#xff0c;在软件开发领域占据了举足轻重的地位。从桌面应用到企业级系统&#xff0c;从移动开发到云计算服务&#xff0c;Java…

Spring Boot 与 MongoDB 整合指南

MongoDB MongoDB 是一种基于文档的NoSQL数据库&#xff0c;以其高性能、高可用性和易扩展性而著称。它使用 BSON&#xff08;类似 JSON 的二进制格式&#xff09;来存储数据&#xff0c;提供了灵活的数据模型&#xff0c;使得开发者可以更轻松地存储和查询复杂的数据结构。将M…

2024年钉钉杯大数据竞赛A题超详细解题思路+python代码手把手保姆级运行讲解视频+问题一代码分享

初赛A&#xff1a;烟草营销案例数据分析 AB题综合难度不大&#xff0c;难度可以视作0.4个国赛&#xff0c;题量可以看作0.35个国赛题量。适合于国赛前队伍练手&#xff0c;队伍内磨合。竞赛获奖率50%&#xff0c;八月底出成绩&#xff0c;参赛人数3000队左右。本文将为大家进行…

七夕特献:用代码编织爱情的浪漫,程序员的专属爱情证书生成器

文章目录 1. 背景介绍2. **为什么是爱情证书生成器&#xff1f;**3. **功能亮点**4. **技术实现**5. **如何获取&#xff1f;**6. 总结 1. 背景介绍 在这个数字化的时代&#xff0c;程序员们用代码编织世界&#xff0c;创造无限可能。七夕将至&#xff0c;一个充满古老传说和浪…