Skip to content

单元测试框架与自动化测试框架

霍格沃兹测试开发学社

ceshiren.com


自我介绍

  • 江湖代号:老钱 。
  • 互联网行业工作时间 10 年:2 年开发,8 年测试;涉及后端开发,测试工具开发,运维,自动化测试,测试管理等工作,目前在一家互联网金融公司担任测试开发工程师。
  • 职业信条:懂开发的测试特别受欢迎 。

Java 面向对象编程知识点回顾

  • 接口, 类, 对象
  • 封装,多态,继承
  • 输入输出
  • 处理出错
  • 类参数传递
  • 强类型声明语言
  • 编程工具 Intellij Idea 技巧

直播前准备

专题课 阶段 形式 章节
JUnit5 L1 知识点 junit5 简介、安装与准备
JUnit5 L1 知识点 junit5 命名规则
JUnit5 L1 知识点 idea 配置与界面化运行
JUnit5 L1 知识点 junit5 测试用例结构
JUnit5 L1 知识点 junit5 测试用例断言
JUnit5 L1 知识点 junit5 测试用例调度与运行

直播前准备

专题课 阶段 形式 章节
JUnit5 L2 知识点 junit5 参数化用例
JUnit5 L2 知识点 junit5 显示名称
JUnit5 L2 知识点 junit5 执行顺序
JUnit5 L3 知识点 junit5 多断言处理
JUnit5 L3 知识点 junit5 结合高级断言-hamcrest
JUnit5 L2 知识点 junit5 结合数据驱动-yaml

课程安排

  1. 单元测试与自动测试
  2. 实战 1:JUnit 5 项目创建
  3. 实战 2:常用注解、断言、执行顺序、参数输入
  4. 实战 3:Allure report 测试报告
  5. 实战 4:测试用例并行与串行运行

1. 单元测试与自动测试


单元测试

  • 指对软件中的最小可测试单元进行检查和验证
  • 一般是由研发同学来进行编写,用于研发自测,保证代码正确性的第一步
  • 单元测试代码往往是提交到产品代码库中
  • 白盒测试

自动测试

  • 指针对软件编译、打包、发布成可执行程序之后的使用流程进行自动化过程的测试
  • 一般由自动化测试同学进行编写,用于验证软件在完成发布之后的正确性
  • 自动测试代码一般要与产品代码分离,不提交到产品代码库中
  • 黑盒测试

单元测试与自动测试对比

  • 单元测试:
    • 着眼点在 function(s)的正确性
    • 多数需要有源码的情况下运行
    • 大部分搭建好研发环境就可以运行
    • 如果某些步骤数据输入有困难,需要使用 mock 代码跳过

单元测试与自动测试对比

  • 自动测试:
    • 着眼点在完整的用户流程的正确性
    • 多数情况下需要在与用户使用环境等效、真实的测试环境中运行
    • 完成编译、打包、发布之后的环境上运行
    • 尽量使用测试环境中的数据进行测试,少使用 mock 代码绕过测试场景

常见的 Java 单元与自动测试框架

  • JUnit Version 3, Version4 设计初衷主要用于单元测试
  • TestNG 主要用于自动测试
  • JUnit 5 整合单元测试与自动测试
  • 本课重点:JUnit 5

本章小结

  • 单元测试概念
  • 自动测试概念
  • 专注点区别
  • 重点测试框架

课程安排

  1. 单元测试与自动测试

  2. 实战 1:JUnit 5 项目创建
  3. 实战 2:常用注解、断言、执行顺序、参数输入
  4. 实战 3:Allure report 测试报告
  5. 实战 4:测试用例并行与串行运行

实战 1:JUnit 5 项目创建


