You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 13:36:03