【测试】自动化测试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):又名数据库管理系统。数据库是通过数据库软件创建和操纵的容器。因为你并…...
MyBatis 的工作原理解析
文章目录前言一、mybatis工作原理1.1 流程图1.2 步骤解析1.3 代码实现前言 本文记录 Mybatis 的工作原理,做到知识梳理总结的作用。 一、mybatis工作原理 Mybatis 的总体工作原理流程图如下图所示 1.1 流程图 1.2 步骤解析 Mybatis 框架在工作时大致经过8个步骤…...
终端软件架构说
目录 零:前言 一,基于服务的架构 二,基于多进程多线程的架构 三,以数据为中心的架构 四,类Android的分层架构设计 五,总结 零:前言 谈到架构,可能大家的第一感觉是信息系统的…...
LearnOpenGL-入门-你好,三角形
本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject LearnOpenGL中文官网:https://learnopengl-cn.github.io/ 文章目录图形渲染管线基本介绍着色器…...
SOEM 源码解析 ecx_init_redundant
/* Initialise lib in redundant NIC mode* 在冗余网卡模式下初始化lib库* param[in] context context struct* 上下文结构体* param[in] redport pointer to redport, redundant port data* 指向冗余端口的指针ÿ…...
网页唤起 APP中Activity的实现原理
疑问的开端大家有没有想过一个问题:在浏览器里打开某个网页,网页上有一个按钮点击可以唤起App。这样的效果是怎么实现的呢?浏览器是一个app;为什么一个app可以调起其他app的页面?说到跨app的页面调用,大家是…...
【操作系统】概述
基本特征 1. 并发 并发是指宏观上在一段时间内能同时运行多个程序,而并行则指同一时刻能运行多个指令。 并行需要硬件支持,如多流水线、多核处理器或者分布式计算系统。 操作系统通过引入进程和线程,使得程序能够并发运行 2. 共享 共享…...
Flume三种组件的选择对比
文章目录1.source2.channel3.sink1.source Source: 数据源:通过source组件可以指定让Flume读取哪里的数据,然后将数据传递给后面的 channel Flume内置支持读取很多种数据源,基于文件、基于目录、基于TCP\UDP端口、基于HTTP、Kafka的 等等、当然了&#x…...
响应性基础API
一.什么是proxy和懒代理?什么是proxy?proxy对象是用于定义基本操作的自定义行为(如:属性查找,赋值,枚举,函数调用等等)。什么是懒代理?懒代理:在初始化的时候不会进行全部代理,而是…...
剑指 Offer 25. 合并两个排序的链表
剑指 Offer 25. 合并两个排序的链表 难度:easy\color{Green}{easy}easy 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1: 输入:1->2->4, 1->3->4 输出:1…...
顿悟日记(一)
目录2023年1月顿悟日记:2023年2月24日顿悟日记:2023年2月25日顿悟日记:2023年2月26日顿悟日记:顿悟的经历是如此的奇妙,且让人亢奋的事情。 2023年1月顿悟日记: 1.我是面向对象还是面向过程? …...
现在疫情可以去广州吗/杭州百家号优化
Option类型 使用Option类型,可以用来有效避免空引用(null)异常。也就是说,将来我们返回某些数据时,可以返回一个Option类型来替代。 定义 scala中,Option类型来表示可选值。这种类型的数据有两种形式: Some(x)…...
江苏网站建设开发/seo搜索引擎优化求职简历
有哪些基础的问题? 一些简单的问题在前面的文章中都体现了: 为什么要使用消息中间件?消息中间件有哪些缺点?ActiveMQ、RabbitMQ、RocketMQ和kafka都有什么优缺点?RabbitMQ如何保证高可用性?kafka如何保证…...
厚街商城网站建设/上海营销seo
一、主流浏览器及其内核: 主流浏览器内核IEtridentFirefoxGeckoGoogle ChromeWebkit/blinkSafari(苹果自带)Webkit(谷歌工程师和苹果工程师一起研发的)Opera(丹麦)presto 二、主流浏览器的要求…...
大型平面设计网站/seo站内优化包括
% 注意哦,Matlab中的图节点要从1开始编号,所以这里把0全部改为了9 % 编号最好是从1开始连续编号,不要自己随便定义编号 s [9 9 1 1 2 2 2 7 7 6 6 5 5 4]; t [1 7 7 2 8 3 5 8 6 8 5 3 4 3]; w [4 8 3 8 2 7 4 1 6 6 2 14 10 9]; G g…...
搜索推广 外贸/天津seo诊断技术
vue3 watch及computed的使用案例 //可以多个watch 一起使用 () => state.selectTreeList,(val) => {const treeData = _.cloneDeep(val)// 所属行业为:保理(6640),且所属地区只有省份,没有城市区县// 去...
wordpress企业建站教程 百度 下载/深圳网站做优化哪家公司好
2019独角兽企业重金招聘Python工程师标准>>> 常见压缩文件 windows :.rar .zip .7z linux :.zip .gz .bz2 .tar .xz .tar.xz .tar.bz2 查看文件的格式,file 1.txt gzip压缩工具 gzip压缩等级:1-9 ,默认压缩…...