请求参数与 Header 匹配:精确匹配与正则匹配、自定义 Header 规则

在 API 接入测试中,Mock 工具需要根据 请求参数 和 请求头 准确返回模拟数据。本阶段讲解如何通过精确匹配、正则匹配以及自定义 Header 规则来定向控制 Mock 响应。

4.1 精确匹配

精确匹配要求请求中的参数或 Header 值与规则内定义的值完全一致(区分大小写、顺序无关)。适用于固定参数场景。例如:

常用场景:GET /api/order?status=paid&page=1,仅当 status=paid 且 page=1 时才触发 Mock。
// Mock 规则配置(JSON)
{
  "request": {
    "method": "GET",
    "path": "/api/order",
    "query": {
      "status": "paid",
      "page": "1"
    }
  },
  "response": {
    "status": 200,
    "headers": { "Content-Type": "application/json" },
    "body": { "orderId": 12345, "status": "paid" }
  }
}

4.2 正则匹配

当参数值不确定但符合某种模式时,使用正则表达式来放宽匹配条件。支持对 path、query 参数值、header 值进行正则匹配。例如:

// 正则匹配路径中的动态 ID
{
  "request": {
    "method": "GET",
    "path": "/api/user/\\d+"
  },
  "response": {
    "status": 200,
    "body": { "id": 0, "name": "mock_user" }
  }
}

// 正则匹配查询参数中的  格式
{
  "request": {
    "method": "POST",
    "path": "/api/data",
    "query": {
      "": "^[a-f0-9]{32}$"
    }
  },
  "response": {
    "status": 200,
    "body": { "result": "authenticated" }
  }
}
正则表达式引擎通常使用 Perl 兼容(PCRE),需注意转义:数字 \d、单词边界 \b 等。在 JSON 字符串中需双重转义,例如 \\d+。

4.3 自定义 Header 规则

除了参数匹配,还可以基于请求 Header 字段(如 Authorization、X-Request-ID)来决定 Mock 响应。支持精确匹配与正则匹配。示例:

// 精确匹配 Header
{
  "request": {
    "method": "GET",
    "path": "/api/profile",
    "headers": {
      "Authorization": "Bearer mock--123"
    }
  },
  "response": {
    "status": 200,
    "body": { "email": "mock@example.com" }
  }
}

// 正则匹配 Header 值
{
  "request": {
    "method": "DELETE",
    "path": "/api/resource",
    "headers": {
      "X-Request-ID": "req-[0-9a-f]{8}"
    }
  },
  "response": {
    "status": 204
  }
}

4.4 三种匹配策略对比

匹配类型 目标对象 匹配方式 性能 适用场景
精确匹配 参数值 / Header 值 全等对比 最快 固定测试数据、回归测试
正则匹配 路径 / 参数值 / Header 值 正则表达式 中等 动态 ID、UUID、 格式校验
自定义 Header 规则 请求头 精确 or 正则 中等 鉴权、路由、版本控制头

4.5 实战案例:组合匹配

模拟一个需要同时匹配 查询参数 和 Header 的接口:

// 组合匹配规则
{
  "request": {
    "method": "POST",
    "path": "/api/checkout",
    "query": {
      "currency": "USD",
      "amount": "\\d+\\.\\d{2}"   // 金额正则
    },
    "headers": {
      "User-Agent": "Mozilla/5.0",
      "X-Session-Id": "sess-[a-zA-Z0-9]{16}"
    }
  },
  "response": {
    "status": 200,
    "headers": { "X-Transaction": "txn-123" },
    "body": { "status": "ok", "total": 100.00 }
  }
}

此时,只有同时满足:
• 方法 POST
• 路径 /api/checkout
• 参数 currency=USD 且 amount 是浮点数格式
• Header 包含 User-Agent 精确值、X-Session-Id 正则匹配
Mock 才会返回 200 响应,否则进入默认行为(如返回 404 或继续转发)。

4.6 匹配流程概述

下图展示了请求进入 Mock 引擎后,参数与 Header 匹配的决策路径:

请求参数与 Header 匹配流程 客户端请求 参数匹配 精确 / 正则 Header 匹配 自定义规则 匹配成功 匹配失败 返回 Mock 响应 返回默认响应 虚线箭头:另一分支未匹配
注意:当请求同时包含参数和 Header 匹配条件时,Mock 引擎默认执行 AND(与)逻辑——所有条件均需匹配成功才返回 Mock 响应。若需 OR 逻辑,通常需要编写多条规则,或使用高级脚本引擎。

4.7 调试建议

  • 在配置 Mock 规则前,先用 curl 发送精确请求并检查实际参数/Header 值。
  • 开启 Mock 工具的请求日志模式(如 --verbose),查看实际匹配了哪条规则。
  • 正则匹配时先在在线测试工具中验证表达式,再写入配置文件。
  • 自定义 Header 规则中的 Key 名称需与请求完全一致(部分工具自动转换为小写,需查看文档)。