Mock 接口数据实操,规则改写和断点拦截的联调

34 阅读6分钟

前两周联调一个活动页,后端取数接口还没排期,页面提测时间又卡在那。换以前的做法是先写死一份假数据,把请求地址指过去,等接口通了再回头改代码。这次我试了另一条路:流量走抓包工具的代理,在代理层配一条规则直接返回假数据——前端代码一行不用动,接口好了把规则一关就切回真实请求。这类"Mock 接口数据""按需改请求"的活,现在抓包工具基本都内置了规则引擎,只是很多人还拿它当纯查看器用。这篇按联调时最常碰到的四类场景,把规则改写、断点拦截和弱网模拟过一遍。

  • 后端接口没就绪,页面要先调通
  • 想验证服务端对异常参数、改过的请求头的反应,又不想写脚本
  • App 在弱网环境下的超时、重试逻辑要实测
  • 线上接口返回异常,想临时改响应,确认是不是前端展示的问题

先说原理。规则改写干的事很简单:在请求发出前或响应返回前插一道闸,按你给的"匹配条件 + 动作"把流量改掉。匹配可以精确到域名、路径、端口,也能用通配子域或正则;动作分三个方向——请求方向能转发、Mock 假数据、改方法改头改体;响应方向能改状态码、增删响应头、整体替换响应体;还有一类网络动作,比如延迟和带宽限速。一行规则就是一个改法,保存即热生效,不用重启会话。断点拦截是手动挡:命中的流量在请求前或响应前暂停,弹编辑框让你逐条改完再放行。规则负责批量自动,断点负责逐条精细。类似的能力 Charles 的 Auto Responder、Fiddler 的 autoresponder、whistle 的规则文件都有,区别在配置方式——有的靠点选,有的要写正则,有的纯脚本,下面用到时逐个带。

后端没就绪时 用 Mock 规则顶上去

在 TraceEagle 的代理会话里加规则,格式是"匹配 + 动作"。等一个还没上线的接口,配这么一行:

*.api.example.com/promo/*  mock://200|{"code":0,"data":{"list":[]}}

左边命中促销域名的所有请求,右边 mock 动作直接返回 200 和一段预设 body,请求不会真的发出网。想区分不同分支,就按路径多配几条。这个做法比写死假数据好在哪:前端代码保持真实请求,联调对象始终是线上地址;等后端就绪,把规则所在的分组一关,请求自然走真实接口——不用改代码,不用动构建配置里的代理转发,回归风险小。Charles 的 Auto Responder、Fiddler 的 autoresponder 同样能替换响应,命中规则的写法各家不同,思路一致。

联调时把线上请求指到本地

后端改了接口但还没部署时,map-remote 动作能把请求映射到另一个完整 URL,最常用的指向本地开发服务器:前端页面保持线上环境,规则只把特定接口的请求转到本地起着的服务,两边同时联。还有一种 host 动作,直接改拨测目标 IP,线上域名指到内网测试机这类场景用得上。注意点:环境差异会在这时候暴露——转本地后请求头里带的线上 cookie、token 本地服务认不认,先确认再往下调,不然时间都耗在排查"为什么本地返回和线上不一样"上。

弱网和异常参数 用规则造出来

接口层的边界逻辑,光靠正常请求测不出来。弱网模拟在规则里直接给延迟和带宽限速:填毫秒延迟,或选 2G/3G/4G 预设,看 App 的超时重试逻辑在慢网络下怎么表现。真机跑到真实弱网环境里测成本高,规则限速一轮就能复现。验证服务端校验也靠规则:把请求头改成异常值(User-Agent 缺失、X-Forwarded-For 伪造)、把 body 里的必填字段改空,看服务端返回什么错误码,校验逻辑有没有漏洞一轮见分晓。规则值里还能引用动态变量——当前 URL、方法、随机数都有现成的,构造不重复的参数时直接用,不用手拼。

逐条精细控制 交给断点

规则覆盖不到的边角,用断点逐条来。在 TraceEagle 里断点和规则在同一套入口:配一条 breakpoint://req 规则标记要拦的流量,命中后请求发出前弹出编辑框;想在响应返回前改,用 breakpoint://res 或 both。改完点放行,请求继续走;不要的直接 Abort 丢掉,客户端会收到网关错误,正好拿来测前端失败分支。多条命中的流量会排队,可以逐条放行,也可以一键全放。有个细节省心:断点挂太久没处理会自动原样放行,不会把流量卡死——联调到一半去开会,回来断点还在队列里等着,链路不会堵住。全局拦截开关也可以开,配合域名、方法过滤把范围收窄到关心的请求。断点改响应体的场景常和弱网、Mock 搭着用:先用断点把响应改成各种异常形态,观察前端每个分支的表现。 rule

几个常问的点

  • 规则改写和断点怎么分工? 规则批量自动,断点逐条手动。一条流量先过规则、再轮到断点,规则处理得了的不用断点,断点处理不了的复杂逻辑才需要上脚本。
  • 会不会把正常流量也改了? 匹配条件决定命中范围,规则按命名分组组织、逐组开关,只改命中的流量。调试完把分组关掉就恢复原状。
  • 和 Charles、whistle 这些比有什么差别? 同一类需求各家都能做:Charles 的 Auto Responder 偏响应替换,whistle 规则文件表达力强但语法要记,Fiddler 功能全上手曲线陡一些。图形化点选、即改即生效、用完不残留,是这类桌面工具的共通优点,选哪家看你已有的工作流。
  • 不会写正则怎么办? 界面自带可点击的动作速查表,点一下把示例插进来,照着改值就行;只认域名的话直接填域名,用不到正则。

按手头的场景挑起点:接口没就绪的配 mock 假数据,联调时把请求 map 到本地,要测超时重试就上延迟限速,逐条验证再开断点。从一行规则开始——命中、动作、看效果,跑通一条自然知道往哪加。规则引擎用起来才发现"改包"不复杂:不用写代码,不动真实请求路径,调试完把 TraceEagle 里的规则分组一关,一切回到原状。