单元测试框架与自动化测试框架
霍格沃兹测试开发学社
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:JUnit 5 项目创建
- 实战 2:常用注解、断言、执行顺序、参数输入
- 实战 3:Allure report 测试报告
- 实战 4:测试用例并行与串行运行
1. 单元测试与自动测试
单元测试
- 指对软件中的最小可测试单元进行检查和验证
- 一般是由研发同学来进行编写,用于研发自测,保证代码正确性的第一步
- 单元测试代码往往是提交到产品代码库中
- 白盒测试
自动测试
- 指针对软件编译、打包、发布成可执行程序之后的使用流程进行自动化过程的测试
- 一般由自动化测试同学进行编写,用于验证软件在完成发布之后的正确性
- 自动测试代码一般要与产品代码分离,不提交到产品代码库中
- 黑盒测试
单元测试与自动测试对比
- 单元测试:
- 着眼点在 function(s)的正确性
- 多数需要有源码的情况下运行
- 大部分搭建好研发环境就可以运行
- 如果某些步骤数据输入有困难,需要使用 mock 代码跳过
单元测试与自动测试对比
- 自动测试:
- 着眼点在完整的用户流程的正确性
- 多数情况下需要在与用户使用环境等效、真实的测试环境中运行
- 完成编译、打包、发布之后的环境上运行
- 尽量使用测试环境中的数据进行测试,少使用 mock 代码绕过测试场景
常见的 Java 单元与自动测试框架
- JUnit Version 3, Version4 设计初衷主要用于单元测试
- TestNG 主要用于自动测试
- JUnit 5 整合单元测试与自动测试
- 本课重点:JUnit 5
本章小结
- 单元测试概念
- 自动测试概念
- 专注点区别
- 重点测试框架
课程安排
-
单元测试与自动测试
- 实战 1:JUnit 5 项目创建
- 实战 2:常用注解、断言、执行顺序、参数输入
- 实战 3:Allure report 测试报告
- 实战 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:JUnit 5 项目创建
- 实战 2:常用注解、断言、执行顺序、参数输入
- 实战 3:Allure report 测试报告
- 实战 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:JUnit 5 项目创建
-
实战 2:常用注解、断言、执行顺序、参数输入
- 实战 3:Allure report 测试报告
- 实战 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:JUnit 5 项目创建
-
实战 2:常用注解、断言、执行顺序、参数输入
-
实战 3:Allure report 测试报告
- 实战 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:JUnit 5 项目创建
-
实战 2:常用注解、断言、执行顺序、参数输入
-
实战 3:Allure report 测试报告
-
实战 4:测试用例并行与串行运行
课程总结
- 单元测试与自动测试
- JUnit 5 测试框架
- 常用注解、执行顺序、断言、参数
- 测试执行:并行与串行
- 生成 Allure Report
课后作业
- 创建 JUnit5 单元测试用例,测试 Java 程序的运算结果正确性
- 在 JUnit5 自动化测试中使用 @BeforeAll @BeforeEach @Test @AfterAll @AfterEach,体会测试架构运行生命周期
- 使用 @ParameterizedTest 创建有参数输入的自动化测试
- 使用 Allure Report 生成测试报告
- 分别使用并行与串行方式运行 JUnit 自动化测试