自动化测试Junit

1.什么是Junit

        

JUint是Java编程语言的单元测试框架,用于编写和运行可重复的自动化测试。
JUnit 促进了“先测试后编码”TDD的理念,强调建立测试数据的一段代码,可以先测试,然后再应用。这个方法就好比“测试一点,编码一点.......”,增加了程序员的产量和程序的稳定性,可以减少程序员的压力和花费在排错上的时间。
 

2.Junit注解

这些是Junit的部分注解

        

  那我们Junit有哪些常用的注解呢

                1.@Test

这一个注解作用于方法上面,表示这个方法是一个测试用例。当@Test注解作用在一个方法上面的时候,表示这一个方法是可以直接运行的,无需通过main方法来调用。放在哪就运行哪个类

                2.@BeforeAll

首先,被@BeforeAll注释的方法一定是静态的,BeforeAll在@Test修饰的方法之前运行,@BeforeAll注释的方法一定是静态的,并且只会在加载外部类的时候执行一次,并不会在每一个方法执行之前再次执行了

3.@AfterAll

被这个注解修饰的方法也必须是静态的,在@Test修饰的方法之后进行运行

4.@BeforeEach

在执行每一个被@Test修饰的方法之前,都会执行一次@BeforeEach注释的方法。

代码如下

import org.junit.jupiter.api.*;public class JunitTest {@Testvoid test01(){System.out.println("===========这是一个测试用例============");}@Testvoid test02(){System.out.println("===========这是一个测试用例============");}@BeforeAllstatic  void  start(){System.out.println("开始测试");}@AfterAllstatic void  End(){System.out.println("结束测试");}@BeforeEachvoid startV1(){System.out.println("开始一条测试用例");}@AfterEachvoid EndV1(){System.out.println("结束一条测试用例");}}

       

结果

5.@AfterEach

在执行每一个被@Test修饰的方法之后,都会执行一次@AfterEach注释的方法。

6.测试用例顺序指定

          我们想要指定执行的顺序,我们就需要用一个注解@TestMethodOrder(MethodOrderer.OrderAnnotation.class)

并在测试用例中加上Order()然后就可以指定执行顺序

 

2.注解的参数化

                1.单参数

                        

@ParameterizedTest@ValueSource(ints={1,2,3,4,5})void Test03(int x ){System.out.println("接受的参数是x="+x);}

单参数有局限性,只能接受一种类型的参数,对应的Test03()只能接受一个参数

                2.多参数

                        

 @ParameterizedTest@CsvSource({"'王五',20"})void Test04(String name ,int age){System.out.println(name+"今年"+age+"岁");}

如图所知,这种方法可以执行多参数

我们的多参数文件还可以读取文件中的数据进行操作

@ParameterizedTest@CsvFileSource(resources = "test01.csv")void test05(String name,int age){System.out.println("name="+name+",age="+age);}

                3.通过方法生成参数

        

@ParameterizedTest@MethodSource("Generate")void Test6(String name,int age){System.out.println("name:"+name+"age:"+age);}public static Stream<Arguments> Generate() {return Stream.of(Arguments.arguments("张三",13),Arguments.arguments("李四",10));}

        

3.测试套件

1.通过class去运行测试用例

        

//通过class去运行测试用例
@Suite
@SelectClasses({JunitTest.class,JunitTest1.class})
public class RunTests {}

2.通过package去运行测试用例

@Suite
@SelectPackages(value = {"example"})
public class RunTests {}

4.断言

        断言主要是判断

断言(assert):也就是所谓的assertion,是jdk1.4后加入的新功能

官话: 断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。 ——摘自百度百科【断言】

行话: 断言(Assertion)是一种调试程序的方式,断言可以在调试情况当错误排查,用于检查前条件,是我们的代码更加接近"契约式编程"


大白话:就是为了检测我们程序自己疏忽写出来的bug啦,当断言报错我就知道这里是我写错了

1.断言相等的表达式

表示当相等时才会成立,,不相等时会报错

