文章

测试概念新手扫盲

测试概念新手扫盲

服务端

单元测试

维护人角色速度测试时机
研发快🚀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 发起时自动跑

https://vitest.dev/

既可以测 typescript 逻辑,也可以测试 ui 组件

端到端测试

维护人角色速度测试时机
测试快🚀uat/prod 手动或者定时跑

API 端到端测试

本质上就是直接调用 api 来测试,模拟用户在使用中可能会调用的 api,测试使用流程

可以用 Postman / ijhttp 来自动化跑脚本

浏览器端到端测试

划重点

  1. 研发维护 data-testid,方便定位元素
  2. 测试用 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 进行授权