自动化测试Junit

news2024/12/28 22:29:45

目录

    • Junit5
      • 注解
        • @Test
        • @Disabled
        • @BeforeAll、@AfterAll、@BeforeEach、@AfterEach
      • 参数化
        • 单参数
        • 多参数
        • CSV获取参数
        • 方法获取参数
      • 测试用例执行顺序
      • 断言 assert
        • 断言相等
        • 断言不相等
        • 断言为空
        • 断言不为空
      • 测试套件
  • 自动化测试项目
      • 1. 熟悉项目
      • 2. 针对核心流程设计手工测试用例
      • 3. 将手工测试用例转换成自动化测试用例
      • 4. 部署

Junit5

  1. 为什么学了selenium还需要学习Junit
    selenium是一个自动化测试框架
    Junit是一个单元测试框架

拿着一个技术写自动化测试用例(selenium3)
拿着一个技术管理已经编写好的测试用例(Junit5)

  1. Junit相关的技术

Junit是针对Java的单元测试框架
注解:

  • @Test
  • @Disabled
  • @BeforeAll、@AfterAll、@BeforeEach、@AfterEach

参数化:

  • 单参数
  • 多参数
  • CSV获取参数
  • 方法获取参数

测试套件

  • 通过class运行测试用例
  • 通过包(package)运行测试用例

注解

@Test

表示当前的这个方法是一个测试用例

@Disabled

忽略此测试用例

@BeforeAll、@AfterAll、@BeforeEach、@AfterEach

@BeforeAll:在所有测试用例之前跑的
@AfterAll:在所有测试用例之后跑的
@BeforeEach:在每个测试用例执行之前执行
@AfterEach:在每个测试用例执行之后执行
如果做UI自动化,通常情况下,创建驱动、打开网页放在BeforeAll;
关闭浏览器放在AfterAll

如果有5个测试用例:
@BeforeAll、@AfterAll:各跑一次
@BeforeEach、@AfterEach:各跑五次

import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class JunitTest {
    @Test
    public void Test01() {
        System.out.println("这是JunitTest 的 Test01");
    }

    @Test
    void Test02() {
        System.out.println("这是JunitTest 的 Test02");
    }

//    @Test
    @Disabled   //忽略此测试用例
    void Test03() {
        WebDriver webDriver = new ChromeDriver();
        webDriver.get("https://www.baidu.com");
        webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(6)"));
    }

    //在所有测试用例之前跑的
    @BeforeAll
    static void SetUp() {
        System.out.println("BeforeAll");
    }

    //在所有测试用例之后跑的
    @AfterAll
    static void TearDown() {
        System.out.println("AfterAll");
    }

    @BeforeEach
    void BeforeEachTest() {
        System.out.println("BeforeEach");
    }

    @AfterEach
    void AfterEachTest() {
        System.out.println("AfterEach");
    }
}

BeforeAll
BeforeEach
这是JunitTest 的 Test01
AfterEach
BeforeEach
这是JunitTest 的 Test02
AfterEach
AfterAll

参数化

单参数

 @ParameterizedTest
    @ValueSource(ints = {1,2,3})
    void Test04(int num) {
        System.out.println(num);
    }

    @ParameterizedTest
    @ValueSource(strings = {"1","2","3"})
    void Test05(String num) {
        System.out.println(num);
    }

多参数

    //多参数
    @ParameterizedTest
    @CsvSource({"1, 2, 3, ''"})
    void Test02(String x, String y, String z, String q) {
        System.out.println(x);
        System.out.println(y);
        System.out.println(z);
        System.out.println(q);
        System.out.println("--");
    }

CSV获取参数

在这里插入图片描述

张三,李四,王五
张三1,李四1,王五1
张三2,李四2,王五2
    //CSV获取参数
    @ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    void Test06(String name1) {
        System.out.println(name1);
    }

方法获取参数

    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(1, "zhang san"),
                Arguments.arguments(2, "li si"),
                Arguments.arguments(3, "wang wu")
        );
    }

    // 方法获取参数
    @ParameterizedTest
    @MethodSource("Generator")
    void Test07(int num, String name) {
        System.out.println(num + " : " + name);
    }

测试用例执行顺序

表明现在这个测试用例不需要按照默认的顺序执行

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)  

按照order的顺序执行 TestA --> Test01 --> TestB --> Test02

import org.junit.jupiter.api.*;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)  // 表明现在这个测试用例不需要按照默认的顺序执行
public class JunitTest01 {

    @Order(1)
    @Test
    void TestA() {
        System.out.println("这是testA测试用例");
    }

    @Order(2)
    @Test
    void Test01() {
        System.out.println("这是test01测试用例");
    }

    @Order(4)
    @Test
    void Test02() {
//        System.out.println("这是test02测试用例, 被忽略的测试用例");
        System.out.println("这是test02测试用例");
    }

    @Order(3)
    @Test
    void TestB() {
        System.out.println("这是testB测试用例");
    }
}

在这里插入图片描述
随机的运行方式

@TestMethodOrder(MethodOrderer.Random.class)  

每次的测试用例执行顺序都不一样

