自动化测试Junit(测试系列8)

这篇具有很好参考价值的文章主要介绍了自动化测试Junit(测试系列8)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

1.什么是Junit

2.Junit相关的技术

2.1注解

2.1.1@Test

2.1.2@Disable

2.1.3@BeforeAll和@AfterAll

2.1.4@BeforeEach和@AfterEach 

2.2参数化

2.2.1单参数

2.2.2多参数

2.2.2.1CSV获取参数

2.2.2.2方法获取参数

2.3测试套件

2.3.1通过class运行测试用例

2.3.2通过包运行测试用例

2.4执行顺序

2.5断言

2.5.1断言相等

2.5.2断言不相等

2.5.3断言为空

2.5.4断言不为空

结束语:


前言:

在上一篇博客中小编主要与大家分享了该如何使用selenium来完成自动化测试,那么还有一种是Junit,Junit是单元测试的框架而Selenium是自动化测试的框架,Selenium是拿着一个技术写自动化测试用例,而Junit是拿着一个技术管理已经编写好的测试用例。所以两者之间还是有一定的差别的。接下来咱们就来谈谈Junit中相关的技术吧。

1.什么是Junit

Junit是针对Java的一个单元测试框架。

2.Junit相关的技术

2.1注解

在Junit注解主要有:

  • @Test
  • @Disable
  • @BeforeAll,@AfterAll
  • @BeforEach,@AfterEach

下面我们来给大家一一讲解演示一下。

2.1.1@Test

在以前的代码中我们运行代码必须是通过主函数来进行运行的,如下所示:

代码展示:

public class Test02 {
    public static void main(String[] args) {
        Test();
    }

    private static void Test() {
        System.out.println("这是一个Test方法");
    }
}

结果展示:

自动化测试Junit(测试系列8),测试,junit

那么通过@Test这样的一个注解我们就可以直接进行运行了,@Test表示当前这个方法是一个测试用,我们通过代码来感受一下。

代码展示:

package JunitTest;

import org.junit.jupiter.api.Test;

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

这里我们就可以点击旁边的按钮来进行运行了。

自动化测试Junit(测试系列8),测试,junit

注意:点击①是运行整个程序的代码。点击②只是运行Test01这一块的代码。

结果展示: 

自动化测试Junit(测试系列8),测试,junit

在上述中我们需要先去Maven中央仓库里导入依赖,步骤入下所示:

①打开Maven中央仓库点击搜索Junit。

自动化测试Junit(测试系列8),测试,junit

②找到对应的依赖点击复制。(注:由于我们这里讲解的是Junit5,所以小编这里复制的是5.9.1里面的)

自动化测试Junit(测试系列8),测试,junit

自动化测试Junit(测试系列8),测试,junit③将依赖粘贴到pom文件中。

自动化测试Junit(测试系列8),测试,junit

④点击刷新Maven。

自动化测试Junit(测试系列8),测试,junit 

2.1.2@Disable

@Disable表示直接忽视这块代码。

代码展示:

package JunitTest;

import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;

public class JunitTest02 {
    @Test
    void Test01() {
        System.out.println("这是JunitTest02里面的Test01");
    }
    @Test
    void Test02() {
        System.out.println("这是JunitTest02里面的Test02");
    }
    @Disabled
    @Test
    void Test03() {
        System.out.println("这是JunitTest02里面的Test03");
    }
}

如果没有该注释上面的代码执行结果应该是这样的。

自动化测试Junit(测试系列8),测试,junit

但是如果有@Disable这个注释的话,Test03就会被忽视。

自动化测试Junit(测试系列8),测试,junit

 

2.1.3@BeforeAll和@AfterAll

  • @BeforeAll是指在所有的测试用例运行之前跑对应的方法。
  • @AfterAll是指在所有的测试用例运行之后跑对应的方法。

代码展示:

package JunitTest;

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;

public class JunitTest03 {
    @Test
    void Test01() {
        System.out.println("这是JunitTest03里面的Test01");
    }
    @Test
    void Test02() {
        System.out.println("这是JunitTest03里面的Test02");
    }
    @Test
    void Test03() {
        System.out.println("这是JunitTest03里面的Test03");
    }
    @BeforeAll
    static void SetUp() {
        System.out.println("这是BeforeAll里面的语句");
    }
    @AfterAll
    static void TearDown() {
        System.out.println("这是AfterAll里面的语句");
    }
}


结果展示:
自动化测试Junit(测试系列8),测试,junit

