接口自动化入门-TestNg

news2024/11/17 13:33:55

目录

  • 1.TestNg介绍
  • 2、TestNG安装
  • 3、TestNG使用
    • 3.1 编写测试用例脚本
    • 3.2 创建TestNG.xml文件
      • (1)创建testng.xml文件
      • (2)修改testng.xml
  • 4、测试报告生成

1.TestNg介绍

TestNg是Java中开源的自动化测试框架,灵感来源于Junit和NUnit。引入Java的注解便于编写和管理测试类和方法

2、TestNG安装

(1)JDK
(2)Intelli IDEA
(3)在IDEA中安装TestNg插件
在这里插入图片描述
(4)如果是Maven项目,还需要在pom.xml中添加依赖和插件

<dependencies>
		<dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.10</version>
            <scope>test</scope>
        </dependency>
</dependencies>
 <!-- testng.xml所在的路径,这里指的是相对路径 -->
<plugin>
      <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
                <suiteXmlFiles>
               		<suiteXmlFile>testng.xml</suiteXmlFile>
                 </suiteXmlFiles>
         </configuration>
         <version>2.22.1</version>
</plugin>

3、TestNG使用

3.1 编写测试用例脚本

(1)新建测试用例类
(2)使用注解

  • @Test注解:使用改注解的方法或类可以被testNG识别并运行
 @Test(dependsonMethods="test2"):依赖其他方法,运行当前方法之前需要先执行test2
 @Test(alwayRun=true):设置为true时,无论什么情况都会运行
 @Test(description="xxx"):对用例进行说明
 @Test(enabled=false):设置为false时,表示改方法失效
@Test(dataProvider="datas"):设置数据提供者的名称
  • Before/After注解
针对当前项目:
@BeforeSuite:带有该注释的方法将在该套件中的所有测试方法运行之前运行,仅运行一次。
@AfterSuite:带有该注释的方法将在该套件中的所有测试方法运行之后运行,仅运行一次。
@BeforeTest:带有该注释的方法将在运行属于标签<test>内的类的所有测试方法之前执行
@AfterTest:带有该注释的方法将在运行属于标签<test>内的类的所有测试方法之后执行
针对当前类:
@BeforeClass:带有该注释的方法将在调用当前类的第一个测试方法之前执行
@AfterClass:带有该注释的方法将在调用当前类的第一个测试方法之后执行
@BeforMethod:带有该注释的方法将在每个测试方法之前运行
@AfterMethod:带有该注释的方法将在每个测试方法之后运行
@BeforeGroups:此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。
@AfterGroups:该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。
  • 传递参数
    (1)@Parameters
@Parameters({"first","last"}):描述如何将参数传递给@Test方法。

需要预先在testng.xml中使用<parameter>标签传入参数名和参数值
<parameter name="first" value="尼古拉斯"/>

(2)@DataProvider:可以传递更多的参数,不需要在xml中写,直接在方法上加注解就可以用
参考:版权声明:本文为CSDN博主「wangjie0925」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
(1)注释方法返回一个Object[][]:明确知道有几组数据
其中每个Object []可以被分配给测试方法的参数列表。 要从该DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。


@DataProvider(name="loginData")

    private Object[][] LoginDataProvider() throws IOException {
        Object[][] result=null;
        SqlSession session=DatabaseUtil.getSqlSession();
        result=new Object[][]{{session.selectOne("loginTest",1)},{session.selectOne("loginTest",2)}};
        return  result;
}


(2)返回类型是Iterator<Object[]>,不管有多少组测试数据,都可以返回,使用迭代器时,test所在方法的参数类型必须与迭代器中的类型一致

@DataProvider(name="loginData")
private Iterator<Object[]> LoginDataProvider() throws IOException {
    List<Object[]> result=new ArrayList<Object[]>();
    SqlSession session=DatabaseUtil.getSqlSession();
    List<Object> alldata=session.selectList("loginTestAll");
    Iterator it=alldata.iterator();
    while(it.hasNext()){
    result.add(new Object[] { it.next() });
    }
    return  result.iterator();

}

在这里插入图片描述

(3)重要方法:

  • Assert.assertEquals(actual,Expected):断言,进行实际和预期值的比较

3.2 创建TestNG.xml文件

运行TestNG测试脚本需要配置一个xml文件,使用xml配置文件进行测试用例脚本的执行和管理,在xml配置文件里,不仅可以选择某些需要执行的测试脚本,还可以排除某些不需要运行的测试脚本。

(1)创建testng.xml文件

在这里插入图片描述

(2)修改testng.xml

参考:Java+Maven+TestNG - 创建项目篇
编写了测试用例脚本后,就可以修改testng.xml文件了。基本格式如下:

  • 每一个xml文件只能有一个suite根标签,代表的是一个测试集(项目);
  • 一个suite中可以包含多个test(模块),多个test会按照顺序执行;
  • 每一个test里边可以写需要运行的测试用例的class(模块下的测试类)。如果不写,默认会跑所有的测试用例;
  • 每个class可以指定要执行哪些用例,不执行哪些用例。如果不写method,则默认本类里的全部用例都执行。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="测试testng">
    <test verbose="2" preserve-order="true" name="G:/Pj/OJOnline/maven-oj">
        <classes>
            <class name="problem.ProblemDAOTest">
                <methods>
                    <include name="selectAllCase"/>
                    <include name="selectOneCase"/>

                </methods>
            </class>
        </classes>
    </test>
    <listeners>
        <listener class-name="org.uncommons.reportng.HTMLReporter"/>
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter"/>
    </listeners>
