当前位置: 首页 > news >正文

【测试】自动化测试03(JUnit)

努力经营当下,直至未来明朗!

文章目录

  • JUnit
    • 一) 注解
      • 1. @Test
      • 2. @BeforeEach
      • 3. @BeforeAll
      • 4. @AfterEach
      • 5. @AfterAll
    • 二) 断言(Assertions类)
    • 三)用例的执行顺序
    • 四)参数化
    • 五)测试套件
    • 【补充】
  • 小结


今天搬砖不努力,明天低位不稳定!

JUnit

  1. 自动化是使用selenium脚本来实现的;JUnit是java的单元测试工具,只不过我们在实现自动化的时候需要借用一下下junit库中提供的一些方法。
  2. 期望写完自动化测试方法后可以直接进行调用运行。
  3. 使用junit5进行自动化的优化。
  4. junit5支持的java最低版本为8
  5. 如果之前已经下载过其他版本的junit,再下载junit5可能就会失败。此时需要先找到下载好的其他版本的junit删除后再下载junit5.(删除是在external libraries底下找到并 open in,然后删除目标的整个文件夹)
  6. 需要添加junit依赖(参考Gitee片段)

一) 注解

Junit中提供了非常强大的注解功能

1. @Test

1)表示该方法是测试方法,执行当前类的时候会自动执行该类下所有带@Test注解的用例。(一般来说一个方法就是一个测试用例)
2)当我们使用了junit之后,可以非常方便地看到本次执行了多少用例以及执行的结果。
3)如果方法使用static修饰,即使加上@Test注解也是无法执行的
33

2. @BeforeEach

1)表明当前方法需要在每个用例执行之前都执行一次
2)修饰的方法不是用例

3. @BeforeAll

1)当前的方法需要在当前类下所有用例执行之前执行一次
2)@BeforeAll修饰的方法必须是static修饰的静态方法
35
3)同样,修饰的方法不是用例
4)当@BeforeAll和@BeforeEach同时存在时,@BeforeAll修饰的方法先进行执行

4. @AfterEach

当前的方法需要在每个用例执行之后都执行一次

5. @AfterAll

1)当前的方法在当前类下所有的用例执行之后执行一次
2)当@AfterAll和@AfterEach同时存在时,@AfterAll修饰的方法最后执行
3)被该注解修饰的方法必须为静态方法
4)可以存放释放驱动对象的语言


二) 断言(Assertions类)

断言实际值和预期值是否符合,不要忘记在方法上加上@Test注解
36
37

  1. assertEquals(预期值, 实际值); 断言匹配
  2. assertNotEquals(预期值, 实际值); 断言不匹配
  3. assertTrue(参数必须有真假); 断言结果为真
  4. assertFalse(参数必须有真假); 断言结果为假
  5. assertNull(参数可以只有一个实际值,也可以有多个参数); 断言结果为空
  6. assertNotNull(实际值); 断言结果不为空

注:空字符串””不是null,String str=null才是null


三)用例的执行顺序

  1. 官方网站并没有明确说明用例默认的执行顺序的规则

  2. 发现:执行顺序并不是按照用例的编写顺序的
    此时可能会存在问题:如检查登录是需要按照顺序来进行的,如果顺序错误就可能会出现问题。
    0

  3. 用例执行顺序:
    1)通过order注解来排序:
    ① 在类之前加上@TestMethodOrder注解,表明当前类中的用例是按照order来进行排序的。
    ② 在每个用例上加上@Order注解
    ③ 每个用例上的Test注解不能删掉
    1

2)@TestMethodOrder中亦可以选择其他类对象,但是比较不常用,可以自行了解。


四)参数化

  1. 如进行登录页面测试时,账号、密码可能有多个,此时就需要将账号、密码进行参数化。

  2. 尽可能的通过一个用例、多组参数来模拟用户的行为。

  3. 在使用参数化注解之前需要先声明该方法为参数化方法@ParameterizedTest,然后通过注解提供数据来源。

  4. 单参数:需要在方法上加上@ParameterizedTest注解,然后再加上参数来源注解@ValueSource( )
    3

  5. @ValueSource( 数据类型方法 = {参数1,参数2,参数3, …} )
    ① 数据类型方法一般是在数据类型后加上一个s
    ② @ValueSource只支持单参数
    ③ @ValueSource支持的数据类型:
    参考官方文档(可以按下ctrl+f进行查找):JUnit5官方
    5

  6. 多参数:需要在方法上加上@ParameterizedTest注解,然后再加上参数来源注解@CsvSource( ) [在注解中手动编写数据源]
    6

  7. @CsvSource( {“一组数据,使用英文逗号间隔” , ”一组数据,使用英文逗号间隔”, “一组数据,使用英文逗号间隔”, …})

  8. 如果参数过多,直接写到@CsvSource中是不太好看的,所以可以写到一个.csv的文档中(借助excel,但是记得更改后缀名为.csv)

  9. 多参数使用csv文件作为数据来源:使用@CsvFileSource注解进行数据导入,每一横行为一组数据。

  10. 注意:csv文件的创建应该先使用电脑自带的excel而不是直接右键新建excel(因为会是wps),然后再另存为csv文件,否则可能会出现编译不通过等问题。
    7

  11. 动态参数方法:动态方法提供数据源
    1)数据源方法Stream参数:如果返回类型一致就直接具体类型,不一致就使用组合类型Arguments
    8
    2)当我们不指定数据源方法名时,会自动找跟用例方法名同名的静态方法
    9

  12. 使用了参数化注解@ParameterizedTest的方法不能再用@Test注解,@Test注解只能作用在非参数话的用例上。


