使用Wiremock如何匹配POST请求体中含随机端口的Resource字段URL?
实现方案
以下是两种可直接使用的匹配方案,按实现复杂度从低到高排列:
方案1:equalToJson 带正则占位符(最简便,适合需要匹配整体请求体的场景)
Wiremock 的equalToJson原生支持JSON Unit的正则占位符语法,你只需要在端口位置替换为正则表达式即可,示例配置如下:
{ "request": { "method": "POST", "url": "/你的Wiremock接口路径", "bodyPatterns": [ { "equalToJson": { "1": { "Method": "POST", "Resource": "${json-unit.regex}http://localhost:\\d+/piwebapi/assetdatabases/D0NxzXSxtlKkGzAaZhKOB-KABJ2buwfWrkye3YhdL2FOUAUEhMQUZTMDRcQgYUUEVSRk9STUFOQ0UgVEVTVElORw/elements", "Content": "{\"Name\":\"New Element\"}" } }, "ignoreExtraElements": true } ] }, "response": { "status": 200, "body": "你的返回内容" } }
${json-unit.regex}前缀表示后续内容按正则匹配,\\d+即可匹配任意数字组成的随机端口。ignoreExtraElements设置为true可以忽略请求体里额外的字段,避免匹配失败。
方案2:matchesJsonPath 匹配(更灵活,适合仅需校验Resource字段的场景)
如果你不需要匹配请求体的其他字段,只需要校验Resource的值符合规则,可以用JsonPath匹配,配置更简洁:
{ "request": { "method": "POST", "url": "/你的Wiremock接口路径", "bodyPatterns": [ { "matchesJsonPath": "$.['1'].Resource[?(@ =~ /http:\\/\\/localhost:\\d+\\/piwebapi\\/assetdatabases\\/D0NxzXSxtlKkGzAaZhKOB-KABJ2buwfWrkye3YhdL2FOUAUEhMQUZTMDRcQgYUUEVSRk9STUFOQ0UgVEVTVElORw\\/elements/)]" } ] }, "response": { "status": 200, "body": "你的返回内容" } }
如果你的测试环境不固定、连localhost都可能变动,可以把正则写得更宽松,比如用.*\\/piwebapi\\/assetdatabases.*匹配任意域名端口下的对应路径,兼容性更强。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

