使用Java+Maven+TestNG进行自动化测试

写作背景:有点Java基础的功能测试人员(点点点工程师),所在项目有"去QE"的趋势,所以自己要多点亮其他技能,让路子走宽点。
简单说一下去QE:项目测试不再有专职的测试工程师来做,而是由开发工程师自己来进行。遵循“谁开发、谁测试、谁上线、谁On call”的原则。

一、Java、TestNG、JSONAssert都是什么

1.1、Java基础教程

我先复习Java的基本简介、语法、写法、使用。参考资料

  • 安装java 开发工具包:JDK8 或更高版本
  • 配置环境变量
  • 安装java开发工具:IDEA
  • Java基本语法:对象、类、实例、方法、实例变量、标识符【类名| 变量名| 方法名】、修饰符【用于修饰类中方法和属性】、变量【局部变量| 类变量/静态变量| 成员变量/非静态变量】、数组、枚举、关键字、注释、空行、继承、接口。
  • Java命名规范:大小写敏感、类名首字母大写的驼峰式、方法名首字母小写的驼峰式、源文件名必须和类名相同
  • Java基本概念:多态、集成、封装、抽象、类、对象、实例、方法、重载等等
  • Java基本类型(八种):byte、short、int、long、float、double、boolean、char
  • Java的运算符、循环结构、条件语句、switch case、Number & Math 类、Character 类、String 类、StringBuffer 和 StringBuilder 类、数组、日期时间、正则表达式、方法、流(Stream)、文件(File)和IO、Scanner 类、异常处理等等
  • Java的数据结构、集合框架、ArrayList、LinkedList、HashSet、HashMap、Iterator(迭代器)、Object 类、泛型、序列化等等
  • Java的网络编程、发送邮件 、多线程编程 、Applet 基础、文档注释、实例等等
1.2、TestNG
  • TestNG基本解释:(即Testing,Next Generation,即下一代测试技术)是Java中的一个开源自动化测试框架。它的灵感来源于JUnit。它的目的是优于JUnit,尤其是在用于测试集成多类时。它借鉴了Java的注解。它旨在涵盖所有类别的测试:单元,功能,端到端,集成等…
    详细使用说明请参考:TestNG官方链接。
  • TestNG基本特点:【注解】、【使用Java面向对象的功能】、【支持综合类测试】、【独立的编译时代码自检审核和运行时配置/数据信息】、【支持编译测试不同优先级、不同类别的用例】、【灵活的插件API】、【支持多线程测试】等
  • 使用注解的好处:
    a、TestNG通过查找注释/注解来识别它感兴趣的方法。 因此,方法名称不限于任何模式或格式
    b、可以将其他参数传递给注释。
    c、注释是强类型的,所以编译器会马上标记任何错误。
    d、测试类不再需要扩展任何东西(如TestCase,对于JUnit3)。
1.3、TestNG支持的注释列表:
注解描述
@BeforeSuite             在该套件的所有测试都运行在注释的方法之前,仅运行一次。
@AfterSuite在该套件的所有测试都运行在注释方法之后,仅运行一次。
@BeforeClass在调用当前类的第一个测试方法之前运行,注释方法仅运行一次。
@AfterClass在调用当前类的第一个测试方法之后运行,注释方法仅运行一次
@BeforeTest注释的方法将在属于<test>标签内的类的所有测试方法运行之前运行。
@AfterTest注释的方法将在属于<test>标签内的类的所有测试方法运行之后运行。
@BeforeGroups配置方法将在之前运行组列表。 此方法保证在调用属于这些组中的任何一个的第一个测试方法之前不久运行。
@AfterGroups此配置方法将在之后运行组列表。该方法保证在调用属于任何这些组的最后一个测试方法之后不久运行。
@BeforeMethod注释方法将在每个测试方法之前运行。
@AfterMethod注释方法将在每个测试方法之后运行。
@DataProvider标记一种方法来提供测试方法的数据。注释方法必须返回一个Object [] [],其中每个Object []可以被分配给测试方法的参数列表。DataProvider接收数据的@Test方法需要使用与此注释名称相等的dataProvider名称。
@Factory将一个方法标记为工厂,返回TestNG将被用作测试类的对象。 该方法必须返回Object []
@Listeners定义测试类上的监听器。
@Parameters描述如何将参数传递给 @Test 方法。
@Test将类或方法标记为测试的一部分。
1.4、JSONAssert
  • 将字符串转换为JSON对象,并将逻辑结构和数据与实际JSON进行比较。一个专注于理解 JSON 数据并使用该数据编写复杂 JUnit 测试的库。
  • 当strict(严格模式)设置为false(推荐设置)时,它会允许数据重排序以及结果可扩展(只要对比的JSON包含了所有预期JSON的所有字段),从而使测试不那么脆弱。建议关掉严格模式,除非你要求比较的JSON与预期的JSON中数组顺序相同,或者要求两者具有相同的字段。