断言 assert

断言相等

Assertions.assertEquals(预期, 实际)

在这里插入图片描述

断言不相等

    // 单参数
    @ParameterizedTest
    @ValueSource(ints = {1})
    void Test01(int num) {
        System.out.println(num);
        Assertions.assertNotEquals(2, num);   // 断言不相等
    }

在这里插入图片描述

断言为空

    // 单参数
    @ParameterizedTest
    @ValueSource(ints = {1})
    void Test01(int num) {
        System.out.println(num);
        String str = "sad";
        Assertions.assertNull(str);
    }

在这里插入图片描述

断言不为空

    // 单参数
    @ParameterizedTest
    @ValueSource(ints = {1})
    void Test01(int num) {
        System.out.println(num);
        String str = "sad";
        Assertions.assertNotNull(str);
    }

测试套件

通过class进行测试用例的运行

@Suite
@SelectClasses({JunitTest.class, JunitTest01.class, JunitTest03.class})
//通过class进行测试用例的运行
//先去跑 JunitTest 的全部测试用例,再跑JunitTest01, 最后JunitTest03 按照这里写的顺序执行
public class RunSuite {
}

通过包名进行测试用例的运行

@Suite
// 通过包进行测试用例的运行
@SelectPackages(value = {"Package01", "Package02"})
public class RunSuite {
}

自动化测试项目

  1. 熟悉项目
  2. 针对核心流程设计测试用例(手工测试用例)
  3. 将手工测试用例转换成自动化测试用例
  4. 部署

1. 熟悉项目

2. 针对核心流程设计手工测试用例

在这里插入图片描述

3. 将手工测试用例转换成自动化测试用例

设计代码结构:
初始化:BeforeAll (创建驱动)
退出:AfterAll (退出浏览器)

4. 部署

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

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

相关文章

智能生成的登录、注册和找回密码界面,让您的网站更加便捷和高效

chatgpt国内镜像 https://chat.xingheai.life 恰饭广告 智能生成的登录、注册和找回密码界面&#xff0c;让您的网站更加便捷和高效 本文介绍了一种基于ChatGPT的智能生成技术&#xff0c;用于生成登录、注册和找回密码界面。我们使用了自然语言处理和机器学习技术&#xff0c;…

七、进程地址空间

一、环境变量 &#xff08;一&#xff09;概念 环境变量(environment variables)&#xff1a;系统当中用做特殊用途的系统变量。 如&#xff1a;我们在编写C/C代码的时候&#xff0c;在链接的时候&#xff0c;从来不知道我们的所链接的动态静态库在哪里&#xff0c;但是照样可…

深入理解深度学习——正则化(Regularization):Dropout

分类目录&#xff1a;《深入理解深度学习》总目录 Dropout供了正则化一大类模型的方法&#xff0c;计算方便且功能强大。在第一种近似下&#xff0c;Dropout可以被认为是集成大量深层神经网络的实用Bagging方法。Bagging涉及训练多个模型&#xff0c;并在每个测试样本上评估多个…

数组扁平化的8种方法 - js篇

文章目录 方式1&#xff1a;使用基础的递归遍历方式2&#xff1a;使用reduce函数递归遍历方式3&#xff1a;数组强制类型转换方式4&#xff1a;while循环结合findIndex与concat方式5&#xff1a;直接使用ES6的flat方法方式6&#xff1a;使用JSON的函数和正则表达式方式7&#x…

#【六·一】让代码创造童话,共建快乐世界# 庆祝儿童节的Html和Python代码

文章目录 1.儿童节的简介2.中国庆祝儿童节的方式3.一段庆祝儿童节的Python代码4.一段庆祝儿童节的Html代码 1.儿童节的简介 国际儿童节&#xff08;又称儿童节&#xff0c;International Children’s Day&#xff09;定于每年的6月1日。为了悼念1942年6月10日的利迪策惨案和全…

dvwa靶场通关(五)

第五关 File Upload&#xff08;文件上传漏洞&#xff09; File Upload&#xff0c;即文件上传漏洞&#xff0c;通常是由于对上传文件的类型、内容没有进行严格的过滤、检查&#xff0c;使得攻击者可以通过上传木马获取服务器的webshell权限 low low等级没有任何的防护 创建…

10 【组件编码流程 组件自定义事件 全局事件总线】

1.组件编码流程 组件化编码流程&#xff1a; ​ (1).拆分静态组件&#xff1a;组件要按照功能点拆分&#xff0c;命名不要与html元素冲突。 ​ (2).实现动态组件&#xff1a;考虑好数据的存放位置&#xff0c;数据是一个组件在用&#xff0c;还是一些组件在用&#xff1a; ​ 1…

将MSYS2 MinGW集成到Windows终端

微软开发了一款Windows终端的开源软件&#xff0c;非常好用。安装后在Win7及以上系统会在右键菜单中添加一条“在终端中打开”的命令&#xff0c;非常方便。它默认配置了Windows命令行以及PowerShell&#xff0c;如果安装了Visual Studio 2022还会配置Visual Studio 2022的命令…

