【问题标题】:Wiremock - redirect to proxy when first mapping errorWiremock - 第一次映射错误时重定向到代理
【发布时间】:2019-08-17 01:03:45
【问题描述】:

我正在尝试使用 Wiremock 2.24.1 根据请求路径动态返回不同的主体文件,如果在本地找不到,我想调用外部资源(作为代理)。

我正在使用这个映射文件:

{
  "priority": 1,
  "request" : {
    "urlPattern" : "/rest/v2/name/.*",
    "method" : "GET"
  },
  "response" : {
    "status" : 200,
    "bodyFileName" : "rest_v2_name_{{request.requestLine.pathSegments.[3]}}_body.json",
    "headers" : {
      "Content-Type" : "application/json;charset=utf-8"
    },
    "transformers": ["response-template"]
  }
}

我有一个名为 rest_v2_name_springfield_body.json 的文件,其中包含此内容

[
    {
        "name": "Springfield",
        "now": "{{now}}",
        "yesterday"; "{{now offset='-1 days' format='yyyy-MM-dd HH:mm:ssZ'}},
        "tomorrow"; "{{now offset='1 days' format='yyyy-MM-dd HH:mm:ssZ'}}
    }
]

当我调用 curl http://localhost:8099/rest/v2/name/springfield 时返回:

[
    {
        "name": "Springfield",
        "now": "2019-08-17T00:23:12Z",
        "yesterday"; "2019-08-15 21:23:12-0300,
        "tomorrow"; "2019-08-17 21:23:12-0300
    }
]

如果我使用另一个路径值(如 http://localhost:8099/rest/v2/name/brasil)调用,我希望由这个其他映射处理:

{
  "priority": 10,
  "request" : {
    "urlPattern" : "/rest/v2/name/.*",
    "method" : "GET"
  },
  "response" : {
    "proxyBaseUrl" : "http://restcountries.eu"
  }
}

但是,我没有回答 http://restcountries.eu/rest/v2/name/brasil 的响应,而是收到带有此消息的本地 HTTP 500 错误(我相信它来自第一个匹配映射):

java.io.FileNotFoundException: ./__files/rest_v2_name_brasil_body.json

我尝试了这个替代方案

  • 我禁用了第一个映射(只是肯定的),wiremock 按预期作为代理工作。
  • 我在代理映射文件上尝试了更广泛的 urlPattern ".*",但没有奏效,第一个映射仍然应答了呼叫。
  • 我切换了优先级(1 到代理,10 到本地映射),但所有呼叫都由代理应答,包括“springfield”。

有没有办法在不编码的情况下解决这种情况?

【问题讨论】:

    标签: java spring-boot proxy stub wiremock


    【解决方案1】:

    不管代理on/off,Wiremock 将始终遵循优先级。

    考虑到你有相同的请求模式,

    案例-I:当您有Proxy(brasil) at priority 1stub-mapping(spingfield) at priority 10 时:您将仅通过代理获得所有响应。其他映射类型的事情没有故障转移检查。

    案例-I:当您拥有Proxy(brasil) at priority 10stub-mapping(spingfield) at priority 1 时:您将获得与您配置的存根映射相同的响应,因为每个请求都将满足springfield 规则。

    要解决这个问题,您需要在使用 Proxy 时记录每个请求。

    停止录制后,您可以检查映射并根据需要添加其他映射!

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 2019-07-10
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-10-29
      • 2019-04-05
      • 2015-07-18
      • 1970-01-01
      相关资源
      最近更新 更多