/**
 * Asserts that the JSONObject provided matches the expected string.  If it isn't it throws an
 * {@link AssertionError}.
 *
 * @param expectedStr Expected JSON string
 * @param actual JSONObject to compare
 * @param strict Enables strict checking
 * @throws JSONException JSON parsing error
 */
public static void assertEquals(String expectedStr, JSONObject actual, boolean strict)
        throws JSONException {
    assertEquals(expectedStr, actual, strict ? JSONCompareMode.STRICT : JSONCompareMode.LENIENT);
}

二、搭建框架(创建maven项目,配置testng依赖)

2.1、创建普通maven项目即可

2.2、在pom.xml中配置依赖
<dependencies>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>${testng.version}</version>
    </dependency>
</dependencies>

2.3、下载依赖(pom文件重新加载项目)

三、创建Demo测试类和方法

直接复制官网中的simple:

package com.demo.apitest.testcase;

import org.testng.annotations.*;

public class DemoTest {

    @BeforeClass
    public void setUp() {
        // code that will be invoked when this test is instantiated
    }

    @Test(groups = {"fast"})
    public void aFastTest() {
        System.out.println("Fast test");
    }

    @Test(groups = {"slow"})
    public void aSlowTest() {
        System.out.println("Slow test");
    }
}

四、两种方式运行(直接运行、xml方式运行)

4.1、直接运行

直接运行

4.2、xml方式运行

IDEA创建的项目默认不会生成testng.xml(用于控制测试执行的执行)文件,就需要在根目录手动创建该文件,同时需要在pom.xml文件中关联设置testng.xml。testng.xml写法参考官网:官网中testng.xml
基本格式如下:

  • 每一个xml文件只能有一个suite,代表的是一个测试集;
  • 一个suite中可包含多个test,默认情况下,多个test会顺序执行。若希望多个test以不可预知的顺序运行,可将preserve-order 属性设置为false;
  • 每一个test里边可以写需要运行的测试用例的class。如果不写,默认会跑所有的测试用例;
  • 每个class可以指定要执行哪些用例,不执行哪些用例。如果不写method,则默认本类里的全部用例都执行。
    新建testng.xml
    pom文件中关联testng.xml
    xml方式运行

五、实际应用中的常见用例写法

常见项目结构

├── src
│    ├── main
│    │    ├── java
│    │    │     └── com.demo.apitest           # 框架公共服务模块
│    │    │             └── annotations              # 注释
│    │    │             └── api                      # 后端接口定义
│    │    │             └── enums                    # 枚举
│    │    │             └── model                    # Model
│    │    │             └── service                  # 公共方法
│    │    │             └── utils                    # 公共工具方法
│    │    └── resources                              
│    │          ├── driver                           # selenium的chrome驱动,用于本地登陆获取cookie
│    │          └── application.yml                  # 配置文件
│    └── test
│         ├── java
│         │     ├── com.demo.apitest           # 框架公共服务模块
│         │     │      └── testcase                  # 接口测试脚本
│         │     └── MyBaseTestNg.java                # testng基础测试类,所有测试脚本的父类
│         └── resources                              
│               └── testdata                         # 接口测试数据
└── testng.xml                                 # testng测试套件配置

