【测试】自动化测试03(JUnit)
努力经营当下,直至未来明朗!
文章目录
- JUnit
- 一) 注解
- 1. @Test
- 2. @BeforeEach
- 3. @BeforeAll
- 4. @AfterEach
- 5. @AfterAll
- 二) 断言(Assertions类)
- 三)用例的执行顺序
- 四)参数化
- 五)测试套件
- 【补充】
- 小结
今天搬砖不努力,明天低位不稳定!
JUnit
- 自动化是使用selenium脚本来实现的;JUnit是java的单元测试工具,只不过我们在实现自动化的时候需要借用一下下junit库中提供的一些方法。
- 期望写完自动化测试方法后可以直接进行调用运行。
- 使用junit5进行自动化的优化。
- junit5支持的java最低版本为8
- 如果之前已经下载过其他版本的junit,再下载junit5可能就会失败。此时需要先找到下载好的其他版本的junit删除后再下载junit5.(删除是在external libraries底下找到并 open in,然后删除目标的整个文件夹)
- 需要添加junit依赖(参考Gitee片段)
一) 注解
Junit中提供了非常强大的注解功能
1. @Test
1)表示该方法是测试方法,执行当前类的时候会自动执行该类下所有带@Test注解的用例。(一般来说一个方法就是一个测试用例)
2)当我们使用了junit之后,可以非常方便地看到本次执行了多少用例以及执行的结果。
3)如果方法使用static修饰,即使加上@Test注解也是无法执行的
2. @BeforeEach
1)表明当前方法需要在每个用例执行之前都执行一次
2)修饰的方法不是用例
3. @BeforeAll
1)当前的方法需要在当前类下所有用例执行之前执行一次
2)@BeforeAll修饰的方法必须是static修饰的静态方法
3)同样,修饰的方法不是用例
4)当@BeforeAll和@BeforeEach同时存在时,@BeforeAll修饰的方法先进行执行
4. @AfterEach
当前的方法需要在每个用例执行之后都执行一次
5. @AfterAll
1)当前的方法在当前类下所有的用例执行之后执行一次
2)当@AfterAll和@AfterEach同时存在时,@AfterAll修饰的方法最后执行
3)被该注解修饰的方法必须为静态方法
4)可以存放释放驱动对象的语言
二) 断言(Assertions类)
断言实际值和预期值是否符合,不要忘记在方法上加上@Test注解。
- assertEquals(预期值, 实际值); 断言匹配
- assertNotEquals(预期值, 实际值); 断言不匹配
- assertTrue(参数必须有真假); 断言结果为真
- assertFalse(参数必须有真假); 断言结果为假
- assertNull(参数可以只有一个实际值,也可以有多个参数); 断言结果为空
- assertNotNull(实际值); 断言结果不为空
注:空字符串””不是null,String str=null才是null
三)用例的执行顺序
-
官方网站并没有明确说明用例默认的执行顺序的规则
-
发现:执行顺序并不是按照用例的编写顺序的。
此时可能会存在问题:如检查登录是需要按照顺序来进行的,如果顺序错误就可能会出现问题。
-
用例执行顺序:
1)通过order注解来排序:
① 在类之前加上@TestMethodOrder
注解,表明当前类中的用例是按照order来进行排序的。
② 在每个用例上加上@Order
注解
③ 每个用例上的Test注解不能删掉
2)@TestMethodOrder中亦可以选择其他类对象,但是比较不常用,可以自行了解。
四)参数化
-
如进行登录页面测试时,账号、密码可能有多个,此时就需要将账号、密码进行参数化。
-
尽可能的通过一个用例、多组参数来模拟用户的行为。
-
在使用参数化注解之前需要先声明该方法为
参数化方法@ParameterizedTest
,然后通过注解提供数据来源。 -
单参数:需要在方法上加上@ParameterizedTest注解,然后再加上参数来源注解
@ValueSource( )
-
@ValueSource( 数据类型方法 = {参数1,参数2,参数3, …} )
① 数据类型方法一般是在数据类型后加上一个s
② @ValueSource只支持单参数
③ @ValueSource支持的数据类型:
参考官方文档(可以按下ctrl+f进行查找):JUnit5官方
-
多参数:需要在方法上加上@ParameterizedTest注解,然后再加上参数来源注解
@CsvSource( )
[在注解中手动编写数据源]
-
@CsvSource( {“一组数据,使用英文逗号间隔” , ”一组数据,使用英文逗号间隔”, “一组数据,使用英文逗号间隔”, …})
-
如果参数过多,直接写到@CsvSource中是不太好看的,所以可以写到一个.csv的文档中(借助excel,但是记得更改后缀名为.csv)
-
多参数使用csv文件作为数据来源:使用
@CsvFileSource
注解进行数据导入,每一横行为一组数据。 -
注意:csv文件的创建应该先使用电脑自带的excel而不是直接右键新建excel(因为会是wps),然后再另存为csv文件,否则可能会出现编译不通过等问题。
-
动态参数方法:动态方法提供数据源
1)数据源方法Stream参数:如果返回类型一致就直接具体类型,不一致就使用组合类型Arguments。
2)当我们不指定数据源方法名时,会自动找跟用例方法名同名的静态方法
-
使用了参数化注解@ParameterizedTest的方法不能再用@Test注解,@Test注解只能作用在非参数话的用例上。
五)测试套件
- 如果想要一次运行整个包下的所有类,此时就需要使用测试套件
- 先创建一个类,通过
@Suite
注解表示该类为测试套件类(而不是测试类)。
1)然后使用@SelectClasses
注解指定要测试的类
在指定的类中想要运行的用例必须要被@Test注解(除参数化的用例外)
2)指定包名来运行该包下的所有测试用例 @SelectPackages
在指定的包中想要运行的用例必须要被@Test注解(除参数化的用例外)
如果使用包名来指定运行的范围,那么该包下所有的测试类的命名都要以Test/Tests结尾(注意:T必须大写)
【补充】
- 如果在自动化测试过程中因为输入本来就错误的而报错了,此时并不是测试完成,应该要进行断言判断。
如:根据登录错误后or登录正确后会出现的页面的元素进行判定。 - 隐式等待和显式等待不能同时使用,同时使用可能会出现意想不到的等待结果。
- 有时候隐式等待和显式等待不生效/达不到目的的时候可以加上强制等待。
小结
- 注解
- @Test测试用例
- 断言
- 用例参数化(单参、多参、动态化)
- 测试套件(类、包)
相关文章:

