Wiremock动态值请求匹配:如何匹配请求体中动态id字段
Wiremock动态JSON字段匹配解决方案
方案1:使用matchesJsonPath做定向字段校验
如果你仅需要校验id字段的存在性或格式规则,不需要匹配整个JSON结构,直接通过JSON路径匹配规则实现即可,示例配置如下:
{ "request": { "bodyPatterns": [ // 仅校验id字段存在 { "matchesJsonPath": "$.id" }, // 如需限定id为字母数字组合,可改用正则匹配规则 { "matchesJsonPath": "$.id[?(@ =~ /[a-zA-Z0-9]+/)]" } ] } }
方案2:使用equalToJson占位符功能(推荐,适合保留整体JSON结构匹配的场景)
Wiremock 2.0+版本支持在equalToJson规则中开启占位符能力,仅忽略指定动态字段的取值校验,其余字段仍按原有规则匹配:
- 首先在equalToJson的JSON模板中,将动态字段的取值替换为对应的占位符:
- 完全不校验字段取值:用
${json-unit.ignore} - 校验字段取值符合指定正则:用
${json-unit.regex}你的正则表达式
- 完全不校验字段取值:用
- 新增
"placeholders": true参数开启占位符解析能力
示例配置如下:
{ "request": { "bodyPatterns" : [ { "equalToJson" : "{ \"id\": \"${json-unit.ignore}\" }", "ignoreArrayOrder" : true, "ignoreExtraElements" : true, "placeholders": true } ] } }
如果需要限定id为6位字母数字组合,可调整equalToJson值为:
"equalToJson" : "{ \"id\": \"${json-unit.regex}[a-zA-Z0-9]{6}\" }"
注意事项
- 占位符功能需要Wiremock 2.3.1及以上版本支持,低版本请优先使用
matchesJsonPath方案 - 如果动态字段为数值/布尔类型,不需要给占位符加引号,例如数值类型id的写法为
"id": ${json-unit.ignore}
内容的提问来源于stack exchange,提问作者Cork Kochi
相关产品推荐
相关产品推荐

