大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
功能测试类型
功能测试 验证系统行为是否符合需求,按阶段与视角可细分为冒烟、回归、UAT,以及黑盒与白盒策略。对照 /roadmaps/qa「Functional Testing」节点,本课建立测试类型的选用地图。
学习目标
- 区分冒烟、回归、UAT 的触发时机与覆盖深度
- 理解黑盒、白盒、灰盒测试的观察角度
- 为 CodeRoadMap 模块选择合适的测试类型组合
- 将功能测试类型映射到 CI 与发布流程
核心概念
按阶段划分
| 类型 | 时机 | 目标 | 深度 |
|---|---|---|---|
| 冒烟 | 新构建可用后 | 主路径能跑通 | 浅、快 |
| 回归 | 每次变更后 | 旧功能未破坏 | 中~深 |
| UAT | 发布前 | 业务方签字 | 真实场景 |
本站 CI:mvn test + npm test 是 自动化回归;合并 main 前人工过一遍 tracks 详情是 冒烟补充。
黑盒 vs 白盒
- 黑盒:不看实现,按输入输出验证(手工用例、API 测试、E2E)
- 白盒:基于代码路径(分支覆盖、单元测试对 private 逻辑)
- 灰盒:知道架构边界(MockMvc 知 Controller 路由但不测 Mapper SQL)
// 白盒倾向:直接测 Service 分支
@Test
void getBySlug_notFound() {
when(mapper.selectBySlug("x")).thenReturn(null);
assertThrows(NotFoundException.class, () -> service.getBySlug("x"));
}
见 test-mockito。
选型原则
- 新模块:冒烟手工 + 核心 API 自动回归
- 稳定模块:扩大自动化回归,手工只做变更相关
- 发布:UAT 清单 由产品/业务确认,QA 组织执行
与 testing-essentials/Spring 对照
| 功能测试类型 | testing-essentials 实现 |
|---|---|
| 单元(白盒) | JUnit + Mockito、test-intro 金字塔底层 |
| 集成(灰盒) | @SpringBootTest、test-integration |
| API 回归(黑盒) | MockMvc / REST Assured(qa-api) |
| E2E 冒烟 | Playwright、test-e2e |
Spring Boot 项目:单元守逻辑、集成守 SQL、E2E 守用户路径,与冒烟/回归/UAT 三层发布信心对应。
练习
- 为 backend tracks API 设计冒烟清单(≤5 条)
- 列出最近一次改动的「回归范围」应包含哪些测试命令
- 写 2 条 UAT 场景,需业务方参与判定通过/失败
小结
冒烟求快、回归求全、UAT 求准;黑盒验行为、白盒验路径。 下一课进入 Web UI 自动化:Selenium、Playwright 与 Cypress。