五)测试套件

  1. 如果想要一次运行整个包下的所有类,此时就需要使用测试套件
  2. 先创建一个类,通过@Suite注解表示该类为测试套件类(而不是测试类)。
    1)然后使用@SelectClasses注解指定要测试的类
    10
    在指定的类中想要运行的用例必须要被@Test注解(除参数化的用例外)
    2)指定包名来运行该包下的所有测试用例 @SelectPackages
    在指定的包中想要运行的用例必须要被@Test注解(除参数化的用例外)
    11
    如果使用包名来指定运行的范围,那么该包下所有的测试类的命名都要以Test/Tests结尾(注意:T必须大写)

【补充】

  1. 如果在自动化测试过程中因为输入本来就错误的而报错了,此时并不是测试完成,应该要进行断言判断。
    如:根据登录错误后or登录正确后会出现的页面的元素进行判定。
  2. 隐式等待和显式等待不能同时使用,同时使用可能会出现意想不到的等待结果。
  3. 有时候隐式等待和显式等待不生效/达不到目的的时候可以加上强制等待。

小结

  1. 注解
  2. @Test测试用例
  3. 断言
  4. 用例参数化(单参、多参、动态化)
  5. 测试套件(类、包)

yy

相关文章:

【测试】自动化测试03(JUnit)

努力经营当下,直至未来明朗! 文章目录JUnit一) 注解1. Test2. BeforeEach3. BeforeAll4. AfterEach5. AfterAll二) 断言(Assertions类)三)用例的执行顺序四)参数化五)测试…...

《计算机视觉和图像处理简介 - 中英双语版》:神经网络中的激活函数 ReLU vs Sigmoid

文章大纲 Neural Network Module and Training Function创建数据集Define Neural Network, Criterion function, Optimizer and Train the ModelTest Sigmoid and ReluAnalyze Results参考文献与学习路径在本文中,我们使用含有两个隐藏层的神经网络基于MNIST数据集测试Sigmoid…...

(三十七)大白话SQL标准中对事务的4个隔离级别,都是如何规定的呢?

之前我们给大家讲了数据库中多个事务并发时可能产生的几种问题,包括了脏写、脏读、不可重复读、幻读,几种问题 那么针对这些多事务并发的问题,实际上SQL标准中就规定了事务的几种隔离级别,用来解决这些问题。 注意一下&#xff…...

全国计算机等级考试三级网络技术考试大纲(2022年版)

全国计算机等级考试三级网络技术考试大纲(2022年版)基本要求 1. 了解大型网络系统规划、管理方法; 2. 具备中小型网络系统规划、设计的基本能力; 3. 掌握中小…...

服务器部署—若依【vue】如何部署到nginx里面?nginx刷新页面404怎么办?【完美解决建议收藏】

服务器部署项目我们大家都会遇到,但是有些铁子会遇到很多的问题,比如前端部署nginx如何操作? 前端有单纯的静态页面、还有前后端分离的项目;这里博主直接分享最牛最到位的前后端分离项目的前端部署到nginx上面,以若依项…...

算法练习(特辑)算法常用的数据结构、集合和方法总结

一、栈stack 1、初始化&#xff1a;Stack<Integer> st new Stack<Integer>(); 2、常用方法&#xff1a; boolean empty() &#xff1a;测试堆栈是否为空。Object peek( )&#xff1a;查看堆栈顶部的对象&#xff0c;但不从堆栈中移除它。Object pop( )&#xff…...

Apk转Aab(Android-App-Bundle)

