功能测试类型
冒烟/回归/UAT、黑盒白盒。
30 分钟
功能测试类型
功能测试 验证系统行为是否符合需求,按阶段与视角可细分为冒烟、回归、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 |