</suite>

4、测试报告生成

(1)默认的测试报告
执行testng.xml后(maven项目可以使用mvn test命令),在target目录下会生成surefire-reports文件夹,运行index.html文件可以查看报告
在这里插入图片描述
在这里插入图片描述

(2)ReportNG
在testng.xml中配置监听

<listeners>
        <listener class-name="org.uncommons.reportng.HTMLReporter"/>
        <listener class-name="org.uncommons.reportng.JUnitXMLReporter"/>
    </listeners>

在这里插入图片描述
在pom.xml文件中添加ReportNG的依赖:

<!-- https://mvnrepository.com/artifact/org.uncommons/reportng -->
    <dependency>
      <groupId>org.uncommons</groupId>
      <artifactId>reportng</artifactId>
      <version>1.1.4</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
    <dependency>
      <groupId>com.google.inject</groupId>
      <artifactId>guice</artifactId>
      <version>4.2.0</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/velocity/velocity-dep -->
    <dependency>
      <groupId>velocity</groupId>
      <artifactId>velocity-dep</artifactId>
      <version>1.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.8.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.uncommons/reportng -->
    <dependency>
      <groupId>org.uncommons</groupId>
      <artifactId>reportng</artifactId>
      <version>1.1.4</version>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.testng</groupId>
          <artifactId>testng</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.google.inject/guice -->
    <dependency>
      <groupId>com.google.inject</groupId>
      <artifactId>guice</artifactId>
      <version>4.2.0</version>
      <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/velocity/velocity-dep -->
    <dependency>
      <groupId>velocity</groupId>
      <artifactId>velocity-dep</artifactId>
      <version>1.4</version>
    </dependency>

在编辑配置中,取消Listerners中的Use default reports选项
在这里插入图片描述
执行testng.xml文件或mvn test,可以看到测试报告在test-output文件夹下
在这里插入图片描述
在这里插入图片描述

参考:Java自动化测试之TestNG生成测试报告

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

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

相关文章

CSAPP第九章 虚拟内存

理解虚拟内存的原因 本章前部分描述虚拟内存是如何工作的&#xff0c;后一部分描述应用程序如何使用和管理虚拟内存 物理和虚拟寻址 虚拟内存作为缓存的工具 页表 页命中 缺页 虚拟内存作为内存管理的工具 简化链接&#xff0c;简化加载&#xff0c;简化共享&#xff0c;简化…

K8s集群部署

#部署方式有多种&#xff0c;本文采用kubeadm组件的方式来部署K8s集群 安装要求&#xff1a; 至少三台主机内存最少2G&#xff0c;CPU2核集群网络互通可以访问外网禁止swap分区 环境说明: 系统&#xff1a;ubuntu22.04.1 版本信息&#xff1a;kubernetes&#xff1a;1.26.…

HashMap底层的实现原理

目录一、知识点回顾二、HashMap 的 put() 和 get() 的实现2.1 map.put(k, v) 实现原理2.2 map.get(k) 实现原理2.3 为何随机增删、查询效率都很高&#xff1f;2.4 为什么放在 HashMap 集合 key 部分的元素需要重写 equals 方法?2.5 HashMap总结2.6 JDK8 之后&#xff0c;HashM…

由点到面贯穿整个Java泛型理解

泛型概述 Java泛型(generics)是DK5中引入的一个新特性&#xff0c;泛型提供了编译时类型安全监测机制&#xff0c;该机制允许我们在编译时检测到非法的类型数据结构。 泛型的本质就是参数化类型&#xff0c;也就是所操作的数据类型被指定为一个参数。 如我们经常使用的Array…

信息安全与数学基础-笔记-③一次同余方程

知识目录一次同余方程的解中国剩余定理中国剩余定理的应用一次同余方程的解 本文只研究一次同余方程的解。 f(x) 三 0 (mod m)&#xff0c; 若有一个s能够满足该式子&#xff0c;那么该数字就是该式子的解&#xff0c; 在同余方程式中的解一般写成&#xff1a;x三s (mod m) 同…

Git学习入门(2)- 基本命令操作总结

个人博客&#xff1a;我的个人博客&#xff0c;各位大佬来玩1 创建 git仓库1.1 从现有工作目录中初始化新仓库需要到你需要用git管理的项目中输入以下命令&#xff1a;git init便会创建一个空的git项目&#xff0c;并且当前目录下会出现一个名为 .git 的目录&#xff0c; Git 需…

1.SpringSecurity快速入门

*SpringScurity的核心功能: 认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户 授权:经过认证后判断当前用户是否有权限进行某个操作 *第一步:创建springboot工程 *第二步:引入SpringSecurity依赖 *第三步:写controller,访问对应的url:localhos…

