跳转到正文

实战指南

本文通过实际案例,深入讲解 Mock 功能的完整用法。

分组管理

Mock 规则支持分组管理,通过分组可以将不同项目、不同场景的 Mock 规则隔离开来,互不干扰。

  • 新增分组 — 点击分组下拉框顶部的 + 新增分组,输入分组名称即可创建,创建后自动切换到新分组
  • 切换分组 — 通过分组下拉框切换当前分组,切换后 Mock 列表仅展示当前分组下的规则,其他分组的规则不会被加载
  • 删除分组 — 在下拉框中点击自定义分组右侧的删除图标,确认后即可删除该分组及其下所有 Mock 规则。默认分组不可删除
  • 跨组复制 — 通过右键菜单可将 Mock 规则复制到其他分组,复制后生成独立的副本,修改互不影响
  • 导入导出 — 导出支持选择「当前分组」或「全部」;导入时可选择导入到已有分组或新建分组,自动为新规则分配唯一 ID

表格设置

Mock 列表支持自定义列显示,点击工具栏中的列设置图标即可控制各列的显示与隐藏,设置会自动持久化,刷新后仍然保留。

单用例切换

同一个接口可以创建多条 Mock 规则,通过启用/停用或调整顺序来切换不同的响应数据,常用于 A/B 测试、多场景模拟等场景。

命名 Mock 规则

双击 Mock 列表的标题列,可以为每条 Mock 起一个有意义的名字(如「正常响应」「异常兜底」),方便区分:

命名 Mock 规则

勾选切换

通过勾选/取消勾选第一列的复选框,控制哪条 Mock 生效。未被勾选的规则不参与匹配,只保留勾选的那条作为当前响应。注意左上角标题栏中「测试1」「测试2」的切换效果:

勾选切换

拖拽排序

当多条 Mock 都处于勾选状态时,匹配规则相同的请求会优先命中排在最前面的那条。通过拖拽调整顺序即可切换命中的 Mock:

拖拽排序

高级 Mock

高级 Mock 模式允许通过编写 JavaScript 函数来动态生成响应,适用于需要根据请求参数、随机数据、时间戳等条件返回不同结果的场景。

在接口详情面板中将响应模式切换为「高级 Mock」,编辑器会切换为函数编辑模式,并提供完整的类型提示。

函数签名如下:

typescript
(context, response, { _, dayjs }) => {
  return response;
};

参数说明

  • context — 请求与响应的独立快照;修改该对象不会影响页面中的原始请求
    • context.request{ url, method, headers, body, query }
    • context.response{ status, statusText, headers }
  • response — 响应体数据,修改后作为返回值
  • utils — 工具集
    • utils._lodash
    • utils.dayjsdayjs

使用示例 — 根据分页参数动态生成列表数据:

javascript
(context, response, { _, dayjs }) => {
  const { query } = context.request;

  response.data.list = Array.from({ length: 10 }, (_, i) => ({
    id: i + 1,
    name: `项目${i + 1}`,
    date: dayjs().subtract(i, 'day').format('YYYY-MM-DD'),
  }));

  response.data.total = 100;
  response.data.pageNo = Number(query.pageNo) || 1;

  return response;
};

下面是编辑器中的实际效果:

高级 Mock 编辑器

搜索能力

监控面板提供灵活的搜索过滤能力,帮助快速定位目标请求。

搜索栏由三部分组成:关键词输入框搜索字段匹配方式

搜索字段 — 限定搜索范围:

  • 全部 — 在所有字段中搜索
  • URL — 匹配完整 URL(含域名)
  • 路径 — 仅匹配 URL 路径部分
  • 方法 — 匹配请求方法(GETPOST 等)
  • 查询参数 — 匹配 URL Query 参数
  • 请求体 — 匹配请求体内容
  • 响应体 — 匹配响应体内容
  • 高亮 — 仅显示有高亮标记的请求

匹配方式

  • 包含 / 不包含 — 关键词是否出现在字段中
  • 等于 / 不等于 — 字段值是否完全匹配
  • 正则 — 使用正则表达式匹配,如 ^/portal/.*

输入框右侧的「Aa」按钮可切换是否区分大小写。

搜索能力

Mock 其他能力

除了 Mock 响应体之外,还可以对请求的各类元数据和状态进行 Mock,下面逐一介绍。

入参 Mock

入参 Mock 可以修改发送到后端的请求参数,用于测试后端在不同入参下的真实响应。

  • POST / PUT / PATCH 等请求 — 勾选 Mock 请求体,在 Body 面板编辑请求体
  • GET / HEAD 等请求 — 勾选 Mock Query,在 Query 面板编辑查询参数

