WireMock:临时禁用存根响应

问题描述 投票:0回答:5

我使用 WireMock 来存根来自远程服务器的响应。 在文件夹

wiremock/mappings
中,我有许多为存根设置规则的文件。 这里的例子:

{

  "request": {
    "method": "GET",
    "url": "/merchant"
  },
  "response": {
    "headers": {
      "Content-Type": "application/json"
    },
    "status": 200,
    "fixedDelayMilliseconds": 3000,
    "bodyFileName": "stub_response.json"
  }
}

如您所见,当我收到请求

/merchant
然后从文件
stub_response.json
返回存根响应。 好的。工作顺利。

但是假设我需要暂时禁用此响应。是否可以关闭存根响应并从远程服务器返回真实响应?

我需要这样的标志:

"disable" : true

在 WireMock 中可以吗?

wiremock
5个回答
2
投票

您可以使用 WireMock 管理界面禁用规则。如果您对

http://.../__admin/mappings/<guid>
调用 DELETE 命令,则映射将被删除。

您可以通过对

http://.../__admin/

执行 GET 命令来获取所有 guid 的列表

如果您想用真实响应而不是存根响应替换映射,您可以添加第二个映射,该映射的优先级低于存根响应,并代理到真实地址。通常,您的存根响应将被使用,但是当您删除存根响应时,Wiremock 将代理到真实地址,因为它将成为最高优先级映射。

要添加代理,请将以下内容添加到响应映射中

"proxyBaseUrl" : "http://otherhost.com",

要设置映射的优先级,请将以下内容添加到映射 JSON 中。

"priority": 1,


0
投票

目前规则没有禁用属性。您可以删除wiremock规则并稍后重新添加它,这在功能上是相同的。


0
投票

如果您将 Wiremock 作为独立进程运行,您可以将其设置为记录模式,这将有效地将所有请求代理到目标 URL。

打开 http://localhost:8080/__admin/recorder(假设您在默认端口 8080 上启动了 WireMock),在该屏幕上您必须输入目标 URL 并单击“录制”按钮。直到您停止录制,它才会让这个 Wiremock 充当代理。

如果录制不是您实际需要的内容,您可以忽略录制的存根映射。虽然这有点误用了 Recorder 功能,但它是一种快速而简单的方法,可以暂时将 Wiremock 变成代理,而不是使用存根进行响应。


0
投票

Wiremock 可以根据其运行的“场景状态”来选择要使用的装置。在不同的状态下,即使对于相同的请求,它也可以有不同的映射,从而以不同的方式表现(在一种状态下可以从固定装置响应,而在另一种状态下它可以转发到真实的 API)。 假设有一个

Proxy

场景,当前处于默认的 Started 状态,那么所有查询都将由不特定于任何场景状态的存根提供服务。 但是,如果

Proxy

场景处于 Active 状态,并且我们有一个特定于该场景状态的映射(requiredScenarioState 属性),并且它的优先级高于默认值,那么该映射将被执行此 Wiremock 实例的任何 URI: { "scenarioName": "Proxy", "requiredScenarioState": "Activated", "priority": 2, "request": { "urlPattern": ".*" }, "response": { "proxyBaseUrl": "https://swapi.dev/api" } }

当此映射匹配时,
response.proxyBaseUrl

的值将使所有请求转发到提供的主机。 现在我们需要能够将

Proxy

场景切换到 Activated 状态并返回, 因此我们为此 Wiremock 上的 POST /proxy 端点定义了另外两个映射。它们将具有更高的

priority
- 1,因此它们甚至可以覆盖 "urlPattern": ".*" 的映射。
将包含所有三个映射的 JSON 文件拖放到您的 

wiremock/mappings

:

{
    "mappings": [
        {
            "scenarioName": "Proxy",
            "requiredScenarioState": "Activated",
            "priority": 2,
            "request": {
                "urlPattern": ".*"
            },
            "response": {
                "proxyBaseUrl": "https://swapi.dev/api"
            }
        },
        {
            "priority": 1,
            "scenarioName": "Proxy",
            "requiredScenarioState": "Activated",
            "newScenarioState": "Started",
            "request": { "method": "POST", "url": "/proxy"},
            "response": { "status": 201, "body": "Proxy De-activated (Stubs will be used)" }
        },
        {
            "priority": 1,
            "scenarioName": "Proxy",
            "requiredScenarioState": "Started",
            "newScenarioState": "Activated",
            "request": { "method": "POST", "url": "/proxy" },
            "response": { "status": 201, "body": "Proxy Activated (Will forward all requests)" }
        }
    ]
}

现在您可以将 
Proxy

场景切换到 Activated 状态, 然后将其切换回Started状态: curl http://localhost:8080/proxy -XPOST

这种方法的好处是,可以通过最少的更改将该映射文件从一个项目复制到另一个项目。


0
投票

因此,首先为存根设置较高的优先级,为代理规则设置较低的优先级。然后,当您想在一段时间内避免存根时,请为代理规则提供较高的优先级,为存根规则提供较低的优先级。

© www.soinside.com 2019 - 2024. All rights reserved.