用 Mock 与契约测试缩短前后端联调周期
一、先把问题边界说清楚
Mock 解决依赖不可用,契约测试解决双方对字段和状态码理解不一致。很多失败并不是工具本身失效,而是输入、状态、依赖和成功条件没有定义清楚。开始动手前,先写下触发条件、期望结果、允许的副作用和停止条件,这四项能挡住大部分无效尝试。
工程化方案不追求把所有能力一次做完,而是先形成能执行、能检查、能回退的最小闭环。约定必须进入代码、配置或流水线,不能只停留在口头说明里。
| 检查项 | 要回答的问题 | 建议证据 |
|---|---|---|
| 输入 | 数据是否完整且版本正确 | 样例、校验结果 |
| 状态 | 当前处于哪个处理阶段 | 日志、状态文件 |
| 依赖 | 外部服务是否可用 | 延迟、错误码 |
| 结果 | 怎样才算真正成功 | 地址、记录、断言 |
二、用最小示例验证关键假设
先把接口契约存成可版本化文件,再让提供方与消费方在流水线中分别验证。下面的示例刻意只保留关键动作,先在测试环境或授权数据上运行。确认输出符合预期后,再加入并发、重试与调度,避免一次引入过多变量。
{ "request": {"method":"GET","path":"/users/42"}, "response": {"status":200,"body":{"id":42,"name":"demo"}} }执行时为每次运行生成唯一标识,并把开始时间、关键参数摘要、阶段结果和耗时写进结构化日志。日志不要记录密码、会话值或完整个人数据;需要关联时使用内部生成的任务编号。任何写操作都应准备可逆路径,无法确认结果时先进入待核验状态。
三、把异常路径设计在正常路径之前
常见异常可以归为四类:输入不合法、依赖暂时不可用、动作结果未知、结果明确失败。输入问题直接拒绝并说明字段;暂时故障可以有限重试;未知状态必须查询或人工核验;明确失败则保存现场并停止。把所有异常都粗暴重试,会放大压力并制造重复结果。
重试应设置次数上限、递增间隔和幂等条件。对于不可重复的动作,先写任务记录,再执行外部操作,最后补充结果标识。进程退出后根据记录恢复,而不是从第一步盲目重来。这样即使机器重启或网络抖动,也能说明每项任务停在哪里。
四、上线前的验收清单
本文最值得持续观察的是契约通过率、字段变更次数和联调阻塞时间。先在小样本上制造一次可预期失败,确认日志能定位、告警能触达、任务能停止或恢复。随后再扩大数据量,并记录基线耗时和资源占用。
交付前还要补齐三类测试:正常流程验证主要结果,边界测试覆盖空值、超长输入和重复执行,故障测试模拟超时、页面变化或依赖中断。最后把启动、检查、恢复和清理命令写进 README,让没有参与开发的人也能按文档完成一次受控运行。
📌 本文是《工程化实战》系列,持续更新,关注不迷路。
👉 下一篇:《让本地与线上环境保持一致的三种做法》,讲其中的关键实现、异常边界与验证方法。
💬 你在实际项目里遇到过接口字段变化造成联调反复返工的问题吗?评论区聊聊。
(觉得有用点个赞+收藏,方便回头查阅)
🔧 相关可运行源码/资料已整理成资源包,可在我主页的资源里自取。