延伸下,在src.main.resources 目录下可创建一个 application .yml文件,用于配置公共参数,普通类型参数可使用 @value注解获取,list类型参数可使用@ConfigurationProperties注解获取

/ / T o D o L i s t 待补充 \color{red}{//ToDoList待补充} //ToDoList待补充

六、扩展:TestNG的常见测试场景

  • 预期异常测试
  • 忽略测试
  • 超时测试
  • 分组测试
  • 套件测试(一起运行多个测试类)
  • 依赖测试
  • 参数化测试
  • 参数测试实例

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络——40各个层次的安全性

各个层次的安全性 安全电子邮件 Alice需要发送机密的报文m给Bob Alice 产生随机的对称秘钥&#xff0c; K s K_s Ks​使用 K s K_s Ks​对报文进行加密&#xff08;为了效率&#xff09;对 K s K_s Ks​使用Bob的公钥进行加密发送 K s ( m ) K_s(m) Ks​(m)和 K B ( K S ) K…

小程序/app/H5多端圈子社区论坛系统交友/社交/陌生人社交即时聊天私域话题社区论坛 行业圈子小程序 微信社区小程序圈子论坛社区小程序

项目介绍 这是一个社区论坛类小程序项目源码&#xff0c;可以实现用户发送自定义图文内容&#xff0c;点赞&#xff0c;评论&#xff0c;回复&#xff0c;记录评论过的帖子&#xff0c;记录发表过的帖子&#xff0c;左滑删除&#xff0c;在线实时接收消息&#xff0c;离线接收…

MySQL高级篇(索引概述、优缺点、结构 B+Tree)

目录 1、索引概述 2、索引优缺点 3、索引的结构 1、索引概述 介绍&#xff1a;索引&#xff08;index&#xff09;是帮助MySQL 高效获取数据 的 数据结构&#xff08;有序&#xff09;。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数…

分布式系统:缓存与数据库一致性问题

前言 缓存设计是应用系统设计中重要的一环&#xff0c;是通过空间换取时间的一种策略&#xff0c;达到高性能访问数据的目的&#xff1b;但是缓存的数据并不是时刻存在内存中&#xff0c;当数据发生变化时&#xff0c;如何与数据库中的数据保持一致&#xff0c;以满足业务系统…

java实现TCP交互

服务器端 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.PriorityQueue; import java.util.Scanner;public class TCP_Serv…

(文章复现)考虑网络动态重构的分布式电源选址定容优化方法

参考文献&#xff1a; [1]朱俊澎,顾伟,张韩旦,等.考虑网络动态重构的分布式电源选址定容优化方法[J].电力系统自动化,2018,42(05):111-119. 1.摘要 以投资周期经济收益最高为目标&#xff0c;基于二阶锥规划提出了一种考虑网络动态重构的分布式电源选址定容优化方法。首先&am…

OpenStack (T)部署trove

环境&#xff1a;Openstack&#xff08;T&#xff09; CentOS Linux release 7.9.2009 (Core) 正文&#xff1a; 1.控制节点安装trove软件包 # yum install openstack-trove-guestagent openstack-trove python-troveclient openstack-trove-ui –y2.创建数据库&#xff0c…

动态代理 --java学习笔记

什么是动态代理&#xff1f; 当一个类的很多方法都存在重复冗杂的部分&#xff0c;就可以使用代理来处理那些重复部分的任务&#xff0c;到了各自的实现部分再丢回给原方法处理&#xff0c;同时也可以提高方法的扩展性&#xff0c;而动态则是指在运行时动态地创建代理对象&…

【高德地图笔试题汇总】2024-04-11-高德地图春招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新高德地图近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&…

【感谢】心怀感恩,共赴知识之旅——致每一位陪伴我突破百万总访问量的您

小伙伴朋友们&#xff1a; 此刻&#xff0c;我怀着无比激动与深深感激的心情&#xff0c;写下这篇特别的博文。今天&#xff0c;我的CSDN总访问量成功突破了百万大关&#xff0c;这不仅是一个数字的跨越&#xff0c;更是你们对我的支持、信任与鼓励的有力见证。在此&#xff0…

前端Vue自定义勾选协议组件的开发与应用

摘要&#xff1a; 随着前端技术的不断发展&#xff0c;用户体验成为了软件开发中的关键要素。在登录、注册等场景中&#xff0c;勾选协议是常见的需求。本文旨在介绍一款基于 Vue.js 的自定义勾选协议组件的开发与应用&#xff0c;该组件适用于多种场景&#xff0c;并且具备良…

图形学基础:二维三维刚体的移动、缩放和旋转矩阵

一、二维 1.1 缩放矩阵 x&#xff0c;y分别表示在x轴&#xff0c;y轴缩放的倍数 示例&#xff1a; 点(2,1)在x&#xff0c;y轴上分别缩放x倍&#xff0c;y倍 1.2 平移矩阵 x&#xff0c;y分表表示在x轴&#xff0c;y轴上移动的距离 示例&#xff1a;点&#xff08;2,1&#xf…

C语言——指针的高级引用

目录 1.概述 2.虚拟内存空间 2.1存储期限 2.2栈区管理 2.3堆区域的使用 3.动态内存分配和释放&#xff08;重点&#xff09; 3.1通用指针类型void 3.2内存分配malloc函数 3.2.1 malloc函数&#xff08;memory allocation&#xff09;&#xff08;注意len*size&#xff…

工智能图像降噪软件 ON1 NoNoise AI 2024 for Mac激活版

ON1 NoNoise AI 2024 for Mac是一款专为Mac用户设计的先进人工智能图像降噪软件。其核心功能在于能够利用机器学习技术&#xff0c;快速并智能地消除图像中的噪点&#xff0c;无论是亮度噪点还是颜色噪点&#xff0c;都能得到显著的改善。 软件下载&#xff1a;ON1 NoNoise AI …

【高项】信息化发展

目录 1.1 信息与信息化 1.1.1 信息 1.信息的定义 2.信息的特征与质量 1.1.2 信息系统 1.信息系统及其特性 2.信息系统生命周期 1.1.3 信息化 1.信息化内涵 2.信息化体系&#xff08;口诀&#xff1a;上应下技左人右规&#xff0c;中资网&#xff09; 1.2 现代化基础…

Vue笔记 2

数据代理 数据代理&#xff1a;通过一个对象代理对另一个对象中属性的操作&#xff08;读/写&#xff09; let obj{x:100} let obj2{y:200} Object.defineProperty(obj2,x,{get(){return obj.x},set(value){obj.x value} })Vue中的数据代理 Vue中的数据代理&#xff1a; 通…

【go从入门到精通】作用域,包详解

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

u盘为什么一插上电脑就蓝屏,u盘一插电脑就蓝屏

u盘之前还好好的,可以传输文件,使用正常,但是最近使用时却出现问题了。只要将u盘一插入电脑,电脑就显示蓝屏。u盘为什么一插上电脑就蓝屏呢?一般,导致的原因有以下几种。一,主板的SATA或IDE控制器驱动损坏或安装不当;二,电脑系统分区存在磁盘或文件故障错误;三,电脑中…

【力扣】125.验证回文串

刷题&#xff0c;过了真的好有成就感&#xff01;&#xff01;&#xff01; 题解&#xff1a; 根据题目要求&#xff0c;我们需要处理一下几个问题&#xff1a; 将大写字母转变成小写对原来的字符串进行处理&#xff0c;只要字母和数字考虑只有一个和字符串为空的情况 1、将…

element-ui backtop 组件源码分享

今日简单分享 backtop 组件的源码实现&#xff0c;从以下三个方面&#xff1a; 1、backtop 组件页面结构 2、backtop 组件属性 3、backtop 组件事件 一、backtop 组件页面结构 二、backtop 组件属性 2.1 target 属性&#xff0c;触发滚动的对象&#xff0c;类型 string&am…