这篇文章是参考Apk转Aab(Android-App-Bundle)_YoungBillsohu的博客-CSDN博客 基本照着这个大佬的步骤来就行&#xff0c;但是要注意的是apkTool最好是下新的&#xff0c;否则&#xff0c;会出现说一堆无语的错误&#xff0c;然后导致AAPT2关联资源的时候报错 类似这样的&#…...

大学物理期末大题专题训练总结-热学大题

今天下午去找郑老师权老师等去答疑&#xff0c;老师说大题会考查得比较套路&#xff0c;计算不难。明天就要考试了&#xff0c;再把大题常见题型总结一下&#xff0c;热学这块我做完了蓝本的热学题目&#xff0c;发现了如下三种&#xff1a;有关循环过程曲线的&#xff1a;给出…...

有趣的Hack-A-Sat黑掉卫星挑战赛——卫星平台内存dump

国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加&#xff0c;太空已经成为国家赖以生存与发展的命脉之一&#xff0c;凝聚着巨大的国家利益&#xff0c;太空安全的重要性日益凸显[1]。而在信息化时代&#xff0c;太空安…...

OAK相机如何将yoloV8模型转换成blob格式?

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…...

Python解题 - CSDN周赛第32期 - 运输石油(三维背包)

上期周赛因为最后一题出现bug&#xff0c;再加上都是经典的模板题&#xff0c;问哥就懒得写题解了。 本期也是有两道考过的题目&#xff0c;不过最后一题因为考到了背包问题的特殊类型&#xff0c;还是值得拿出来记个笔记。 第一题&#xff1a;传奇霸业 传奇霸业&#xff0c;是…...

JVM - G1垃圾收集器深入剖析

​​​​​​​1、G1收集器概述 HotSpot团队一直努力朝着高效收集、减少停顿(STW: Stop The World)的方向努力&#xff0c;也贡献了从串行Serial收集器、到并行收集器Parallerl收集器&#xff0c;再到CMS并发收集器&#xff0c;乃至如今的G1在内的一系列优秀的垃圾收集器。 G…...

角度制与弧度制的相互转换np.deg2radnp.rad2deg

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】角度制与弧度制的相互转换np.deg2radnp.rad2deg选择题以下关于python代码表述错误的一项是?import numpy as npprint("【执行】np.rad2deg(np.pi)")print(np.rad2deg(np.pi))print(&…...

【SAP Abap】X-DOC:SAP ABAP 语法更新之一(Open SQL新增特性)

SAP ABAP 语法更新之一&#xff08;Open SQL新增特性&#xff09;1、前言2、演示1、前言 自从 SAP 推出 SAP ON HANA&#xff0c;与之相随的 AS ABAP NW 7.40 版本以后&#xff0c;ABAP 语法也有了较多的更新&#xff0c;本篇对 Open Sql的语法更新部分做一个DEMO演示。 NW 7…...

【改进灰狼优化算法】改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密…...

Linux C代码获取线程ID

Linux C代码获取线程ID gettid可以获取线程id,但是通过man gettid可以看到下面这两句 也就是说glibc没有为这个gettid封装系统调用&#xff0c;需要使用syscall。 #define _GNU_SOURCE#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>pi…...

基本密码技术

AESAES取代DES&#xff0c;是一种对称加密技术&#xff0c;分为AES-128/192/256, 其分组长度固定为128b&#xff0c;若最后一个分组长度不够&#xff0c;需要补全至128b长度。所支持的秘钥长度分别为128b/192b/256b.分组密码模式AES是对明文进行分组之后逐块进行加密&#xff0…...

【力扣周赛#334】6369. 左右元素和的差值 + 6368. 找出字符串的可整除数组 + 6367. 求出最多标记下标

目录 6369. 左右元素和的差值 - 前缀后缀和 ac 6368. 找出字符串的可整除数组 - 操作余数ac 6367. 求出最多标记下标 - 二分答案 贪心 6369. 左右元素和的差值 - 前缀后缀和 ac class Solution {public int[] leftRigthDifference(int[] nums) {int nnums.length;int[] re…...

行测-判断推理-图形推理-位置规律-平移

位置平移&#xff0c;选D空白每次顺时针移动一格&#xff0c;黑色圆每次逆时针移动2格选C两个黑色⚪&#xff0c;每次顺时针移动2格白色⚪&#xff0c;先到对角位置&#xff0c;再顺时针移动一格选B三角形的底&#xff0c;顺时针移动三角形的顶点&#xff0c;在正方形的内部顺时…...

数据库基础知识(一)

目录 什么是数据库 表&#xff0c;列&#xff0c;行 主键 什么是SQL 什么是数据库 数据库(database):保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;。 数据库软件(DMBS):又名数据库管理系统。数据库是通过数据库软件创建和操纵的容器。因为你并…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...