需要注意的是我们要方法前面加上static,将他变成静态的,也就是类方法。

自动化测试Junit(测试系列8),测试,junit 

2.1.4@BeforeEach和@AfterEach 

  • @BeforeEach:在每一个测试用例之前跑对应的代码。
  • @AfterEach :在每一个测试用例之后跑对应的代码。

代码展示:

package JunitTest;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class JunitTest04 {
    @Test
    void Test01() {
        System.out.println("这是JunitTest04里面的Test01");
    }
    @Test
    void Test02() {
        System.out.println("这是JunitTest04里面的Test02");
    }
    @Test
    void Test03() {
        System.out.println("这是JunitTest04里面的Test03");
    }
    @BeforeEach
    void BeforeEachTest() {
        System.out.println("这是BeforeEach里面的语句");
    }
    @AfterEach
    void AfterEachTest() {
        System.out.println("这是AfterEach里面的语句");
    }
}


结果展示:

自动化测试Junit(测试系列8),测试,junit

 

2.2参数化

如果我们想要在方法中传入参数,会出现什么情况呢?如下所示。

代码展示:

package JunitTest;

import org.junit.jupiter.api.Test;

public class JunitTest05 {
    @Test
    void Test01(int i) {
        System.out.println(i);
    }
}


结果展示:

自动化测试Junit(测试系列8),测试,junit

你会发现会报错,原因是因为我们没有给注册一个参数。那么此时我们该怎么办呢?这里就需要我们先在Maven里面导入一个依赖,如下所示:

自动化测试Junit(测试系列8),测试,junit

 自动化测试Junit(测试系列8),测试,junit


 自动化测试Junit(测试系列8),测试,junit

将其复制到pom中,并刷新。

自动化测试Junit(测试系列8),测试,junit 

此时我们就可以使用注解@ ParameterizedTest了,通过该注解我们就可以实现传递参数了,具体的我们看下述操作。

2.2.1单参数

我们通过@ValueSource就可以进行单参数的传递了。

代码展示:

package JunitTest;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class JunitTest05 {
    @ParameterizedTest
    @ValueSource(ints = {1,2,3})
    void Test01(int num) {
        System.out.println(num);
    }
    @ParameterizedTest
    @ValueSource(strings = {"1", "2", "3"})
    void Test02(String number) {
        System.out.println(number);
    }
}


结果展示:

自动化测试Junit(测试系列8),测试,junit

2.2.2多参数

2.2.2.1CSV获取参数

如果我们想要进行多参数的传递那又该怎么传递呢?

可以通过@ CsvSource来进行传递,它既可以进行单参数的传递也可以进行多参数的传递。

单参数:

代码展示:

package JunitTest;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

public class JunitTest06 {
    @ParameterizedTest
    @CsvSource({"1","2","3"})
    void Test02(String num) {
        System.out.println(num);
    }

}

结果展示:

自动化测试Junit(测试系列8),测试,junit

多参数:
代码展示:

package JunitTest;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;

public class JunitTest09 {
    @ParameterizedTest
    @CsvSource({"1,2", "3,4"})
    void Test01(String str, int num) {
        System.out.println(str + " : " + num);
    }
}

结果展示:

自动化测试Junit(测试系列8),测试,junit

 

也可以通过 @CsvFileSource来传递。

代码展示:

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;

public class Test01 {
    @ParameterizedTest
    @CsvFileSource(resources = "test01.csv")
    void Test01(int num, String name) {
        System.out.println(num + ":" + name);
    }
}


结果展示:

自动化测试Junit(测试系列8),测试,junit

注意在上述代码中我们是通过以下的方式来创建一个.csv文件的。

自动化测试Junit(测试系列8),测试,junit

自动化测试Junit(测试系列8),测试,junit 

 然后就在文件中进行填写数据即可。

2.2.2.2方法获取参数

除了上述的三种方式之外我们还可以通过@MethodSource来传递参数。

代码展示:

package JunitTest;

import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

public class JunitTest08 {
    public static Stream<Arguments> Generator() {
        return Stream.of(Arguments.arguments(
                "1","张三"
        ));
    }

    @ParameterizedTest
    @MethodSource("Generator")
    void Test01(String num, String name) {
        System.out.println(num + ":" + name);
    }
}

结果展示:

自动化测试Junit(测试系列8),测试,junit

2.3测试套件

2.3.1通过class运行测试用例

这里我们先在java文件夹中新建两个.class类。

自动化测试Junit(测试系列8),测试,junit

