面面俱到的Java接口自动化测试实战_如何利用TestNG做接口自动化测试?Java+TestNG测试实例分享...

2023-11-13

上一篇自动化测试我们大概了解了测试的目标、测试的技术选型以及搭建平台的目标及需求,也确定了自动化测试方案以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、注解两种配置方式,且两种方式可以混合配置,并且在运行的周期内提供了多个注解和拦截、选择器等扩展机制,可以灵活的扩展和选择排除的方法

第一个testNg测试方法

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

org.springframework.boot

  spring-boot-starter-test

  test

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

请关注+私信回复:“学习”就可以免费拿到软件测试学习资料

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面面俱到的Java接口自动化测试实战_如何利用TestNG做接口自动化测试?Java+TestNG测试实例分享... 的相关文章

  • Flutter全部图标之快速找到合适的Icon图标

    1 由于Flutter中的图标太多 并且无法直观地进行预览 因为把所有的图标截图下来展示 以便可以快速找到你想要的图标
  • 2023.6.26

  • jdk安装

    开发十年 就只剩下这套Java开发体系了 gt gt gt 1 安装jdk 1 1 jdk下载地址 http www oracle com technetwork java javase downloads jdk8 downloads 2
  • 关于服务连接器(Servlet)你了解多少?

    文章目录 Servlet 1 简介 2 快速入门 3 执行流程 4 生命周期 5 方法介绍 6 体系结构 7 urlPattern配置 8 XML配置 最后说一句 Servlet 1 简介 Servlet是JavaWeb最为核心的内容 它是
  • [Ctf show web] 萌新计划12

    preg match 没有匹配到表达式时输出 c 利用baes64加密绕过 c a base64 decode c3lzdGVt b base64 decode dGFjIGNvbmZpZy5waHA a b
  • 1127: 矩阵乘积java

    import java util Scanner public class Main public static void main String args Scanner input new Scanner System in int m
  • springboot+redistemplate 集群配置

    redisConfig 配置类 package com zhouzhou springredistemplatedemo controller import io lettuce core cluster ClusterClientOpti
  • 前言

    es7 1中文指南 前言 数据存储 信息输出 搜索 分析 more 前言 Elasticsearch是Elastic Stack核心的分布式搜索和分析引擎 Logstash和Beats有助于收集 聚合和丰富您的数据并将其存储在Elastic
  • Ubuntu18中NVIDIA,cuda,cudnn,pytorch安装

    注意 nvidia驱动和cuda cudnn pytroch python的对应关系 参考内容 https blog csdn net tjuyanming article details 80862290 https blog csdn
  • 数据链路层以太网协议+ARP协议

    数据链路层 1 负责相邻设备之间的传输 决定性因素是设备的MAC地址 MAC地址 6字节的整数 uint8 t addr 6 MAC地址在每一个机器上都是独一无二的 以以网协议 目的MAC地址 6字节 源MAC地址 6字节 类型 2字节 数
  • 实现element table组件内行与行之间设置间隙效果以及行内的渐变效果以及各种问题

    在项目开发中 产品提了这样一个需求 实现表格内每一行之间存在间隙以及渐变效果 具体效果如下图所示 因为element的table组件默认的是行与行挨着 所以需要更改组件的样式 具体代码如下所示 1 设置行与行之间的间距 v deep el
  • Java中如何使用消息队列实现异步(ActiveMQ,RabbitMQ,Kafka)

    一 ActiveMQ 示例 在 Java 中 可以使用消息队列实现异步处理 下面是一个简单的示例代码 用于说明如何使用 ActiveMQ 实现消息队列异步处理 添加 ActiveMQ 依赖 在 pom xml 文件中添加以下依赖
  • Unity3D开发入门教程(四)——用Lua实现组件

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 五邑隐侠 本名
  • @WebServlet注解的解释和使用

    大家好 今天分享一下 WebServlet注解 首先 我们要知道 我们要写一个servlet程序 web xml里的配置项很重要 里面包含了很多关于类绑定 以及服务器资源的请求路径问题 就是注册 先把我这个看一遍 这个原生的servlet程
  • ubuntu解决matplotlib绘图中文显示问题

    首先来看一下没有解决问题前的样子 设置横纵坐标以及title的时候全都是显示的方框 这让我们很苦恼 那有没有什么办法解决呢 方法一 比较推荐方法一 一次解决 永久受益 后续不用再设置 1 首先下载Simhei ttf 这里不给下载链接了请自
  • K8s - Pod配置容器

    1 编写配置文件以及pod创建过程 root k8s master yaml cat ceph rbd deployment yaml apiVersion apps v1 kind Deployment metadata name ngi
  • 别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(1)

    别具一格 原创唯美浪漫情人节表白专辑 复制就可用 html5 css3 svg 表白爱心代码 1 一 前言 回眸之间 丰盈了岁月 涟漪了思绪 轻轻落笔 不写伤痕 不写仇怨 只写岁月经历领悟后的感恩与体会 说来有点尴尬 我一个奶奶级别的 却从
  • 《大数据导论》理解大数据

    本节书摘来自华章出版社 Spark大数据分析 核心概念 技术及实践 一书中的第1章 第1节 作者托马斯 埃尔 Thomas Erl 瓦吉德 哈塔克 Wajid Khattak 保罗 布勒 Paul Buhler 更多章节内容可以访问云栖社区
  • Unity_Shader_ Properties属性的赋值

    Shader Unlit vf2 in out 输入与输出 Properties MainColor 我是主颜色 Color 1 0 0 1 SubShader Pass CGPROGRAM pragma vertex vert pragm