常用训练tricks,提升你模型的鲁棒性

目录一、对抗训练FGM(Fast Gradient Method): ICLR2017代码实现二、权值平均1.指数移动平均&#xff08;Exponential Moving Average&#xff0c;EMA&#xff09;为什么EMA会有效&#xff1f;代码实现2. 随机权值平均&#xff08;Stochastic Weight Averaging&#xff0c;SWA&a…

Java Volatile的三大特性

本文通过学习&#xff1a;周阳老师-尚硅谷Java大厂面试题第二季 总结的volatile相关的笔记volatile是Java虚拟机提供的轻量级的同步机制&#xff0c;三大特性为&#xff1a;保证可见性、不保证原子性、禁止指令重排一、保证可见性import java.util.concurrent.TimeUnit;class M…

cadence专题【1】--多引脚IC如何创建orcad原理图库

cadense下载说明新建工程一、采用传统方式创建1、新建库文件2、放置pin array3、修改管脚信息二、采用电子表格方式创建1、新建库文件2、Ctrlc、Ctrlvcadense下载说明 cadence是目前最流行的EDA&#xff0c;下载装机全交给阿狸狗即可。 浏览器搜索cadence吴川斌或点击链接: ht…

【aiy篇】小目标检测综述

小目标检测&#xff08;Small Object Detection&#xff09;是指在图像中检测尺寸较小的目标物体&#xff0c;通常是指物体的尺寸小于图像大小的1/10或者更小&#xff0c;COCO为例&#xff0c;面积小于等于1024像素的对象维下目标。小目标检测是计算机视觉领域的一个重要研究方…

记录一下,学习express的小成就

终于搞出来了mongoose 和express 前后端链接的部分。 主要目的是为了使用markdown转换网页。 项目随便写的。没有参考价值&#xff0c;在此只是为了做个记录。作为学习的一个里程碑。对于nodejs&#xff0c;终于可以自己探索&#xff0c;也算是入门了吧。 各位观众不要看了。…

深度学习 | 入个Pytorch的小门

本文主要参考 1’ 2’ 3 更新&#xff1a;2023 / 3 / 1 深度学习 | 入个Pytorch的小门 - 1. 常见数据操作创建操作算术操作加法索引形状查询形状改变形状广播机制广播条件运算数据类型转换Tensor转NumPyNumPy转Tensor线性回归线性回归的基本要素1. 模型2. 数据集3. 损失函数4.…

pycharm的License Certificate使用方法

1 在邮箱获得License Certificate的激活码之后&#xff0c;打开pycharm&#xff0c;选择HELP 在HELP菜单里选择Register 2 输入username or email和密码进行登录 3 登录之后&#xff0c;根据提示&#xff08;如果有的话&#xff09;&#xff0c;进入官网如下页面&#xff0c…

LC-1599. 经营摩天轮的最大利润(贪心)

1599. 经营摩天轮的最大利润 难度中等39 你正在经营一座摩天轮&#xff0c;该摩天轮共有 4 个座舱 &#xff0c;每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱&#xff0c;但每次轮转都需要支付一定的运行成本 runningCost 。摩天轮每次轮转都恰好转动 1 / 4 周。…

Java奠基】方法的讲解与使用

目录 方法概述 方法的定义与调用 方法的重载 方法的值传递 方法概述 方法是程序中最小的执行单元&#xff0c;在实际开发中会将重复的具有独立功能的代码抽取到方法中&#xff0c;这样可以提高代码的复用性和可维护性。 方法的定义与调用 在Java中定义方法的格式都是相同…

leetcode 困难 —— 外星文字典(拓扑排序)

题目&#xff1a; 现有一种使用英语字母的外星文语言&#xff0c;这门语言的字母顺序与英语顺序不同。 给定一个字符串列表 words &#xff0c;作为这门语言的词典&#xff0c;words 中的字符串已经 按这门新语言的字母顺序进行了排序 。 请你根据该词典还原出此语言中已知的字…

动态内存基础(二)

智能指针 ● 使用 new 与 delete 的问题&#xff1a;内存所有权不清晰&#xff0c;容易产生不销毁&#xff0c;多销毁的情况 int* fun() {int* res new int(100); //fun()拥有对fun()申请的内存的销毁权return res; } int main(int argc, char *argv[]) {QCoreApplication a(…

Java线程池-重点类源码解析--更新中

1.Runnable和Callable的区别 (1) Callable规定&#xff08;重写&#xff09;的方法是call()&#xff0c;Runnable规定&#xff08;重写&#xff09;的方法是run() (2) Callable的任务执行后可返回值&#xff0c;而Runnable的任务是不能返回值的 (3) call方法可以抛出异常&#…

总时差与自由时差

定义总时差&#xff08;总浮动时间&#xff09;&#xff08;TF&#xff0c;Total Free Time&#xff0c;不耽误项目总进度&#xff09;LS&#xff08;Latest Start&#xff09;-ES&#xff08;Earliest Start&#xff09;LF&#xff08;Latest Finish&#xff09;-EF&#xff0…