十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Mockoon 本地接口模拟实战:前后端分离联调与自动化测试

Mockoon 本地接口模拟实战:前后端分离联调与自动化测试 上个季度接了个后台管理系统的活前端三个人后端接口只完成了一小半产品那边又定了两周后看可点击演示。这种局面做过交付的人都清楚卡点往往不在技术难度而在节奏对不上前端等着接口写页面后端被催着加班测试环境里的数据还三天两头被人改坏。为了把前端从等接口的循环里解放出来我把几款本地接口模拟工具挨个试了一遍最后把主力工具定成了 Mockoon。它是一款完全跑在本地的开源接口模拟API Mocking桌面工具不需要注册账号、不依赖任何远程平台装完就能建环境、写路由、造数据几秒钟给出一个能被浏览器和移动端真正请求到的假接口。这篇内容就是我这段时间用下来的完整记录从装到用从单条路由到整套环境管理包括踩过的坑和几套可以直接抄走的配置模板适合正在做前后端分离、需要自测和构造异常场景的开发者也适合给演示版本准备假数据的同学。1. 先想清楚 Mockoon 到底替你解决什么问题1.1 一个真实的前后端联调现场去年那套系统里有个订单列表页面前端需要拿到分页数据、状态筛选、空列表、超时、500 报错这五种情况下的表现。如果按传统流程走前端得等后端把接口写完、部署到测试环境然后再去找人手动改数据造异常。更麻烦的是后端为了让我看到超时得在代码里临时加一段 sleep为了让我看到 500还得硬塞一个抛异常的开关。等联调完这些临时改动还得记得删掉忘了删就是生产事故的种子。Mockoon 改变的是这个流程的起点。后端只要把接口文档给出来哪怕只是一段 Word 里的 URL 和字段说明我这边就能在本地把接口演出来状态码、响应头、响应体、延迟、甚至随请求参数变化的分支逻辑全都由我自己控制。前端什么时候需要异常场景我改一条规则就行不用求人也不用污染任何人的代码库。这件事的价值不只是快。它把接口的不确定性从外部依赖变成了内部变量——前端页面能不能扛住后端抖动这个问题的答案不再取决于后端今天有没有空而取决于我有没有把异常响应配出来。1.2 Mockoon 的产品形态与定位第一次打开 Mockoon 的时候我有点意外因为它长得太朴素了一个左侧列表、一个中间编辑区、一个底部日志面板没有花哨的图表没有引导弹窗甚至连登录入口都没有。这种朴素恰恰是它的定位——它不是一个接口协作平台而是一个纯本地的开发工具性质更接近 Postman 或 JSON Server而不是那些需要团队账号的在线 Mock 服务。它的核心模型只有四层理解这四层就理解了全部环境Environment一套完整的 Mock 服务配置对应一个监听端口。一个项目可以建多个环境比如日常测试和演示专用。路由Route一条接口由 HTTP 方法加路径组成比如GET /api/users/:id。响应Response一条路由可以有多个响应每个响应有自己的状态码、响应头、响应体和触发规则。数据桶Data Bucket环境级别的一份 JSON 数据可以被多条路由共享和引用。这套模型的设计意图很明显真实接口的复杂度主要体现在同一个 URL 在不同条件下返回不同结果所以它把响应从路由里拆出来单独管理。这个设计在后面配置业务场景时会省下大量重复劳动我在第 4 节会详细展开。另外值得提前说明的是Mockoon 的桌面端是免费开源的跨 Windows、macOS、Linux 三个平台底层用的是 Electron。项目本身还提供了命令行版本和容器镜像用来把配置好的环境跑在服务器或流水线里这部分我在第 5 节讲。1.3 同类方案横向对比与选型逻辑选型这件事我从来不看谁功能最多而是看哪种方案在团队里活得更久。功能再全如果每次改配置都要连内网、要审批、要等同步三周之后就没人用了。我把当时试过的几种方案列了个表对比维度是我自己真正在意的几项方案是否需要网络/账号运行位置动态数据能力团队共享成本适合场景Mockoon不需要本地桌面或容器模板函数 随机数据很强配置文件可进 Git个人开发、演示、异常场景构造在线 Mock 平台需要云端中等低但依赖第三方可用性跨团队协作、对外演示JSON Server不需要本地进程弱基本是静态增删改查需要自己写启动脚本快速起一套 CRUD 假数据自写 Express/Fastify不需要本地进程完全自由要写代码、要维护逻辑极其复杂的模拟场景抓包工具录制回放不需要本地弱数据是死的历史快照导出文件较大复现线上问题、排查历史请求我最后选 Mockoon 的理由有三条。第一条是零依赖启动不用先起一个 Node 服务也不用写任何代码配置界面点几下就能跑这对非后端同学特别友好——我们组的产品经理后来自己都会改返回文案了。第二条是配置即文件一个环境可以导出成一份 JSON扔进 Git 就能做版本管理和评审这比某人电脑上有一份配置靠谱得多。第三条是模板能力够用随机姓名、UUID、时间戳、循环生成数组这些都内置了造出来的数据看起来像真的前端在联调时更容易发现布局问题比如名字特别长会不会把表格撑破。自写 Express 的方案我也试过灵活度确实最高但问题在于它变成了一个新项目要有人维护依赖、要处理跨域、要写文档告诉别人怎么改。当一个辅助工具开始需要维护的时候它的性价比就崩了。2. 装好到跑通第一个接口十分钟够用2.1 下载安装与环境准备安装这一步没什么可讲的官网下载对应平台的安装包双击装完就行Windows 上会生成一个可执行程序macOS 上是 dmg 拖进应用目录。整个过程不需要额外的运行时不需要装 Node也不需要配置任何环境变量。这一点对刚接触的同学很重要很多人被 JSON Server 卡住的原因就是 Node 版本不对或者 npm 源的问题而 Mockoon 把运行时打包进去了。安装完之后我建议做两件事。第一件是把默认端口记下来默认是3000如果你本机已经跑了前端开发服务器或者别的服务很可能撞车早点改掉省得后面排查半天。第二件是找到环境数据的存盘位置Mockoon 会自动保存你的编辑内容到本机应用数据目录但这个位置不方便团队共享所以养成立即导出的习惯导出成一份 JSON 文件放到项目的mock/目录下跟着代码一起提交。这样别人 clone 下来导入一下就能用换电脑也不慌。如果你的机器上有比较严格的安全软件第一次启动 Mockoon 的时候可能会弹窗询问是否允许它监听本地端口选择允许即可。这类监听行为是本地开发工具的常规操作服务本身只在本机回环地址上暴露不涉及任何对外数据发送。2.2 界面四大区域速览Mockoon 的界面拆得很清楚我按使用频率从高到低说左侧是环境列表和路由列表上下分成两块。上半部分是环境每个环境前面有个开关控制这个 Mock 服务是否在监听。下半部分是当前环境下的所有路由路由列表的排序是有意义的这个后面讲规则的时候会重点说。中间是编辑区选中的是环境就显示环境配置端口、主机名、默认响应头、CORS 开关、TLS 设置等选中的是路由就显示这条路由的路径、方法、以及下面的多个响应配置。响应配置区域又能切到请求体匹配响应头响应体这几个标签页日常改得最多的就是响应体。底部是日志面板Logs记录每一个到达到你这个 Mock 服务的请求包含时间、方法、路径、命中的状态码、请求头、请求体。这个面板是我用得最勤的功能前端说接口返回不对的时候我先看日志里到底有没有请求进来、请求参数长什么样能省掉一大半互相甩锅的时间。日志面板里还有个开关控制是否记录如果压测场景下请求太多可以临时关掉减少干扰。右上角是启动/停止按钮以及环境切换的下拉框。这里有个小细节每条路由前面也有一个独立的开关可以单独把某条路由停掉用来验证前端在接口不存在时的表现。这个功能我在测试接口下线这类场景时用得挺多。2.3 手把手创建第一个可访问的接口我按完整流程走一遍你可以跟着操作第一步新建一个环境起个能看懂的名字比如demo-user-api。端口填3001主机名先保持默认的127.0.0.1或者localhost。主机名这个字段很关键默认只监听本机只有把它改成0.0.0.0才能让同一局域网的同事访问到这点我在 2.4 会展开。第二步在这个环境里新建一条路由。方法选GET路径填/api/users。注意路径不要带域名也不要带查询字符串查询参数是单独处理的。如果你习惯写/api/users?page1那样会匹配不上因为 Mockoon 是按路径结构匹配的。第三步配置响应。状态码保持200响应体类型选内联Inline然后粘贴一段 JSON{ code: 0, message: ok, data: { total: 3, list: [ { id: 1, name: 张三, role: admin }, { id: 2, name: 李四, role: editor }, { id: 3, name: 王五, role: viewer } ] } }第四步确认这条路由和它下面的响应都处于开启状态然后点左上角的启动按钮。启动成功后环境名旁边的指示灯会变绿底部日志面板会开始记录。第五步打开浏览器访问http://localhost:3001/api/users你应该能看到刚才那段 JSON。如果用的是前端项目把接口基地址临时指到http://localhost:3001就行不需要改任何业务代码——这也是我喜欢它的原因之一对接方式跟真实后端完全一致。注意新建路由后很多时候返回 404八成是路由或响应没启用。Mockoon 的路由和响应都有独立的开关新建时默认是开的但如果你从别人那里导入配置导入后要把整个环境和下面的开关都检查一遍。2.4 端口、主机名与局域网共享的几个坑这一节说的全是血泪。端口冲突是最常见的症状是点启动按钮后服务起不来或者日志里没有任何记录。排查方式很简单把端口换成3002、3003试或者用系统命令看一下端口占用情况。Windows 上可以用netstat -ano | findstr 3000macOS 和 Linux 上用lsof -i :3000。主机名字段经常被忽略。默认的127.0.0.1意味着只有你自己这台机器能访问手机真机调试、同事联调、容器内访问都会失败。改之前要想清楚一件事一旦改成0.0.0.0同一个局域网内的其他人就都能访问你的机器所以演示完记得改回来。如果只是想给同事临时看用0.0.0.0加对方的 IP 访问是够用的如果是长期共享我更建议用第 5 节的命令行方式跑在一台测试机上。TLS 场景也要提前考虑。有些前端项目的请求库或者浏览器安全策略在 https 页面里不允许请求 http 接口。Mockoon 的环境设置里可以开启 TLS 并指定证书文件用于这类必须走 https 的场景。自签证书在浏览器里会报警告测试环境点继续访问就行别在这上面纠结太久。还有一个细节环境级别的默认响应头。如果你希望所有接口都带上某个自定义头比如X-Mock-Source: demo在环境设置里配一次就够了不用每条路由重复加。这在你想确认前端到底请求的是 Mock 还是真实后端的时候很好用一眼就能分辨。3. 把假数据做得像真的响应配置与模板引擎3.1 状态码、响应头、延迟的实操姿势响应配置里最容易被低估的是延迟Latency。很多前端 bug 只在网络慢的时候才暴露比如加载态一闪而过、竞态导致旧请求覆盖新请求、骨架屏高度抖动。Mockoon 允许给响应配置固定延迟或者一个随机区间我通常给列表接口配300到800毫秒的随机延迟给提交类接口配800到1500毫秒。别小看这个设置它比任何代码评审都更容易发现问题。随机延迟的用法很简单在延迟字段里填一个区间比如300-800单位是毫秒。这个设计比固定值更贴近真实现场因为真实网络从来不会每次都一样快。状态码方面我习惯把异常响应单独做成一条路由下的另一个响应而不是去改正常响应的状态码。原因在第 4 节的规则部分会讲清楚一条路由多个响应配合规则自动分流比手动改来改去靠谱得多。响应头里有两个高频操作。一是Content-Type返回 JSON 时确保它是application/json如果是 JSONP 或者 XML 记得同步改掉否则前端解析会报错。二是跨域相关的那几个头Mockoon 的环境设置里有一个 CORS 开关打开后会统一补上跨域响应头这是最省事的做法。如果你不想全局开也可以在某条路由的响应头里单独加。3.2 路由匹配路径参数、通配与正则路径写法决定了你能模拟多复杂的接口。基础写法就是静态路径/api/users这种。进阶有两个方向路径参数用冒号声明比如/api/users/:id。请求/api/users/42会命中42可以在响应体里通过模板取出来用。这一点非常关键因为详情类接口的响应必须和请求的 ID 对应上否则前端点进详情页看到的是别人的数据会以为自己写错了逻辑。通配和正则用于处理模糊路径。比如你想让/api/files/2024/03/report.pdf和/api/files/2025/11/data.xlsx都命中同一条路由可以用通配符写法*或者正则写法。正则写法的好处是能精确约束坏处是可读性差团队里其他人看不懂。我的建议是能用通配就用通配正则只在真的需要约束格式时才上并且一定要在路由名字里写清楚这条路由是干什么的别让人对着^/api/v(\d)/.*$发呆。还有一个容易被忽略的点大小写和结尾斜杠。/api/users和/api/users/在很多框架里是两个不同的路径Mockoon 也会按字面匹配。前端团队里如果对这个没统一约定就会出现我这边能通别人那边 404的情况。我现在的做法是在环境里同时配两条路由一条带斜杠一条不带成本极低省事极多。3.3 模板语法把请求数据用起来Mockoon 的响应体里可以写模板语法是双大括号能同时拿到请求数据和生成随机数据。这是它跟纯静态 JSON 文件拉开差距的地方。我常用的是这几类取请求里的值{ userId: {{urlParam id}}, page: {{queryParam page 1}}, keyword: {{queryParam keyword}}, token: {{header Authorization}}, nickname: {{body user.name}} }urlParam取的是路径参数queryParam取的是查询参数header取请求头body取请求体里的字段。注意queryParam后面那个第二个参数是默认值请求里没带这个参数时会用默认值兜底这个细节能避免前端忘记传参时你的 Mock 返回一堆空字符串。生成随机数据用的是内置的随机数据生成器配合模板调用格式大致是这样{ id: {{faker string.uuid}}, name: {{faker person.fullName}}, email: {{faker internet.email}}, avatar: {{faker image.avatar}}, city: {{faker location.city}}, createdAt: {{now YYYY-MM-DD HH:mm:ss}} }注意随机数据的函数名在不同大版本之间改过。早期版本用的是比较老的命名方式新版本换成了带命名空间的新写法。如果你从别人那里导入了一份老配置发现返回体里原样输出了{{faker ...}}字样大概率就是版本命名差异导致的去官方文档查一下当前的函数名列表换掉即可。这里有个使用心得随机数据和固定数据要混着用。比如列表接口里如果每条记录的名字都是随机的前端排查问题时对不上号但如果全是张三李四又测不出长文本溢出的问题。我的做法是关键字段固定比如第一条永远是张三方便截图和写测试用例其余记录用随机值兼顾两边。3.4 动态数组一次生成二十条列表数据列表页的测试需求很具体要能快速切3 条数据20 条数据空列表。空列表最简单把list写成空数组就行。20 条数据如果用静态 JSON 手写改一次要人命。Mockoon 提供了循环语法可以按次数复制内容{ code: 0, total: 57, page: {{queryParam page 1}}, list: [ {{#repeat 20}} { id: {{index}}, name: {{faker person.fullName}}, role: {{oneOf (array admin editor viewer)}}, score: {{faker number.int 0 100}}, createdAt: {{now YYYY-MM-DD}} } {{/repeat}} ] }写这段的时候有两个细节要留意。一是循环体内的逗号处理不同版本对末尾逗号的处理方式可能有差异我的习惯是配好之后先在浏览器里请求一次把返回的 JSON 粘到格式化工具里确认能解析通过能解析就说明逗号没问题别等前端报语法错误才回头查。二是index从 0 开始如果你的业务 ID 要求从 1 开始直接写成表达式加一或者在数据桶里维护一份真实 ID 列表。这段配置解决的实际问题很具体产品说这个表格最多显示 19 行就要分页你看看超过会不会有问题。原来我得手动复制粘贴二十遍现在改个数字刷新两秒钟搞定。3.5 数据桶让多条路由共享同一份数据数据桶是我后来才用起来的功能用上之后配置文件干净了一大截。它的思路是把一份 JSON 数据存在环境级别多条路由通过引用去读它。举我实际遇到的例子。用户列表、用户详情、用户搜索这三个接口原来的做法是各写各的数据结果张三在列表里 ID 是 1在详情页里 ID 变成了 7前端调试的时候直接懵了。改成数据桶之后数据只维护一份列表接口做切片详情接口按 ID 去查搜索接口按关键字过滤三者天然一致。数据桶的数据在环境级别定义响应体里通过引用的方式取出来配合循环和条件判断就能实现很接近真实后端的行为。较新的版本里Mockoon 还支持基于数据桶直接生成一套增删改查路由对于只有简单 CRUD 需求的场景几分钟就能起一套能跑通的假后端。这里有个经验数据桶不适合放太大的数据。它本质是内存里的一份 JSON几百条记录没问题几万条就会让你的编辑界面开始卡而且配置文件体积会膨胀到没法做代码评审。大数据量的场景我建议还是用脚本生成后写进一个 JSON 文件然后用响应体的文件模式去返回编辑界面保持轻快。4. 规则与场景编排让同一个接口演出多种结果4.1 响应规则的三要素与匹配顺序一条路由可以挂多个响应每个响应可以带一组规则。规则由三部分组成目标看哪里、修饰符怎么比、值比什么。三部分都满足这个响应才算命中。目标是可选项里最丰富的一块常用的有请求体字段、查询参数、请求头、Cookie、路径参数、请求序号。我的经验是最常用来做业务分流的其实是请求体字段和查询参数。比如登录接口靠请求体里的用户名分流列表接口靠查询参数里的筛选条件分流。修饰符决定比较方式等于、正则、为空、不为空、包含这些覆盖了绝大多数需求。这里有个坑不要用正则去比对一个本来就该用等于判断的字段写起来复杂还容易因为大小写或空格匹配不上排查起来比写规则还费时间。匹配顺序是按响应列表从上往下第一个全部规则命中的响应胜出。没有配规则的响应通常作为兜底放在最下面。所以配规则时有一条铁律规则越具体的响应放得越靠上越宽泛的放得越靠下。我见过有人把兜底响应放在第一条结果下面所有带规则的响应全部失效查了半天以为是规则写错了其实只是顺序问题。4.2 一个登录接口的三种剧本我拿登录接口举个完整例子这是最能体现多响应价值的场景。同一条路由POST /api/login我配了三个响应第一个响应规则是请求体里的username等于测试账号、password等于正确密码返回 200响应体里给 token 和用户信息。这是正常流程。第二个响应规则是请求体里的password不等于预期值返回 200 但业务码是错误码响应体里给用户名或密码错误的提示。为什么用业务错误码而不是 401因为真实项目里很多后端就是这么设计的前端必须练会处理这种HTTP 成功但业务失败的情况。第三个响应不带任何规则放在最下面兜底返回 400 和一段参数校验失败的提示。这样前端传了空值、传了非法格式都能看到一个合理的错误而不是 404。这套配置带来的直接后果是前端的错误提示弹窗、表单校验、登录态失效处理全都能在本地完整走一遍。以前这些逻辑要等后端把三种情况都实现出来才能测现在我在工位上五分钟就配好了。同样的套路可以用在支付、下单、文件上传这些接口上。我给自己定的配置规范是每个核心接口至少三个响应——正常、业务失败、系统异常。系统异常那个响应配 500 加一段错误堆栈样式的 JSON用来验证前端的兜底页面。4.3 转发模式与回调联调切换的正确姿势写 Mock 的人都会遇到一个尴尬时刻后端说接口好了你把前端地址从 Mock 切到真实后端发现字段名跟文档不一致一堆地方要改。更难受的是切回去又要重新改一遍地址。Mockoon 的转发模式Proxy 模式能缓解这个问题。开启之后环境收到的请求会被转发到指定的真实后端地址你可以在中间观察请求和响应。这个能力在两种场景下特别有价值一是后端已经提供了一部分接口你想边用真实数据边 Mock 未完成的接口二是排查到底是我前端传错了还是后端返回错了把请求转过去对照日志一目了然。需要提醒的是转发模式开启后要注意响应内容别被意外缓存或者篡改用它排查问题时保持配置简单用完及时关掉。另外要留意真实接口的返回结构可能跟你 Mock 的不一样切换前先把字段对一遍能省下不少返工。另一个进阶功能是回调某个响应返回之后触发对另一个地址的请求。这个能力可以模拟提交订单后异步通知这类链路但配置复杂度会上升我一般只在需要演示完整链路的时候才用日常开发很少碰。4.4 用多环境管住不同配置我现在的习惯是一个项目建三个环境dev-local、demo、e2e-test。三个环境的路由基本一样区别在于端口、延迟和数据。dev-local用于日常开发延迟给中等数据里包含各种边界情况超长文本、空值、特殊字符。demo用于给客户演示端口换一个延迟调低到 100 毫秒以内数据只保留好看的那几条避免演示时出现测试用户 001这种尴尬内容。e2e-test用于自动化测试延迟设为 0数据完全固定保证每次跑的结果一致——随机数据在这里是灾难会让断言随机失败。环境之间可以整体复制不用一条条重建。复制完之后改端口、改数据几分钟的事。这个习惯养成之后最大的好处是演示当天我不用临时改配置直接切环境启动就行减少了现场手忙脚乱的概率。5. 命令行与团队协作把 Mock 服务变成团队资产5.1 环境文件的导入导出与版本管理桌面端配好的环境可以导出成一份 JSON 文件格式是可读的包含所有环境、路由、响应、规则和数据桶。这份文件是团队协作的核心载体。我的做法是在项目根目录建一个mock/目录把导出的文件放进去命名带上用途比如user-api.mock.json。提交到版本库之后新同事拉下来导入一下就能用。有几个实践细节值得说一是导出频率。我一般完成一批配置就导出一次因为桌面端的数据存在本机应用目录里重装系统或者换电脑就没了导出到项目里才是真的存下来。二是评审粒度。配置文件是 JSON改动会体现在 diff 里接口路径、状态码、响应体都能被评审到。如果一次提交里 diff 有上千行说明改动太大应该拆开。另外提醒一句导出的文件里如果包含随机数据模板diff 会比较容易看但如果包含大量静态数据diff 会很长这种时候可以考虑把大块数据拆到单独维护的文件里。三是敏感内容。Mock 数据里千万别放真实的用户信息、真实的密钥或者内部系统地址。这不是洁癖是真实发生过的教训有人把生产环境的测试账号写进了 Mock 配置一起提交进了公开仓库。用假名字、假邮箱、假手机号成本为零风险也为零。5.2 命令行启动与容器化桌面端适合个人开发但有两类场景它顶不住一是需要长期给团队提供一个共享的 Mock 服务二是希望把 Mock 服务塞进自动化流程。这时候用命令行版本。安装和启动的流程大致是这样npm install -g mockoon/cli mockoon-cli start \ --data ./mock/user-api.mock.json \ --port 3001 \ --hostname 0.0.0.0--data指定配置文件的路径--port指定监听端口--hostname设成0.0.0.0才能被同网段的其他机器访问。如果你的配置文件里包含了多个环境可以用索引参数指定跑第几个注意索引从 0 开始跑错环境是新手最常见的错误症状是接口返回的数据跟你预期完全不是一回事。容器方式在持续集成里更常见大致长这样docker run -d --name mock-api \ -p 3001:3001 \ -v $(pwd)/mock:/data \ mockoon/cli:latest \ --data /data/user-api.mock.json \ --port 3001 --hostname 0.0.0.0这套用法的价值在于Mock 服务变成了一个可以随时拉起的标准组件谁都不需要在自己电脑上折腾环境。我们的自动化测试流水线里就跑了一个容器测试用例启动前先把它拉起来跑完销毁全程无人干预。注意容器里如果配置文件路径写错进程通常会直接退出日志里会有明确提示。排查时先看容器日志别急着怀疑镜像问题。另外挂载目录时尽量用绝对路径相对路径在不同终端下的解析结果可能不一致。5.3 接入前端本地开发和自动化测试接入前端项目有两处需要改。开发环境里通常有一个接口地址的配置项把它指向 Mock 服务的地址就行比如http://localhost:3001。很多脚手架支持通过环境变量覆盖用起来更方便改完不用提交代码本地生效即可。自动化测试里接 Mock 服务的思路略有不同重点是数据要可预测。我会为测试单独准备一个环境所有响应都是固定值延迟为 0不启用任何随机数据。断言里写的期望值能稳定对上测试才不会变成随机失败的噪音源。如果测试需要造不同的响应就在路由上多配几个响应用请求参数区分而不是在测试代码里改 Mock 配置。还有一个实际用起来很舒服的场景离线开发。坐飞机或者网络环境差的场合真实接口请求会超时整个开发节奏被打断。把接口指向本地 Mock 服务读写都是本机的手感和在线时没有区别。5.4 从接口文档反向生成路由接口文档写完再手动一条条配路由是个挺枯燥的活。较新版本的 Mockoon 支持导入接口描述文件把路径、方法、字段结构批量生成成路由省掉大量重复输入。我实际用下来的体会是生成出来的东西适合当骨架不适合直接当成品。文档里写的字段类型和示例值通常是抽象的生成出来的响应体里可能只有字段名没有像样的数据。我的流程是先导入生成骨架然后花十几分钟给核心接口补上随机数据模板和规则剩下的边缘接口就保持骨架状态反正日常也不怎么用。同样地Mockoon 也能把配置导出成标准的接口描述文件用于同步给其他工具或者交给后端核对。这个能力在接口契约需要对齐的项目里很有用能避免我 Mock 的字段名和文档不一致这类低级问题。6. 常见问题排查速查表与踩坑实录6.1 请求打不通按这个顺序查我把排查顺序固定下来之后解决这类问题的平均时间从十几分钟压到了一两分钟现象最可能的原因处理方式浏览器连不上提示拒绝连接服务没启动、端口被占用、环境开关没打开看左上角指示灯换端口重试确认环境开关浏览器能开业务代码报跨域没有输出跨域响应头环境设置里打开跨域开关或单独加响应头返回 404路径不匹配方法不对结尾斜杠差异对照日志里的实际请求路径补一条对应路由返回的内容是模板原文响应体里没有开启模板处理或者函数名版本不对检查响应的模板开关核对随机数据函数名拿到的参数是空字符串取值函数用错了或者参数名拼错了路径参数用路径取值查询参数用查询取值规则不生效永远命中同一条响应顺序问题兜底响应排在了前面把具体规则往上移兜底放最后同事访问不到主机名还是回环地址或者系统防火墙拦截改成允许外部访问的地址放行端口排查的核心思路只有一句话先确认请求有没有到达再看它命中了哪条响应。日志面板里两样都能看到所以遇到问题第一件事永远是看日志而不是改配置。6.2 几个我踩过的坑第一个坑是在循环里写了多余的逗号。当时配一个列表接口本地能返回前端一解析就报 JSON 语法错误。折腾了一会儿才发现是循环展开后多了一个逗号。后来我养成了习惯任何带循环或者条件判断的响应体配置完第一件事是把返回结果复制到格式化工具里验证一次通过之后再通知前端。第二个坑是把随机数据和固定断言混在了一起。刚开始跑自动化测试的时候我复用了开发环境的配置里面有随机生成的名字和 ID结果测试时不时就红一次每次原因还都不一样。后来拆出专门给测试用的环境全部改固定值测试才真正有意义。这件事让我记住一个原则随机数据是给人看的固定数据是给机器校验的两者不要混。第三个坑是规则写得太宽泛。某次我在列表接口上配了一条规则只判断查询参数里的状态字段非空结果前端传了任何筛选条件都会命中这条后面正常数据的响应永远轮不上。解决方式是给每条规则加上具体值而不是只判断有没有值。规则越精确排查成本越低。第四个坑是配置文件里的路径依赖。我在响应体里用了文件模式指向一个本地绝对路径自己电脑上跑得好好的同事拉下来全是 404。后来改成相对项目根目录的路径问题消失。凡是涉及文件路径的配置都要假设别人是在另一台机器上用绝对路径不用考虑。6.3 关于中文和编码的两个细节中文乱码这事我遇到过两次。一次是响应头里的Content-Type没带字符集声明某些客户端会按默认编码解析导致中文显示成问号。解决办法是在响应头里明确写上字符集。另一次是用文件模式返回一个带中文的 JSON 文件文件本身的保存编码不是通用的那种改成常见编码后正常。所以我的建议是中文内容的接口响应头一定写全用文件模式返回数据时文件编码统一成通用格式如果前端用的是比较老的请求库优先用内联方式写响应体少走文件这条路。6.4 一套可以直接抄的配置节奏用了大半年我现在的配置节奏基本固化了写出来给你参考开工一个新模块先花十分钟把核心接口的路径和方法建出来响应体随便给个空对象让前端能先把请求打通。等前端开始填页面我再补数据结构用随机数据模板把字段填满加上中等延迟让加载态和分页能被真实感受到。前端说某个交互要测异常我就在对应路由下加一个带规则的响应返回错误码或者 500。临近演示切到演示环境把数据换成好看的那一版延迟调低。整个过程里我基本不写代码全是在界面里点。这也是我最后没有选自写服务的原因——它能让我把注意力放在业务场景上而不是放在工具本身的维护上。有几次我甚至是在跟产品开会对需求的时候现场把接口配出来给对方看确认字段命名和交互逻辑比画原型快得多。最后再分享一个小习惯我会在项目 README 里写一段三行的说明告诉团队怎么导入这份 Mock 配置、怎么启动、端口是多少。这三行字省掉的沟通成本比我写过的任何文档都高。工具本身从来不是难点让团队所有人都知道它在哪里、怎么用才是真正决定它能不能活下来的东西。
返回列表