C++入门教程||C++ Web 编程

C Web 编程 什么是 CGI&#xff1f; 公共网关接口&#xff08;CGI&#xff09;&#xff0c;是一套标准&#xff0c;定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的。CGI 规范目前是由 NCSA 维护的&#xff0c;NCSA 定义 CGI 如下&#xff1a;公共网关接口&#xf…

《Java并发编程实战》课程笔记(十二)

CountDownLatch 和 CyclicBarrier&#xff1a;如何让多线程步调一致&#xff1f; 原始对账系统 对账系统的业务简化后&#xff1a; 首先用户通过在线商城下单&#xff0c;会生成电子订单&#xff0c;保存在订单库&#xff1b;之后物流会生成派送单给用户发货&#xff0c;派送…

软件测试面试怎样介绍自己的测试项目?会问到什么程度?

想知道面试时该怎样介绍测试项目&#xff1f;会问到什么程度&#xff1f;那就需要换位思考&#xff0c;思考HR在这个环节想知道什么。 HR在该环节普遍想获得的情报主要是下面这2个方面&#xff1a; 1&#xff09;应聘者的具体经验和技术能力&#xff0c; 2&#xff09;应聘者的…

【企业化部署】Tomcat部署及优化

文章目录 前言一、Tomcat 的概念1. Tomcat 核心组件1.1 什么是 servlet1.2 什么是 JSP 2. Tomcat 功能组件结构2.1 Container 结构分析 3. Tomcat 请求过程4. 配置文件4.1 安装目录4.2 conf 子目录 二、Tomcat 服务部署1. 下载并安装 JDK1.1 关闭防火墙&#xff0c;将安装 Tomc…

码垛机械臂工作站系统设计

码垛机械臂工作站系统设计 第一章 控制系统硬件设计1.1 引言1.2 控制系统总体方案1.3 控制系统硬件的选型1.3.1 可编程控制器的选型1.3.2 工业触摸屏的选型1.3.3 传感器的选型 1.4 硬件的接线与通讯1.4.1 可编程控制器的I/O分配与接线1.4.2 伺服电机驱动器的接线1.4.3 触摸屏与…

XML入库后空白字符丢失问题

最近项目上在做电子病历&#xff0c;使用的是第三方的电子病历组件&#xff0c;该病历组件是利用XML来组织数据的。界面上渲染出来的效果如下图&#xff1a; XML渲染后的界面 对应的后台数据&#xff08;已做简化处理&#xff09;是如下XML格式的&#xff0c;其中的空格部分是…

Windows 下配置Vitis HLS OpenCV仿真库(记录帖)

遇到的问题 我的配置&#xff1a; Vitis Vision 2022 opencv-4.4.0 vision Library 2022 Vitis HLS 2021.1 实测有BUG&#xff0c;编译好之后无法综合&#xff0c;别问我为什么知道 1. Download opencv_ffmpeg.dll 卡住 解决方法 打开 new_build 目录&#xff08;编译路径&…

从小白到大神之路之学习运维第33天——第三阶段——mysql数据库

第三阶段基础 时 间&#xff1a;2023年6月5日 参加人&#xff1a;全班人员 内 容&#xff1a; Mysql数据库 目录 前提环境配置&#xff1a; 一、CentOS 7 安装 MySQL 5.7 二、MySQL 操作示例&#xff1a; 三、MySQL 5.7远程登录 前提环境配置&#xff1a; 关闭防火…

微信如何批量添加好友?

现在营销中&#xff0c;微信已成为一种重要的沟通方式。微信目前是没有自动批量添加好友的功能&#xff0c;需要运营者一个一个手动去添加&#xff0c;这样太过于浪费时间&#xff0c;并且加频繁了还容易被封号&#xff0c;今天给大家介绍几种手动批量加好友的方式以及怎么借助…

人工智能和网络安全哪个好?一般人我还是劝你算了吧

人工智能门槛高&#xff0c;上限高 网络安全门槛低&#xff0c;下限低 但是以目前的行业内招聘需求来看网安缺hvv安服工具人和法学双修合规人&#xff0c;人工智能缺高端算法大牛。 一、从安全出发&#xff0c;然后去学习人工智能&#xff0c;最后走人工智能安全。 这个确实需…

Java网络通讯案例——即时通讯(控制台版)

一、需求分析 用户与用户之间1-1或1-n通讯 二、技术分析 &#xff08;一&#xff09;客户端 客户端的功能有两个&#xff1a;发消息和接消息发消息&#xff1a;使用Socket技术的流式输出&#xff0c;配合打印流封装发送。接信息&#xff1a;使用读取专用线程&#xff0c;搭配…

usmile笑容加新品发布,可视化定义电动牙刷未来发展路径?

历经20余年的发展&#xff0c;中国电动牙刷市场以外资品牌入华为肇始&#xff0c;到目前已经呈现出品牌林立、供给丰富&#xff0c;且国产品牌开始后来者居上的局面。 但近年来行业高速发展的势头似乎有所收敛&#xff0c;与此同时&#xff0c;市场还具备广阔的可拓展空间。数…