此时建议取消勾选 Mock 响应,因为入参 Mock 的目的是观察后端对不同入参的真实返回;同时开启响应 Mock 会覆盖真实结果,失去测试意义。

入参 Mock

请求头 Mock

与入参 Mock 原理一致,勾选 Mock 请求头 后可在 Headers Panel 中修改请求头,用于模拟不同客户端、切换身份令牌、测试跨域等场景。同样建议取消勾选 Mock 响应,以观察后端对不同请求头的真实处理结果。

1780450833124

Mock 特性

接口详情面板中还提供以下特性开关,可根据需要组合使用:

  • 忽略域名匹配 — 开启后只匹配 URL 路径,不区分域名,适用于同一接口在测试、预发、线上共用的情况

  • 模拟异常 — 开启后直接返回错误状态码(如 500),用于测试前端异常处理逻辑

    模拟异常

  • 模拟超时 — 开启后模拟网络请求超时,用于测试加载状态、超时重试等交互

  • 延迟响应 — 设置响应延迟时间(毫秒),用于模拟慢网络或测试 loading 效果

    延迟响应

以上特性可同时开启,例如同时开启 模拟异常 + 延迟响应 来测试弱网环境下的错误提示体验。

匹配策略演练

匹配策略决定了一条 Mock 规则如何与实际请求配对。下面通过实际场景演示四种策略的适用时机。

精确匹配 — 同接口不同入参

当同一接口需要根据不同请求参数返回不同 Mock 数据时,可以使用 精确匹配。两条规则互不干扰,各自返回独立的 Mock 数据。

1780465793579

相同的 URL 可以分别命中各自的 Mock。

1780465827257

路径匹配 — 全局统一兜底

当只需要关心接口路径、不关心请求参数时,可以使用 路径匹配,统一返回一份 Mock 数据。

  • GET /api/user/list?page=1&size=10 → 命中
  • GET /api/user/list?page=5&size=20 → 同样命中(query 被忽略)

1780466109032

智能匹配 — 现场回溯

精确匹配优先,未命中时自动降级为路径匹配,兼顾精确度和覆盖面。

场景:现场回溯导出了部分接口数据,需要保证已导出的精确还原,未导出的也有兜底响应。

  • 已导出的请求 GET /api/list?page=1&size=10 → 精确命中,返回导出数据
  • 未覆盖的请求 GET /api/list?page=2&size=20 → 降级为路径匹配,返回同一条 Mock

自定义匹配

当内置策略无法满足时,通过自定义组合 URL 匹配方式、请求方法、请求体比对条件来精确控制。

动态路径匹配

包含匹配 — 商品详情接口路径包含动态 ID,如 /api/goods/123/api/goods/456,需要所有商品 ID 统一返回同一份 Mock。

  • 选择自定义匹配,URL 匹配方式选择「包含」,填入 /api/goods/
  • 请求 /api/goods/123 → 命中
  • 请求 /api/goods/456 → 同样命中

正则匹配 — 接口路径前缀动态变化,如 /v1/api/list/v2/api/list

  • URL 匹配方式选择「正则」,填入 /v\d+/api/list
  • 请求 /v1/api/list → 命中
  • 请求 /v2/api/list → 同样命中

请求方法匹配

每条 Mock 规则可以配置是否匹配请求方法(GETPOSTPUTDELETE 等):

  • 匹配全部方法 — 不区分 HTTP 方法,只要 URL 和请求体匹配即命中
  • 匹配指定方法 — 仅匹配创建时记录的 HTTP 方法

场景:同一 URL 同时存在 GET /api/order(查询)和 POST /api/order(创建),需要分别 Mock 不同响应。

  • 创建两条规则,URL 相同但方法分别为 GETPOST
  • 开启 匹配指定方法,两条规则各自命中对应的请求

请求体比对

控制匹配时是否比较请求体内容:

  • 关闭(默认)— 只匹配 URL,不关心请求体
  • 开启URL 命中后,还要求请求体指纹一致才命中

场景PUT /api/user/update 接口,需要根据不同的更新内容返回不同结果。

  • 开启请求体比对后,body: {"name": "张三"}body: {"name": "李四"} 会分别匹配到不同的 Mock 规则

TIP

请求体比对在精确匹配和智能匹配中默认开启,在路径匹配中默认关闭。自定义匹配中可手动控制。

以下是一个组合示例:方法设为 ALLURL 正则设置为任意字符都能匹配,并关闭请求体比对。

自定义匹配示例

所有接口都会命中这条 Mock。

1780467947062

Released under the MIT License. · [隐私政策](/privacy) · [服务条款](/terms) · 联系:[arktomson99@gmail.com](mailto:arktomson99@gmail.com)