Wiremock Standalone 动态响应
Wiremock Standalone with Dynamic response
我有一个 Wiremock 服务器的独立实例。映射存储为映射文件夹下的 json 文件。我有一个 POST 请求需要在响应中 return 一个动态 ID(整数)。有没有办法在 json 文件中配置它?
在 WireMock 中,有许多用于生成 random strings 的响应模板辅助函数。在下面的示例中,我使用的是用于生成 UUID 的示例,但还存在其他几个选项。
映射文件:dynamic_id.json
{
"request": {
"method": "POST",
"url": "/dynamic_id"
},
"response": {
"headers": {
"Content-Type": "application/json"
},
"status": 200,
"body": "{{randomValue type='UUID'}}",
"transformers": ["response-template"]
}
}
使用空的 POST http://wiremock/dynamic_id 将 return 一个类似于 c2e6bf32-c9a3-45c0-b988-94fad04cc7a2
.
的 ID
启动 WireMock:
java -jar wiremock-standalone-2.18.0.jar --port 8181 --verbose --local-response-templating
这似乎是 OpenTable's Wiremock Body Transformer 的完美用例。
它可以像这样轻松地与独立服务器集成:
java -cp "wiremock-body-transformer-1.1.6.jar:wiremock-2.3.1-standalone.jar" com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --verbose --extensions com.opentable.extension.BodyTransformer
并允许您轻松指定要在响应中匹配的动态变量。
这是一个无需在请求中指定任何内容即可获取随机整数的示例,但是,如果您需要将请求中的特定变量与响应相匹配,那么使用此扩展也非常可行,而且数量众多示例可以在自述文件中找到。
{
"request": {
"method": "POST",
"urlPath": "/transform",
},
"response": {
"status": 200,
"body": "{\"randomInteger\": \"$(!RandomInteger)\"}",
"headers": {
"Content-Type": "application/json"
},
"transformers": ["body-transformer"]
}
}
为了使上面的示例工作,我必须 运行 带有 --global-response-templating
的独立 jar。然后我看到,例如,{{now}}
正在工作,这正是我想要的。不确定文档是否指定了这一点——我尝试了总是有用的 --help。
正如@Jeff 所提到的,如果您将 运行 作为一个 stand-alone 进程,则需要添加此标志 --global-response-templating
。这会将模板应用于每个响应。但是,您的回复可能很少 json 不需要模板。
在这种情况下使用 --local-response-templating
。并在响应中添加此字段 json:
response:{
"transformers": ["response-template"]
}
我有一个 Wiremock 服务器的独立实例。映射存储为映射文件夹下的 json 文件。我有一个 POST 请求需要在响应中 return 一个动态 ID(整数)。有没有办法在 json 文件中配置它?
在 WireMock 中,有许多用于生成 random strings 的响应模板辅助函数。在下面的示例中,我使用的是用于生成 UUID 的示例,但还存在其他几个选项。
映射文件:dynamic_id.json
{
"request": {
"method": "POST",
"url": "/dynamic_id"
},
"response": {
"headers": {
"Content-Type": "application/json"
},
"status": 200,
"body": "{{randomValue type='UUID'}}",
"transformers": ["response-template"]
}
}
使用空的 POST http://wiremock/dynamic_id 将 return 一个类似于 c2e6bf32-c9a3-45c0-b988-94fad04cc7a2
.
启动 WireMock:
java -jar wiremock-standalone-2.18.0.jar --port 8181 --verbose --local-response-templating
这似乎是 OpenTable's Wiremock Body Transformer 的完美用例。
它可以像这样轻松地与独立服务器集成:
java -cp "wiremock-body-transformer-1.1.6.jar:wiremock-2.3.1-standalone.jar" com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --verbose --extensions com.opentable.extension.BodyTransformer
并允许您轻松指定要在响应中匹配的动态变量。
这是一个无需在请求中指定任何内容即可获取随机整数的示例,但是,如果您需要将请求中的特定变量与响应相匹配,那么使用此扩展也非常可行,而且数量众多示例可以在自述文件中找到。
{
"request": {
"method": "POST",
"urlPath": "/transform",
},
"response": {
"status": 200,
"body": "{\"randomInteger\": \"$(!RandomInteger)\"}",
"headers": {
"Content-Type": "application/json"
},
"transformers": ["body-transformer"]
}
}
为了使上面的示例工作,我必须 运行 带有 --global-response-templating
的独立 jar。然后我看到,例如,{{now}}
正在工作,这正是我想要的。不确定文档是否指定了这一点——我尝试了总是有用的 --help。
正如@Jeff 所提到的,如果您将 运行 作为一个 stand-alone 进程,则需要添加此标志 --global-response-templating
。这会将模板应用于每个响应。但是,您的回复可能很少 json 不需要模板。
在这种情况下使用 --local-response-templating
。并在响应中添加此字段 json:
response:{
"transformers": ["response-template"]
}