2.断言不相等的表达式

              表示当不相等时才会成立,相等时不通过

3.断言为空

                表达式为空能通过,不为空不通过

4.断言不为空

      表达式为空能不通过,不为空通过

        

                       

5.自动化项目--博客系统

        1.我们先要搭建好环境,拥有博客系统这个项目,详细看我的博客系统

2.编写出测试用例

                

3.我们根据测试用例写出自动化测试代码

        1.登录的测试用例

public class Tests extends  InitAndEndBrowser {//登录测试用例@ParameterizedTest@CsvSource({"'http://49.233.1.44:9090/blog_login.html','zhangsan','http://49.233.1.44:9090/blog_list.html'"})void login(String url,String username,String ex_url ) throws InterruptedException {webDriver.get(url);sleep(5000);//输入用户名webDriver.findElement(By.cssSelector("#username")).sendKeys(username);//输入密码webDriver.findElement(By.cssSelector("#password")).sendKeys("123456");//提交webDriver.findElement(By.cssSelector("#submit")).click();sleep(3000);//找登录成功后的校验是否登录成功String Username=webDriver.findElement(By.cssSelector("body > div.container > div.left > div > h3")).getText();if(Username.equals(username)){System.out.println("测试通过");}else {System.out.println("测试不通过");}String cur_url=webDriver.getCurrentUrl();if(cur_url.equals(ex_url)){System.out.println("测试通过");}else {System.out.println("测试不通过");}}

