请求参数与 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 匹配条件时,Mock 引擎默认执行 AND(与)逻辑——所有条件均需匹配成功才返回 Mock 响应。若需 OR 逻辑,通常需要编写多条规则,或使用高级脚本引擎。
4.7 调试建议
- 在配置 Mock 规则前,先用
curl发送精确请求并检查实际参数/Header 值。 - 开启 Mock 工具的请求日志模式(如
--verbose),查看实际匹配了哪条规则。 - 正则匹配时先在在线测试工具中验证表达式,再写入配置文件。
- 自定义 Header 规则中的 Key 名称需与请求完全一致(部分工具自动转换为小写,需查看文档)。