JSON响应中的Wiremock变量替换
我正在尝试配置Wiremock映射以返回一个JSON响应,其中包含来自请求的值 请求很简单JSON响应中的Wiremock变量替换,json,jsonpath,wiremock,Json,Jsonpath,Wiremock,我正在尝试配置Wiremock映射以返回一个JSON响应,其中包含来自请求的值 请求很简单 { "clientTag": "123" } 它的映射是: { "priority": 4, "request": { "method": "POST", "urlPattern": "/test" }, "response": { "status": 200, "body": "{ \"loginId\": \"${loginId}\" }",
{ "clientTag": "123" }
它的映射是:
{
"priority": 4,
"request": {
"method": "POST",
"urlPattern": "/test"
},
"response": {
"status": 200,
"body": "{ \"loginId\": \"${loginId}\" }",
"headers": {
"Content-Type": "application/json"
}
},
"captures" : [ {
"source" : "BODY",
"target" : "loginId",
"pattern" : "$..clientTag",
"captureGroup" : 1
} ]
}
我收到的答复是:
{ "loginId": "" }
而预期的是:
{ "loginId": "123" }
如果我切换到XML请求,那么一切都可以使用模式(.*)
,但我想继续使用JSON
不幸的是,Wiremock文档很少,因此出现了这个问题。有什么想法吗
更新:如果有人稍后阅读此内容,您最好使用代码中的转换,这些转换在稍后的Wiremock版本中可用。除非您添加了一个您没有提到的扩展,否则这将无法工作-JSON API中没有“捕获”元素,也没有任何方法(没有扩展)在响应中进行变量替换。现在确实支持这一点 发送请求时,如: 并使用映射如: 响应将如下所示: 请注意,此功能当前处于预览模式,请参阅NuGet软件包版本1.0.4.8-preview-01
如果您有任何问题,只需在此github项目上创建一个问题。这似乎是一个完美的使用案例 它可以很容易地与独立服务器集成,如下所示:
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",
"bodyPatterns": [
{
"matchesJsonPath": "$.name"
}
]
},
"response": {
"status": 200,
"body": "{\"responseName\": \"$(name)\"}",
"headers": {
"Content-Type": "application/json"
},
"transformers": ["body-transformer"]
}
}
它还可以轻松地在响应中生成一个随机整数,如下所示:
{
"request": {
"method": "POST",
"urlPath": "/transform",
},
"response": {
"status": 200,
"body": "{\"randomInteger\": \"$(!RandomInteger)\"}",
"headers": {
"Content-Type": "application/json"
},
"transformers": ["body-transformer"]
}
}
嗨,汤姆,首先,谢谢你的精彩模仿!你是对的,我检查了一下,发现我们确实有捕获的扩展,我会从中挖掘。wiremock有完整的JSON API吗?我很难在互联网上找到很多关于它的信息。虽然没有一个文档覆盖整个JSON API,但整个wiremock.org都覆盖了它。你在找什么特别的东西吗?这正是我最后做的,谢谢!我的错是没有更新问题。听到这个消息太棒了!
{
"path": "/test",
"result": "stef"
}
{
"request": {
"method": "POST",
"urlPath": "/transform",
"bodyPatterns": [
{
"matchesJsonPath": "$.name"
}
]
},
"response": {
"status": 200,
"body": "{\"responseName\": \"$(name)\"}",
"headers": {
"Content-Type": "application/json"
},
"transformers": ["body-transformer"]
}
}
{
"request": {
"method": "POST",
"urlPath": "/transform",
},
"response": {
"status": 200,
"body": "{\"randomInteger\": \"$(!RandomInteger)\"}",
"headers": {
"Content-Type": "application/json"
},
"transformers": ["body-transformer"]
}
}