第1章:Mock回放概念与原理
1.1 什么是Mock回放
说白了,Mock回放就是先把真实服务的响应录下来,然后在后续的测试中直接“放”回去,让被测系统以为自己还在跟真实服务交互。
举个例子:你的微服务要调用支付网关,可网关只能在特定环境联调,很麻烦。我就用Mock回放把一次成功的支付响应录下来,后续所有测试都走这个录制数据——又快又稳,不需要连真实支付。
我自己刚开始接触这个概念时,总觉得不就是把请求/响应存下来嘛,有什么难的?结果第一次做就被“动态字段”坑了——时间戳每次请求都不一样,回放时匹配不上……嗯,后面我会专门讲怎么处理这类问题。
核心思想: 录制 → 存储 → 回放。不改变被测代码,只替换外部依赖的响应。
1.2 与Mock Server的区别
很多人问我:“Mock回放跟普通Mock Server有啥区别?” 我用一个表格回答你。
| 对比维度 | Mock Server | Mock回放 |
|---|---|---|
| 数据来源 | 手动编写或代码生成 | 录制真实服务的流量 |
| 状态管理 | 每个测试需要独立配置 | 录制文件自带上下文 |
| 维护成本 | 接口变更时需手动修改 | 重新录制即可 |
| 动态数据 | 需要特殊逻辑处理 | 通过匹配策略过滤 |
| 适用场景 | 单元测试、简单场景 | 集成测试、CI管道、回放验证 |
我曾经帮团队把传统Mock Server切换到Mock回放,当时有个痛点:每次联调都靠开发手动写Mock数据,接口一变,Mock就废了。改用回放后,测试环境直接录一遍生产流量就搞定了——省心多了。
1.3 典型应用场景
在实际项目中,Mock回放主要用在以下几个地方:
- CI管道集成测试:你的构建流水线里跑集成测试,但依赖的外部服务不稳定或者没available,回放保证每次跑的结果一致。
- 压力测试:想压测自己的服务,又不敢压真实数据库或第三方API?用回放模拟海量请求,既安全又可控。
- 演示环境:给客户演示时,不能每次都依赖真实数据吧?录一套漂亮数据回放,稳定又专业。
- 回归测试:每次代码改动都跑一遍录制流量,发现响应差异就说明有影响——这比写几百个断言实用得多。
小技巧: 不要一股脑把所有接口都录制。我建议先挑读操作(GET请求),因为它们通常状态不变,回放成功率最高。
写操作(POST/PUT)需要额外处理幂等性,后面章节再聊。
写操作(POST/PUT)需要额外处理幂等性,后面章节再聊。
1.4 核心流程
Mock回放的工作流,我画了张图帮你理解:
⚠️ 我曾经踩过的坑: 一开始我用精确匹配(请求头、body全匹配),结果动不动就匹配失败。后来改为智能匹配:只看请求方法、路径和关键参数,忽略动态字段(如 timestamp、nonce)。
建议你在匹配策略上留一部分“可配置的忽略字段”,否则回放成功率会很低。
建议你在匹配策略上留一部分“可配置的忽略字段”,否则回放成功率会很低。
流程其实不复杂:
- 正常调用真实服务,录制器把请求和响应存到存储里。
- CI管道跑测试时,被测服务发出的请求被拦截,交给匹配引擎。
- 匹配引擎从存储中找到匹配的录制记录,交给回放器。
- 回放器直接把录制响应返回给被测服务——整个过程毫秒级搞定。
总结重点: Mock回放不是万能药,但它解决了Mock Server最头疼的“数据维护”和“环境依赖”问题。
你只要掌握匹配策略、动态字段处理和录制数据管理,就能在CI管道里玩得很溜。
你只要掌握匹配策略、动态字段处理和录制数据管理,就能在CI管道里玩得很溜。