随机推荐

  • Redis学习 - Tp6配置并使用redis图文详解 小皮面板(三)

    这篇文章主要介绍了Thinkphp6 配置并使用redis的方法 结合实例形式详细分析了Redis的安装 配置以及thinkphp6操作Redis的基本技巧 需要的朋友可以参考下 一 安装redis ThinkPHP内置支持的缓存类型包括f
  • 让ExtJs 2.02的例子也支持换肤

    今天在论坛看到有朋友问我 网站上的换肤功能是如何做的 其实换肤的方法在下载回来的例子中是已经存在的了 但是不知道为什么该功能在ext 2 02下并不可用 要加上换肤功能主要有两个步聚 1 在html页面 每一个例子 的body中间加上以下代
  • 动态软件测试是什么意思,什么是动态测试?

    什么是动态测试 1 概述 动态测试是建立在程序的实行进程傍边 根据对被被测对象内部情况的理解与否 分为黑盒测试盒白盒测试 黑盒测试又称为功能测试 数据驱动测试或基于规格说明的测试 这种测试不消理解被测试对象的内部情况 而依靠需要规格说明中的
  • L2-2 病毒溯源 (25 分)(Dfs详细解析)

    病毒容易发生变异 某种病毒可以通过突变产生若干变异的毒株 而这些变异的病毒又可能被诱发突变产生第二代变异 如此继续不断变化 现给定一些病毒之间的变异关系 要求你找出其中最长的一条变异链 在此假设给出的变异都是由突变引起的 不考虑复杂的基因重
  • curl: (51)Unable to communicate securely with peer

    最近公司做的项目需要联通另一个系统 对方给了个token 测试一下该token是否有效 因为是在Linux上 没有postman 只能通过curl命令发送网络请求 但是实际测试时 由于服务器上有些库的版本比较低 出现各种问题 写篇文章记录一
  • 论文翻译 —— Deep Reinforcement Learning from Human Preferences

    标题 Deep Reinforcement Learning from Human Preferences 文章链接 Deep Reinforcement Learning from Human Preferences blogpost L
  • linux无法引导 rescue 救援模式

    OS版本为 RHEL 7 查看当前引导设备为 dev sda 破坏MBR 执行 dd if dev zero of dev sda bs 446 count 1 重启系统 不能引导 使用光盘进入救援模式 进入troubleshooting
  • IDEA 中设置全局 hook 解决提交代码时 missing changeId 的问题

    背景 IDEA 下载好 Git 项目 安装好 Gerrit 插件后 提交代码时无法将代码 Push 到 Git 仓库 报 missing changeId 的错误 或者说报 rejected by remote 的错误 这是因为 IDEA
  • 判断密码是否合法 (PHP代码函数)

    判断密码是否合法 PHP代码函数 代码来源 Monxin config functions php function is passwd v pattern w 1 100 if preg match pattern v return tr
  • Unity 使用按键控制角色运动

    创建角色 创建一个脚本PlayerController 创建控制器 使用boolean值 脚本 using System Collections using System Collections Generic using UnityEng
  • MySQL实践——MySQL中支持的字符集和排序规则

    一 MySQL字符集概念 1 1 MySQL中的utf8和utf8mb4 我们常说 utf8 字符集表示一个字符需要使用1 4个字节 但是我们常用的一些字符使用1 3个字节就可以表示了 而在 MySQL 中字符集表示一个字符所用最大字节长度
  • 车载以太网新宠SomeIP及其在AutoSAR的应用

    作者结合自身的工作经验介绍SomeIP协议以及在AutoSAR中的实现 汽车不断智能化和网联化的趋势 使得原本的通讯方式 CAN 不堪重负 因此新的需求带来了新的技术 SomeIP应运而生 1 SomeIP的由来 随着汽车智能化和网络化的发
  • Problem E: C语言习题5.21--算法:汉诺塔

    Problem E C语言习题5 21 算法 汉诺塔 Time Limit 1 Sec Memory Limit 64 MB Description 汉诺塔 又称河内塔 问题是印度的一个古老的传说 开天辟地的神勃拉玛在一个庙里留下了三根金刚
  • 基于JSR181标准开发ActiveMQ与Petals ESB交互

    前一节讲到Petals ESB使用JMS连接ActiveMQ到总线 其中因为开发版本的不同和一些细节的配置不到 很难能够正确的使用JMS 如果遇到复杂的JMS需求时 这种方式操作太多 太发太多 而且不容易控制 Petals ESB 4 2支
  • 三列布局方式

    第一种 利用 overflow hidden 的特性 三栏的顺序分别为左 右 中 左右两栏分别设置宽度以及左浮动和右浮动 脱离普通流 这时如果让中间栏高度大于2个边栏会发现两边栏实际上是叠在 main 上面的 因为 main 是块状元素 独
  • 时间序列-异常检测(Anomaly Detection)(一):时间序列的特征工程

    一 介绍 异常检测 Anomaly detection 是目前时序数据分析最成熟的应用之一 定义是从正常的时间序列中识别不正常的事件或行为的过程 有效的异常检测被广泛用于现实世界的很多领域 例如量化交易 网络安全检测 自动驾驶汽车和大型工业
  • word保存为高分辨率图片(word2016)

    word保存为高分辨率图片 word2016 word和ppt转存为jpg或者png等格式的图片时 默认是标准压缩 那么如何实现高分辨率图片保存呢 可按照一下几个步骤来做 亲测有效 第一步 转存为高分辨率pdf 注意要在另存为对话框的选项里
  • python自动化测试教程-最新python版selenium3自动化测试使用说明教程详解

    selenium主要是用来做自动化测试 支持多种浏览器 爬虫中主要用来解决JavaScript渲染问题 模拟浏览器进行网页加载 当requests urllib无法正常获取网页内容的时候 一 声明浏览器对象 注意点一 Python文件名或者
  • 关于ASP.NET MVC与.NET CORE 的区别--小结

    简述关于ASP NET MVC与 NET CORE的区别 1 关于ASP NET 关于MVC 刚开始接触这个技术的时候我经常不理解他们的名字 我相信许多学ASP NET开发人员开始接触MVC应该也和我一样产生很多为什么 也会误认为认为MVC
  • 面面俱到的Java接口自动化测试实战_如何利用TestNG做接口自动化测试?Java+TestNG测试实例分享...

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