接口自动化入门-TestNg
目录
- 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生成测试报告
相关文章:

接口自动化入门-TestNg
目录1.TestNg介绍2、TestNG安装3、TestNG使用3.1 编写测试用例脚本3.2 创建TestNG.xml文件(1)创建testng.xml文件(2)修改testng.xml4、测试报告生成1.TestNg介绍 TestNg是Java中开源的自动化测试框架,灵感来源于Junit…...

Spring AOP —— 详解、实现原理、简单demo
目录 一、Spring AOP 是什么? 二、学习AOP 有什么作用? 三、AOP 的组成 3.1、切面(Aspect) 3.2、切点(Pointcut) 3.3、通知(Advice) 3.4、连接点 四、实现 Spring AOP 一个简…...

(蓝桥真题)异或数列(博弈)
题目链接:P8743 [蓝桥杯 2021 省 A] 异或数列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 样例输入: 4 1 1 1 0 2 2 1 7 992438 1006399 781139 985280 4729 872779 563580 样例输出: 1 0 1 1 分析:容易想到对于异或最大值…...

4万字数字政府建设总体规划方案WORD
本资料来源公开网络,仅供个人学习,请勿商用。部分资料内容: 我省“数字政府”架构 (一) 总体架构。 “数字政府”总体架构包括管理架构、业务架构、技术架构。其中,管理架构体现“管运分离”的建设运营模式…...
CCF/CSP 201709-2公共钥匙盒100分
试题编号:201709-2试题名称:公共钥匙盒时间限制:1.0s内存限制:256.0MB问题描述:问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥…...
【OC】Blocks模式
1. Block语法 Block语法完整形式如下: ^void (int event) {printf("buttonId:%d event%d\n", i, event); }完整形式的Block语法与一般的C语言函数定义相比,仅有两点不同。 没有函数名。带有“^”(插入记号)。 因为O…...

软件设计师教程(七)计算机系统知识-操作系统知识
软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(…...

蓝桥杯2023/3/2
1. 小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最…...

【IoT】创业成功不可或缺的两个因素:能力和趋势
今天就来谈谈能力和趋势究竟哪个更重要的问题。 在谈成功的十大要素时,我曾经讲到: 一命、二运、三风水,这三个要素几乎不涉及任何个人的努力。 而趋势跟这三个要素又是息息相关的,这也类似雷军所说的飞猪理论。 只要风足够大&…...

2020蓝桥杯真题日期格式 C语言/C++
问题描述 小蓝要处理非常多的数据, 其中有一些数据是日期。 在小蓝处理的日期中有两种常用的形式: 英文形式和数字形式。 英文形式采用每个月的英文的前三个宁母作为月份标识, 后面跟两位数字 表示日期, 月份标识第一个字母大写, 后两个字母小写, 日期小于 10 时要补 前导 0s…...

总时差与自由时差
定义总时差(总浮动时间)(TF,Total Free Time,不耽误项目总进度)LS(Latest Start)-ES(Earliest Start)LF(Latest Finish)-EF࿰…...
LeetCode两个数组的交集-跳跃游戏- 最长有效括号
两个数组的交集 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 示例 2: 输入&…...
mysql普通索引与唯一索引怎么选择
学习mysql普通索引与唯一索引选择记录总结,学习链接:http://gk.link/a/11YG8从mysql查询操作分析:普通索引:查到满足条件的第一条记录后,还会继续查找下一条记录,直到出现满足条件的记录出现后停止检索唯一…...

JavaWeb开发(三)3.5——Java的反射机制
一、反射机制的概念 指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法。这种动态获取信息,及动态调用对象方法的功能叫java语言的反射机制。 Java反射机制的核心是在程序运行时动…...

Python每日一练(20230305)
目录 1. 正则表达式匹配 ★★★ 2. 寻找旋转排序数组中的最小值 II ★★★ 3. 删除排序链表中的重复元素 II ★★ 1. 正则表达式匹配 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 . 和 * 的正则表达式匹配。 . 匹配任意单个字符* 匹配零个或多个…...

SpringBoot三种方法实现定时发送邮件的案例
前言 小编我将用CSDN记录软件开发之路上所学的心得与知识,有兴趣的小伙伴可以关注一下!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!让我们在成长的道路上互相学习,让我们共…...

opengl、opengl es、webgl介绍与opengl开发入门
1、OpenGL OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。OpenGL的高效实现(利用了图形加速硬件)存在于Windo…...

Vue3之组件间传值
何为组件间传值 在Vue3之组件文章中,我们学会了定义使用组件,但是我们似乎还缺少什么将组件之间联系起来,说到组件之间的联系就不得不提组件间的传值,而组件间的传值其实也不难理解,就是如何在子组件中接收到父组件传…...

Windows10下使用CMake编译ITK5.2.1步骤
编译环境:Windows10VS2017Cmak3.24.0ITK5.2.1 编译步骤: 1、下载ITK到本地:ITK官网Download | ITK,ITK5.2.1下载地址 https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.2.1/InsightToolkit-5.2.1.zip …...

字符串模式匹配,经典KMP算法你还不会?我可不允许你不会!
文章目录重点1. 简单模式匹配算法2. 部分匹配值PM的算法(Move j-1 PM[j-1])3. 部分匹配值PM的两次改进(Move j-next[j])4. 快速得到next数组5. KMP匹配算法重点 童鞋们看网上讲解的时候一定要分清楚序列是从0开始还是从1开始&…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...