JUnit 5 项目创建实战演练

  • 项目基础框架
  • 需要导入的依赖
    <!-- junit -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>${junit.jupiter.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>${junit.api.version}</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-params</artifactId>
        <version>${junit.api.version}</version>
        <scope>test</scope>
    </dependency>
    
  • 依赖包版本
    <properties>
      <junit.api.version>5.6.2</junit.api.version>
      <junit.jupiter.version>5.6.2</junit.jupiter.version>
    </properties>
    

JUnit 5 项目创建实战演练

  • 单元测试过程
  • 测试运行演示
  • 实战 Demo


本章小结

  • JUnit 5 项目基本结构
  • 需要导入的依赖
  • 测试程序的编写方法
  • 断言校验

课程安排

  1. 单元测试与自动测试

  2. 实战 1:JUnit 5 项目创建

  3. 实战 2:常用注解、断言、执行顺序、参数输入
  4. 实战 3:Allure report 测试报告
  5. 实战 4:测试用例并行与串行运行

实战 2:常用注解、断言、执行顺序、测试参数输入


常用注解

  • @BeforeAll
    • 在所有测试方法执行之前运行一次。它通常用于编写需要在所有测试开始之前运行的代码,例如设置一次性的资源或初始化一些状态。
  • @BeforeEach
    • 在每个测试方法执行之前运行, 可以用于每个测试方法执行之前的测试初始化准备。
  • @Test
    • 用于标记实际的测试方法

常用注解

  • @AfterEach
    • 在每个测试方法执行之后运行, 可以用于每个测试方法执行之后的测试重置工作。
  • @AfterAll
    • 在所有测试方法执行之后运行一次,可以用于执行测试结束后的清理工作。
  • Demo: 实战演练


常用注解

  • @DisplayName
  • @Disable
  • Demo: 实战演练

常用注解

  • @Tag
  • Demo: 实战演练

常用注解

  • @RepeatedTest
  • Demo: 实战演练


断言

  • assertEquals
  • assertNotEquals
  • assertTrue
  • assertFalse
  • Demo: 实战演练


执行顺序

  • @Order
  • @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
  • Demo: 实战演练


测试参数输入

  • @ParameterizedTest
  • @ValueSource
  • Demo: 实战演练


本章小结

  • JUnit 常用注解
  • 针对不同测试要求,灵活使用断言
  • 测试执行顺序
  • 测试参数输入

课程安排

  1. 单元测试与自动测试

  2. 实战 1:JUnit 5 项目创建

  3. 实战 2:常用注解、断言、执行顺序、参数输入

  4. 实战 3:Allure report 测试报告
  5. 实战 4:测试用例并行与串行运行

实战 3:Allure report 测试报告


Allure Report

  • Allure Report 知识点
    • 需要提前安装: https://allurereport.org/docs/install/
  • 实现安装内容
  • Demo 实战演示

Allure Report

  • JUnit 5 与 Allure Report, 标记:

    • @Feature(""): 报告上会先显示 Feature
    • @Story(""): 点开 Feature 之后会显示 Story
  • 运行 JUnit 测试,生成 Allure Result 结果集
  • 在 test/resources/allure.properties 中配置 allure.results.directory 参数,指向生成 allure result 的目标路径
  • pom.xml 中需要加入依赖描述与版本属性

        <properties>
            <allure.version>2.13.2</allure.version>
        </properties>
    
        <!-- allure -->
      <dependency>
          <groupId>io.qameta.allure</groupId>
          <artifactId>allure-junit5</artifactId>
          <version>${allure.version}</version>
          <scope>test</scope>
      </dependency>
    

Allure Report

  • 生成 Allure Report 本地查看文件
    allure generate allure-results --clean -o allure-report
    
  • 启动 allure report,启动命令:
    allure serve
    
  • Demo: 实战演练


本章小结

  • Allure Report 生成
  • 依赖程序安装与依赖插件、类库导入
  • 相关配置与代码修改

课程安排

  1. 单元测试与自动测试

  2. 实战 1:JUnit 5 项目创建

  3. 实战 2:常用注解、断言、执行顺序、参数输入

  4. 实战 3:Allure report 测试报告

  5. 实战 4:测试用例并行与串行运行

实战 4:测试用例并行与串行运行


JUnit 并行运行

  • 测试程序并行运行的好处
  • 什么样的程序适合并行运行
  • 并行运行的配置方法

    junit-platform.properties 文件中的配置内容
    
    junit.jupiter.execution.parallel.enabled=true
    junit.jupiter.execution.parallel.config.strategy=fixed
    junit.jupiter.execution.parallel.config.fixed.parallelism=6
    junit.jupiter.execution.parallel.config.dynamic.max-pool-size-factor=10
    
  • 并行自动测试代码注解

    @Execution(ExecutionMode.CONCURRENT)
    
  • Demo: 实战演练

JUnit 串行运行

  • 测试程序并行转串行运行
  • 注解代码更新方法
    @Execution(ExecutionMode.SAME_THREAD)
    
  • Demo: 实战演练

本章小结

  • JUnit 5 并行运行
  • JUnit 5 串行运行
  • 运行方式切换配置方法

课程安排

  1. 单元测试与自动测试

  2. 实战 1:JUnit 5 项目创建

  3. 实战 2:常用注解、断言、执行顺序、参数输入

  4. 实战 3:Allure report 测试报告

  5. 实战 4:测试用例并行与串行运行


课程总结

  • 单元测试与自动测试
  • JUnit 5 测试框架
  • 常用注解、执行顺序、断言、参数
  • 测试执行:并行与串行
  • 生成 Allure Report

课后作业

  1. 创建 JUnit5 单元测试用例,测试 Java 程序的运算结果正确性
  2. 在 JUnit5 自动化测试中使用 @BeforeAll @BeforeEach @Test @AfterAll @AfterEach,体会测试架构运行生命周期
  3. 使用 @ParameterizedTest 创建有参数输入的自动化测试
  4. 使用 Allure Report 生成测试报告
  5. 分别使用并行与串行方式运行 JUnit 自动化测试

谢谢