具有动态响应的 Wiremock 独立版



我有一个独立的Wiremock服务器实例。映射作为 json 文件存储在映射文件夹下。我有一个 POST 请求,需要在响应中返回一个动态 ID(整数(。有没有办法在 json 文件中配置它?

为了使上述示例正常工作,我必须使用--global-response-templating运行独立的 jar。然后,例如,我看到{{now}}工作,这就是我想要的。不确定文档是否指定了这一点 - 我尝试了总是有用的 - 帮助。

在 WireMock 中,有许多用于生成随机字符串的响应模板帮助程序函数。在下面的示例中,我使用一个来生成 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 将返回类似于以下内容的 id:c2e6bf32-c9a3-45c0-b988-94fad04cc7a2

启动 WireMock:

java -jar wiremock-standalone-2.18.0.jar --port 8181 --verbose --local-response-templating

这似乎是OpenTable的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"]
}
}

正如@Jeff提到的,如果您将其作为独立进程运行,则需要将此标志添加--global-response-templating。这会将模板应用于每个响应。但是,您的响应可能很少是普通的 json,不需要模板。

在这种情况下,请使用--local-response-templating. 并在 reponse json 中添加此字段:

response:{
"transformers": ["response-template"]
}

最新更新