代码展示:

代码①:
​​​​​​​代码②:

import org.junit.jupiter.api.Test;

public class Test04 {
    @Test
    void Test04() {
        System.out.println("Test04");
    }
}

代码③:

import org.junit.platform.suite.api.SelectClasses;
import org.junit.platform.suite.api.Suite;

@Suite
//通过class测试用例运行
@SelectClasses(value = {Test03.class,Test04.class})
public class RunSuite {
}

结果展示:
自动化测试Junit(测试系列8),测试,junit
  

2.3.2通过包运行测试用例

在上述代码中我们是通过class来运行的,这里我们来通过包来运行。

代码展示:

import org.junit.platform.suite.api.SelectPackages;
import org.junit.platform.suite.api.Suite;

@Suite
//通过包来运行测试用例
@SelectPackages({"Test1","Test2"})
public class RunSuite2 {
}

 结果展示:

自动化测试Junit(测试系列8),测试,junit

2.4执行顺序

我们先来看下面这个代码的执行顺序。

代码展示:

package JunitTest;

import org.junit.jupiter.api.Test;

public class JunitTest11 {
    @Test
    void A() {
        System.out.println("A");
    }
    @Test
    void B() {
        System.out.println("B");
    }
    @Test
    void C() {
        System.out.println("C");
    }
    @Test
    void D() {
        System.out.println("D");
    }
}


结果展示:
自动化测试Junit(测试系列8),测试,junit

如果我们现在换一下代码块之间的顺序结果会是什么呢?

代码展示:

package JunitTest;

import org.junit.jupiter.api.Test;

public class JunitTest11 {
    @Test
    void D() {
        System.out.println("D");
    }
    @Test
    void A() {
        System.out.println("A");
    }

    @Test
    void C() {
        System.out.println("C");
    }
    @Test
    void B() {
        System.out.println("B");
    }
}


结果展示:
自动化测试Junit(测试系列8),测试,junit 

你会发现即是是换了代码的顺序,结果还是一样的没有变,那么我们该怎么让代码的顺序变动呢?

这里我们可以借助@TestMethodOrderer来指定执行的顺序,具体使用请看代码。

代码展示:

package JunitTest;

import org.junit.jupiter.api.MethodOrderer;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestMethodOrder;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class JunitTest11 {
    @Order(1)
    @Test
    void D() {
        System.out.println("D");
    }
    @Order(2)
    @Test
    void A() {
        System.out.println("A");
    }
    @Order(3)
    @Test
    void C() {
        System.out.println("C");
    }
    @Order(4)
    @Test
    void B() {
        System.out.println("B");
    }
}


结果展示:
自动化测试Junit(测试系列8),测试,junit

通过上述的方法我们就可以让代码来按照我们指定的顺序来进行执行了。

2.5断言

如果我们需要对测试用例进行预期的判断,判断我们的结果是不是和我们的预期相符,那么此时我们就可以使用断言这样的操作来进行判断,这里我们具体看下面的代码案例。

2.5.1断言相等

代码展示:

package JunitTest;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class JunitTest12 {
    @ParameterizedTest
    @ValueSource(ints = {1})
    void Test01(int num) {
        System.out.println(num);
        //在这里判断我们接收到的参数是不是1
        Assertions.assertEquals(1,num);
    }
}

结果展示:

自动化测试Junit(测试系列8),测试,junit

我们可以看到结果展示的是1,那就说明我们的预期结果与实际结果是相符的。 

2.5.2断言不相等

代码展示:

package JunitTest;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class JunitTest13 {
    @ParameterizedTest
    @ValueSource(ints = {1})
    void Test01(int num) {
        System.out.println(num);
        //在这里判断接收到的参数是不是与预期的不相符,也就是断言不相等
        Assertions.assertNotEquals(1,num);
    }
}

结果展示:

自动化测试Junit(测试系列8),测试,junit

注意:这里是预期的如果与实际的相符的话就会报错!!!

2.5.3断言为空

断言为空就是判断接收到的值是不是空值。

代码展示:

package JunitTest;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

public class JunitTest14 {
    @ParameterizedTest
    @ValueSource(ints = {1})
    void Test01(int num) {
        System.out.println(num);
        //判断断言是不是空值
        Assertions.assertNull(num);
    }
}


结果展示:
自动化测试Junit(测试系列8),测试,junit

上述代码的结果表明接收到的值不为空。

2.5.4断言不为空

断言不为空就是判断如果断言是空的话就报错,不为空才是正确的。

