WireMock:临时禁用存根响应
WireMock: Temp disable stub response
我使用 WireMock 来存根来自远程服务器的响应。
在文件夹 wiremock/mappings
中,我有许多为存根设置规则的文件。
这里的例子:
{
"request": {
"method": "GET",
"url": "/merchant"
},
"response": {
"headers": {
"Content-Type": "application/json"
},
"status": 200,
"fixedDelayMilliseconds": 3000,
"bodyFileName": "stub_response.json"
}
}
如您所见,当我收到请求 /merchant
时,return 存根了来自文件 stub_response.json
的响应。
好的。工作正常。
但假设我需要临时禁用此响应。是否可以关闭存根响应和 return 来自远程服务器的真实响应?
我需要这样的标志:"disable" : true
在 WireMock 中可以吗?
目前没有规则的禁用属性。您可以删除 wiremock 规则并稍后重新添加它,这在功能上是相同的。
您可以使用 WireMock 管理界面禁用规则。如果您对 http://.../__admin/mappings/<guid>
调用 DELETE 命令,则映射将被删除。
您可以通过对 http://.../__admin/
执行 GET 命令来获取所有 guid 的列表
如果您想用真实响应而不是存根响应替换映射,您可以添加第二个映射,该映射的优先级低于存根响应并且代理到真实地址。通常,您的存根响应将无法使用,但是当您随后删除存根响应时,Wiremock 将代理到真实地址,因为它将成为最高优先级映射。
要添加代理,请将以下内容添加到响应映射中
"proxyBaseUrl" : "http://otherhost.com",
要设置映射的优先级,请将以下内容添加到您的映射中 JSON。
"priority": 1,
如果您 运行 Wiremock 作为 Stand-alone process, you can set it into recording mode,这实际上会将所有请求代理到目标 URL。
打开 http://localhost:8080/__admin/recorder(假设您在默认端口 8080 上启动 WireMock),您必须在该屏幕上输入目标 URL 并单击“记录”按钮。在您停止录制之前,它将使此 Wiremock 充当代理。
如果记录不是您实际需要的东西,您可以关闭记录的存根映射。虽然这有点误用了 Recorder 功能,但它是一种快速简便的方法,可以将您的 Wiremock 临时转换为代理,而不是使用存根进行响应。
Wiremock 可以 select 使用哪个夹具取决于它在哪个 state of a scenario 中运行。在不同的状态下,即使对于相同的请求,它也可以有不同的映射,从而以不同的方式表现(在一个状态下可以从固定装置响应,而在另一个状态下它可以转发到真实的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
端点再定义两个映射。它们将具有更高的 优先级 - 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
这种方法的好处是可以将此映射文件从一个项目复制到另一个项目,只需进行极少的更改。
我使用 WireMock 来存根来自远程服务器的响应。
在文件夹 wiremock/mappings
中,我有许多为存根设置规则的文件。
这里的例子:
{
"request": {
"method": "GET",
"url": "/merchant"
},
"response": {
"headers": {
"Content-Type": "application/json"
},
"status": 200,
"fixedDelayMilliseconds": 3000,
"bodyFileName": "stub_response.json"
}
}
如您所见,当我收到请求 /merchant
时,return 存根了来自文件 stub_response.json
的响应。
好的。工作正常。
但假设我需要临时禁用此响应。是否可以关闭存根响应和 return 来自远程服务器的真实响应?
我需要这样的标志:"disable" : true
在 WireMock 中可以吗?
目前没有规则的禁用属性。您可以删除 wiremock 规则并稍后重新添加它,这在功能上是相同的。
您可以使用 WireMock 管理界面禁用规则。如果您对 http://.../__admin/mappings/<guid>
调用 DELETE 命令,则映射将被删除。
您可以通过对 http://.../__admin/
如果您想用真实响应而不是存根响应替换映射,您可以添加第二个映射,该映射的优先级低于存根响应并且代理到真实地址。通常,您的存根响应将无法使用,但是当您随后删除存根响应时,Wiremock 将代理到真实地址,因为它将成为最高优先级映射。
要添加代理,请将以下内容添加到响应映射中
"proxyBaseUrl" : "http://otherhost.com",
要设置映射的优先级,请将以下内容添加到您的映射中 JSON。
"priority": 1,
如果您 运行 Wiremock 作为 Stand-alone process, you can set it into recording mode,这实际上会将所有请求代理到目标 URL。
打开 http://localhost:8080/__admin/recorder(假设您在默认端口 8080 上启动 WireMock),您必须在该屏幕上输入目标 URL 并单击“记录”按钮。在您停止录制之前,它将使此 Wiremock 充当代理。
如果记录不是您实际需要的东西,您可以关闭记录的存根映射。虽然这有点误用了 Recorder 功能,但它是一种快速简便的方法,可以将您的 Wiremock 临时转换为代理,而不是使用存根进行响应。
Wiremock 可以 select 使用哪个夹具取决于它在哪个 state of a scenario 中运行。在不同的状态下,即使对于相同的请求,它也可以有不同的映射,从而以不同的方式表现(在一个状态下可以从固定装置响应,而在另一个状态下它可以转发到真实的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
端点再定义两个映射。它们将具有更高的 优先级 - 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
这种方法的好处是可以将此映射文件从一个项目复制到另一个项目,只需进行极少的更改。