           2.博客列表的

@Testvoid LoginError() throws InterruptedException {String  username="zhangsan";String password="1234567";webDriver.get("http://49.233.1.44:9090/blog_login.html");sleep(3000);webDriver.findElement(By.cssSelector("#username")).sendKeys(username);webDriver.findElement(By.cssSelector("#password")).sendKeys(password);webDriver.findElement(By.cssSelector("#submit")).click();String exurl=webDriver.getCurrentUrl();
//        if(exurl.equals("http://49.233.1.44:9090/blog_login.html")){
//           System.out.println("测试通过");
//       }else {
//            System.out.println("测试不通过");
//        }Assertions.assertEquals("http://49.233.1.44:9090/blog_login.html",exurl);}

3.发布博客

                

@Testvoid PublishBlog() throws InterruptedException {//打开博客列表页webDriver.get("http://49.233.1.44:9090/blog_list.html");// 点击写博客的按钮webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();sleep(3000);//document.querySelector("#title").value="测试"((JavascriptExecutor)webDriver).executeScript("document.querySelector(\"#title\").value=\"测试\"");sleep(2000);//输入对应的标题(通过selenium执行js脚本来完成)webDriver.findElement(By.cssSelector("#submit"));//校验//1,找到发布博客对应的标题WebElement title=webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > " +"div" +".title"));sleep(2000);//2.校验标题对应的元素是否为空,如果不为空,说明测试通过,如果为空,测试不通过Assertions.assertNotNull(title);}

4.删除博客

        

@Order(3)@Testvoid DeleteBlog() throws InterruptedException {webDriver.get("http://49.233.1.44:9090/blog_list.html");webDriver.findElement(By.cssSelector("body > div.container > div.right > div:nth-child(1) > a")).click();sleep(2000);webDriver.findElement(By.cssSelector("body > div.container > div.right > div > div.operating > " +"button:nth-child(2)")).click();sleep(2000);String url=webDriver.getCurrentUrl();Assertions.assertEquals("http://49.233.1.44:9090/blog_list.html",url);}

5.退出博客

        

   @Order(4)@Testvoid QuitBlog() throws InterruptedException {webDriver.get("http://49.233.1.44:9090/blog_list.html");sleep(2000);webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();String url=webDriver.getCurrentUrl();sleep(3000);String name=webDriver.findElement(By.cssSelector("body > div.container-login > div > div:nth-child(2) > " +"span")).getText();Assertions.assertEquals("http://49.233.1.44:9090/blog_login.html",url);Assertions.assertEquals("用户名",name);}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SERVERLESS】AWS Lambda上实操

通过Serverless的发展历程及带给我们的挑战&#xff0c;引出我们改如何改变思路&#xff0c;化繁为简&#xff0c;趋利避害&#xff0c;更好的利用其优势&#xff0c;来释放企业效能&#xff0c;为创造带来无限可能。 一 Serverless概述 无服务器计算近年来与云原生计算都是在…

OSPF星型拓扑和MGRE全连

一&#xff0c;拓扑 二&#xff0c;要求 1&#xff0c;R6为ISP只能配置IP地址&#xff0c;R1-R5的环回为私有网段 2&#xff0c;R1/4/5为全连的MGRE结构&#xff0c;R1/2/3为星型的拓扑结构&#xff0c; 3&#xff0c;R1为中心站点所有私有网段可以互相通讯&#xff0c;私有网段…

antd+vue——datepicker日期控件——禁用日期功能

需求&#xff1a;今天之前的日期禁用 <a-date-pickerv-model.trim"formNE.deliveryTime":disabled-date"disabledDate"valueFormat"YYYY-MM-DD"allowClearstyle"width: 100%" />禁用日期的范围&#xff1a; //时间范围 disab…

第14届java A组蓝桥杯做题记录

A题 特殊日期 package Java14省赛.Java研究生组;import java.time.Year; //特殊判断一下2月份&#xff0c;leaf 为true 1 import java.util.*;import 蓝桥杯.dfs_n皇后; public class 特殊日期 {static int sum(int d){int res 0;while(d > 0){res d % 10;d / 10;}return…

Java GC了解

Jstack找到线程的快照 jvm提供其他命令作用 jps&#xff1a; 虚拟机进程状况工具&#xff0c;类似linux的ps命令 jstat&#xff1a;虚拟机统计信息监视工具&#xff0c;经常看gc情况的会使用到 jinfo: java配置信息工具 jmap&#xff1a; java内存映射工具&#xff0c;dump&am…

微服务篇面试题

1、SpringCloud的组件有哪些&#xff1f; 2、负载均衡如何实现&#xff1f; 3、什么是服务雪崩&#xff1f;怎么解决&#xff1f; 4、项目中有没有做过限流&#xff1f; Tomcat单体可以&#xff0c;分布式不适合 5、解释一下CAP和BASE P&#xff1a;加入node03这边的网络断了&a…

基于PCIe的智能处理系统研究

引言 人工智能是集合众多方向的综合性学科,在诸多应用领域均取得了显著成果。随着航空领域人工智能技术研究的不断深入,面向开放式机载智能交互场景,人工智能的应用可解决诸多问题。例如智能感知、辅助决策等,可利用人工智能算法对多源传感器捕获的海量信息进行快速处理,仅将处…

【8086汇编】汇编语言基础入门

文章目录 一、汇编简介1. 汇编语言的组成2. CPU、寄存器、内存3. CPU对存储器的读写4. 拓展5. 检测6. 解析 二、寄存器1. mov、add命令2. 物理地址3. CS:IP 装段地址和偏移地址3.1 如何改变CS:IP的值 4. 数据段DS:[address]4.1 前置知识&#xff1a;字与字节4.2 DS:[address] 5…

整数在内存中的存储和内存操作函数

目录 整数在内存中的存储1. 整数在内存中的存储2. 大小端字节序和字节序判断2.1 什么是大小端?2.2 为什么有大小端 3. 练习3.1 请简述大端字节序和小端字节序的概念&#xff0c;设计⼀个小程序来判断当前机器的字节序。&#xff08;10分&#xff09;-百度笔试题3.2 练习23.3 练…

java:特殊文件(properties,xml)和日志

特殊文件 txt(文本文件) txt文件是一种纯文本文件,用于存储文本信息 优缺点:txt文件简单易用,可以使用任何文本编辑器打开和编辑,但不支持数据类型和结构,所有信息均用纯文本形式保存 适合简单的配置信息存储 properties文件 properties文件是一种键值对文件,用于存储配置…

从零自制docker-10-【cgroup进行容器资源限制】

文章目录 目的导入包的相关公开原则当前进程的挂载信息deferfor scanner.Scan()判断字符串包含新建的cgroup的默认文件cpu相关配置对应到ubuntu 22.04版本的cpu相关配置top注意查看你可使用的cpu注意坑启动后的top查看显示进程使用的cpu序号代码结果 目的 启动容器时通过-mem、…

JAVA集合(学习)

1.Java集合框架体系图 集合框架Collection单列集合List 有序&#xff0c;可重复Vector 数组结构&#xff0c;线程安全ArrayList 数组结构&#xff0c;非线程安全LinkedList 链表结构&#xff0c;非线程安全Set 无序&#xff0c;唯一HashSet 哈希表结构LinkedHashSet 哈希表…

jvisualVM分析jvm内存使用快照dump

服务发生内存溢出&#xff0c;就需要查看服务器上Java服务的jvm堆内存使用情况&#xff0c;可以使用dump命令生成dump文件&#xff0c;然后下载到本地&#xff0c;然后使用jvisualVM工具打开&#xff0c;即可实现可视化分析。 生成dump文件常用的两种方式&#xff1a; 第一种…

[react] useState的一些小细节

1.无限循环 因为setState修改是异步的,加上会触发函数重新渲染, 如果代码长这样 一秒再修改,然后重新触发setTImeout, 然后再触发,重复触发循环 如果这样呢 还是会,因为你执行又会重新渲染 2.异步修改数据 为什么修改多次还是跟不上呢? 函数传参解决 因为是异步修改 ,所以…

Nacos 入门篇---服务端如何处理客户端的服务注册请求?(三)

一、引言 ok呀&#xff0c;上个章节我们讲了Nacos客户端的服务自动注册&#xff0c;今天我们来看看服务端接收到了客户端的服务注册请求&#xff0c;服务端都做了哪些事情&#xff5e; 二、目录 目录 一、引言 二、目录 三、回顾上节内容&#xff1a; 四、Nacos 服务代码入…

Springboot整合nacos报错无法连接nacos

报错信息&#xff1a;Nacos com.alibaba.nacos.api.exception.NacosException: Client not connected, current status:STARTING 关于这个报错的原因有很多&#xff1a;如Nacos未启动、网络问题、配置问题、版本不兼容问题等&#xff0c;我的报错原因主要是版本不兼容。 下面…

5.9 mybatis之callSettersOnNulls作用

文章目录 1. 当callSettersOnNullstrue时2. 当callSettersOnNullsfalse时 在mybatis的settings配置参数中有个callSettersOnNulls参数&#xff0c;官方解释为&#xff1a;指定当结果集中值为 null 的时候是否调用映射对象的 setter&#xff08;map 对象时为 put&#xff09;方法…

PostgreSQL入门到实战-第三十弹

PostgreSQL入门到实战 PostgreSQL教程网站官网地址PostgreSQL概述更新计划 PostgreSQL教程网站 https://www.postgresqltutorial.com/ 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://www.postgresql.org/PostgreS…

【系统分析师】计算机网络

文章目录 1、TCP/IP协议族1.1 DHCP协议1.2 DNS协议1.3网络故障诊断 2、网路规划与设计2.1逻辑网络设计2.2物理网络设计2.3 分层设计 3、网络接入3.1 接入方式3.2 IPv6地址 4、综合布线技术5、物联网5.1物联网概念与分层5.2 物联网关键技术 6、云计算7、网络存储技术&#xff08…

neo4j使用详解(结尾、neo4j的java driver使用模板及工具类——<可用于生产>)

Neo4j系列导航: neo4j安装及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 neo4j索引及调优 neo4j java Driver等更多 1. 简介 本文主要是java使用neo4j driver操作neo4j的模板项目及非常有用的工具类,主要包括: 图…