测试概念新手扫盲
测试概念新手扫盲
服务端
单元测试
| 维护人角色 | 速度 | 测试时机 |
|---|---|---|
| 研发 | 快🚀 | merge request 发起时自动跑 |
@WebMvcTest
速度:快
常用 @WebMvcTest + MockMvc。Spring 文档说明 MockMvc 是通过 mock request/response 来执行完整 Spring MVC 请求处理,而不是通过真实服务器
适合测:
- 路由
- 参数校验
- 返回码
- JSON 格式
- 异常处理
@RunWith(SpringRunner.class)
速度:快
适合测:
- service
- 工具类
集成测试
少量但关键的端到端集成测试,连真实数据库 / MQ / 外部依赖,验证完整链路
比如:
- 下单 API → 落库成功
- 发 MQ → listener 消费 → 状态变更
- 定时任务扫描超时订单 → 自动取消
- 外部回调 API → 幂等更新
@SpringBootTest
连共用一致的中间件环境(mysql、redis、rocketmq)
注意事项
- 数据隔离,否则可能容易互相影响。比如你发的测试消息被别人 consumer 吃掉
前端
| 维护人角色 | 速度 | 测试时机 |
|---|---|---|
| 研发 | 快🚀 | merge request 发起时自动跑 |
既可以测 typescript 逻辑,也可以测试 ui 组件
端到端测试
| 维护人角色 | 速度 | 测试时机 |
|---|---|---|
| 测试 | 快🚀 | uat/prod 手动或者定时跑 |
API 端到端测试
本质上就是直接调用 api 来测试,模拟用户在使用中可能会调用的 api,测试使用流程
可以用 Postman / ijhttp 来自动化跑脚本
浏览器端到端测试
划重点
- 研发维护
data-testid,方便定位元素 - 测试用 ai 生成 Playwright 测试脚本
参考文章
AI 时代,是时候让 data-test-id 成为前端标配了
告别脆弱测试!AI代理+Playwright,用组件感知重构E2E(端到端)测试体系
常见问题
用 Postman / ijhttp / curl 做端到端测试,还要不要做 @SpringBootTest 测试?
你说的这类测试,本质上更像:
- API 回归测试
- 黑盒接口测试
- 端到端 / 半端到端验证
特点是:
- 不依赖测试代码启动 Spring 上下文
- 直接打你已经跑着的服务
- 速度快
- 更接近真实调用方式
这类测试很适合测:
- 下单 API 主流程是否通
- 鉴权、网关、HTTP 协议层问题
- 环境配置是否正确
- 接口契约是否符合预期
- 多接口串联流程
所以你说的“不想反复启动 api 服务”,这是一个非常合理的工程选择。
尤其是你已经有本地常驻开发环境时,这类 API 脚本测试的性价比很高。
但要注意一点:
它不能替代应用内集成测试。
因为 Postman / ijhttp 能告诉你“接口打进来结果对不对”,但不容易稳定覆盖这些问题:
- 某个分支下数据库事务有没有正确回滚
- MQ 消费端是否正确处理重复消息
- Redis 某些 key 是否被正确写入 / 清理
- 外部服务异常后补偿逻辑是否生效
- 某些内部状态转换是不是只在特定初始数据下才会出错
所以我建议你这样分工:
适合用 Postman / ijhttp 的
- 主流程冒烟
- 回归脚本
- 联调验证
- 环境验收
- 发布前巡检
适合用 @SpringBootTest + 代码测试的
- 复杂业务状态验证
- 多依赖协同验证
- 失败分支 / 补偿分支
- 幂等、重复消息、乱序事件
- 数据库 / Redis / MQ 副作用断言
一句话:
Postman / ijhttp 测的是“这个服务现在能不能用”,SpringBootTest 集成测试测的是“这段复杂逻辑在各种场景下是不是稳定正确”。
这两者不是替代关系,是分工关系。
本文由作者按照 CC BY 4.0 进行授权