如何发送由 header 值驱动的 wiremock 存根响应

How to send wiremock stub responses driven by header value

我需要用 wiremock 构建一个存根并让它 return 一个响应或另一个基于某个 header 使用简单规则的响应:

    {
      "request": {
        "request": {
          "method": "POST",
          "urlPattern": "/v1/my/path"
        }
      },
      "response": {
        "headers": {
          "Content-Type": "application/json"
        },
        "bodyFileName": "files/{{request.headers.<first.three.characers.of.my.header matching 400/500 or 202 otherwise>}}-response.json"
      }
    }

提前感谢您的投入

如果您只需要一个映射,那么您必须编写一个自定义扩展来实现它。我不相信只有 return 前三个字符的解析足够智能。此外,您需要为每个可能在 header.

中发送的状态代码创建一个 JSON 文件

相反,您可以拥有三个包含所需匹配项的独立映射。

{
    "priority": 1,
    "request": {
        "url": "/some/path",
        "headers": {
            "some-header": {
                "matches": "400.*"
            }
        }
    },
    "response": {
        "status": 400,
        "bodyFileName": "some-400-response.json",
    }
}

{
    "priority": 1,
    "request": {
        "url": "/some/path",
        "headers": {
            "some-header": {
                "matches": "500.*"
            }
        }
    },
    "response": {
        "status": 500,
        "bodyFileName": "some-500-response.json",
    }
}
{
    "priority": 2,
    "request": {
        "url": "/some/path"
    },
    "response": {
        "status": 200,
        "bodyFileName": "some-other-response.json",
    }
}

这些映射中发生的两件主要事情是:

  • 使用优先级(1 用于特定 400/500 案例,2 用于一般案例)
  • 匹配 header 值(正则表达式匹配前三个字符,然后 (.*) 匹配 header 的其余部分)