【测试】自动化测试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标准中就规定了事务的几种隔离级别,用来解决这些问题。 注意一下ÿ…...
全国计算机等级考试三级网络技术考试大纲(2022年版)
全国计算机等级考试三级网络技术考试大纲(2022年版)基本要求 1. 了解大型网络系统规划、管理方法; 2. 具备中小型网络系统规划、设计的基本能力; 3. 掌握中小…...

服务器部署—若依【vue】如何部署到nginx里面?nginx刷新页面404怎么办?【完美解决建议收藏】
服务器部署项目我们大家都会遇到,但是有些铁子会遇到很多的问题,比如前端部署nginx如何操作? 前端有单纯的静态页面、还有前后端分离的项目;这里博主直接分享最牛最到位的前后端分离项目的前端部署到nginx上面,以若依项…...
算法练习(特辑)算法常用的数据结构、集合和方法总结
一、栈stack 1、初始化:Stack<Integer> st new Stack<Integer>(); 2、常用方法: boolean empty() :测试堆栈是否为空。Object peek( ):查看堆栈顶部的对象,但不从堆栈中移除它。Object pop( )ÿ…...

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

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

有趣的Hack-A-Sat黑掉卫星挑战赛——卫星平台内存dump
国家太空安全是国家安全在空间领域的表现。随着太空技术在政治、经济、军事、文化等各个领域的应用不断增加,太空已经成为国家赖以生存与发展的命脉之一,凝聚着巨大的国家利益,太空安全的重要性日益凸显[1]。而在信息化时代,太空安…...

OAK相机如何将yoloV8模型转换成blob格式?
编辑:OAK中国 首发:oakchina.cn 喜欢的话,请多多👍⭐️✍ 内容可能会不定期更新,官网内容都是最新的,请查看首发地址链接。 ▌前言 Hello,大家好,这里是OAK中国,我是助手…...
Python解题 - CSDN周赛第32期 - 运输石油(三维背包)
上期周赛因为最后一题出现bug,再加上都是经典的模板题,问哥就懒得写题解了。 本期也是有两道考过的题目,不过最后一题因为考到了背包问题的特殊类型,还是值得拿出来记个笔记。 第一题:传奇霸业 传奇霸业,是…...

JVM - G1垃圾收集器深入剖析
1、G1收集器概述 HotSpot团队一直努力朝着高效收集、减少停顿(STW: Stop The World)的方向努力,也贡献了从串行Serial收集器、到并行收集器Parallerl收集器,再到CMS并发收集器,乃至如今的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 语法更新之一(Open SQL新增特性)1、前言2、演示1、前言 自从 SAP 推出 SAP ON HANA,与之相随的 AS ABAP NW 7.40 版本以后,ABAP 语法也有了较多的更新,本篇对 Open Sql的语法更新部分做一个DEMO演示。 NW 7…...

【改进灰狼优化算法】改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...

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

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

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

行测-判断推理-图形推理-位置规律-平移
位置平移,选D空白每次顺时针移动一格,黑色圆每次逆时针移动2格选C两个黑色⚪,每次顺时针移动2格白色⚪,先到对角位置,再顺时针移动一格选B三角形的底,顺时针移动三角形的顶点,在正方形的内部顺时…...
数据库基础知识(一)
目录 什么是数据库 表,列,行 主键 什么是SQL 什么是数据库 数据库(database):保存有组织的数据的容器(通常是一个文件或一组文件)。 数据库软件(DMBS):又名数据库管理系统。数据库是通过数据库软件创建和操纵的容器。因为你并…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
全面解析各类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…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...