代码展示:

package JunitTest;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class JunitTest15 {
    @Test
    void Test01() {
        String str = "1";
        Assertions.assertNotNull(str);
        System.out.println(str);
    }
}


结果展示:

自动化测试Junit(测试系列8),测试,junit

上述结果表明str不是空值。

结束语:

希望这节对大家学习自动化测试有一定的帮助,下节中小编将重点给大家介绍一下Junit里的一些操作,想要学习的同学记得关注小编和小编一起学习吧!如果文章中有任何错误也欢迎各位大佬及时为小编指点迷津(在此小编先谢过各位大佬啦!)文章来源地址https://www.toymoban.com/news/detail-616527.html

到了这里,关于自动化测试Junit(测试系列8)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 软件测试自动化Java篇【Selenium+Junit 5】

    为什么选择selenium作为我们的web自动化测试工具? 开源免费 支持多浏览器 支持多系统 支持多语言【Java,Python,C#,Rubby,JavaScript,Kolin】 selenium包提供了很多可供测试使用的API Chrome浏览器 Chrome驱动【驱动器版本要和浏览器版本对应越详细越好】 然后把驱动包放在安装jdk的

    2024年01月18日
    浏览(38)
  • 在 Java 中使用JUnit5进行单元测试和自动化测试

    单元测试和自动化测试是现代软件开发过程中必不可少的环节,可以提高代码质量和开发效率。JUnit5是Java中流行的单元测试框架,本文将介绍如何在Java中使用JUnit5进行单元测试和自动化测试。 2.1 单元测试的基本概念和原理 单元测试是一种测试方法,用于对软件系统中的最

    2024年02月03日
    浏览(32)
  • 如何在 Java 中使用JUnit5进行单元测试和自动化测试

    单元测试和自动化测试是现代软件开发过程中必不可少的环节,可以提高代码质量和开发效率。JUnit5是Java中流行的单元测试框架,本文将介绍如何在Java中使用JUnit5进行单元测试和自动化测试。 单元测试是一种测试方法,用于对软件系统中的最小可测试单元进行测试。这些单

    2024年02月05日
    浏览(46)
  • 自动化测试系列 —— UI自动化测试

    UI 测试是一种测试类型,也称为用户界面测试,通过该测试,我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要,通过执行 UI 测试,测试人员将尝试模仿用户的行为

    2024年02月10日
    浏览(36)
  • 接口自动化测试系列-接口测试

    利用postman完成接口测试:官网。 接口一般包含: url:请求地址,如:https://www.baidu.com/ method:请求方式,get,post,update,delete等 headers:请求头 body/params:请求体,post一般存在body中。get请求放在params中 get请求 post请求 辅助抓包工具操作指引 postman常规操作 1、怎样设置变量 如url、heade

    2024年02月10日
    浏览(44)
  • 自动化测试 selenium(测试系列7)

    目录 前言: 1.什么是自动化测试 2.Selenium是什么 3.Selenium原理 4.Selenium+Java环境搭建 5.Selenium常用的API使用 5.1定位元素findElement 5.1.1css选择器 5.1.2id选择器 5.1.3类选择器 5.1.4xpath选择器 5.2操作测试对象 5.2.1click点击对象 5.2.2sendKeys在对象上模拟按键输入 5.2.3clear清除对象输入的文本

    2024年02月15日
    浏览(26)
  • 接口自动化测试系列-接入测试平台

    测试平台目录 测试平台自建源码 后台核心代码 部分前端代码样例

    2024年02月10日
    浏览(27)
  • 博客系统自动化测试项目实战(测试系列9)

    目录 前言: 1.博客前端页面测试用例图 2.测试用例的代码实现 2.1登录页面的测试 2.2博客列表页面的测试 2.3写博客测试 2.4博客详情页面的测试 2.5已发布博客的标题和时间的测试 2.6注销用户的测试 结束语: 之前小编给大家讲解了有关于Selenium和Junit5自动化测试的一些基础知

    2024年02月10日
    浏览(29)
  • 接口自动化测试系列-excel管理测试用例

    代码源码: 框架结构 excel用例demo excel数据处理 requests请求封装 检查点函数 数据处理工厂 发送邮件函数

    2024年02月10日
    浏览(37)
  • 接口自动化测试系列-yml管理测试用例

    项目源码 整体目录结构,目录说明参考 测试用例结构类似httprunner写法,可参考demo 主要核心函数 用例读取转换json 测试用例格式处理函数

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包