[英]Wiremock variable substitution in JSON response
我正在尝试配置Wiremock映射,以使用请求中的值返回JSON响应。
请求很简单
{ "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请求,则所有模式<clientTag>(.*?)</clientTag>
都可以正常工作,但是我想坚持使用JSON。
不幸的是,Wiremock文档很少,因此是一个问题。 有任何想法吗?
更新:如果有人稍后再阅读,则最好使用代码中的转换,这些转换在Wiremock的更高版本中可用。
对于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",
"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"]
}
}
除非您添加了未提及的扩展名,否则它将无法正常工作-JSON API中没有“ captures”元素,也没有办法(没有扩展名)在响应中进行变量替换。
WireMock.Net现在确实支持此功能。
发送类似的请求时 :
{
"username": "stef"
}
并使用如下映射 :
{
"Request": {
"Path": {
"Matchers": [
{
"Name": "WildcardMatcher",
"Pattern": "/test"
}
]
},
"Methods": [
"post"
]
},
"Response": {
"StatusCode": 200,
"BodyAsJson": {
"path": "{{request.path}}",
"result": "{{JsonPath.SelectToken request.bodyAsJson \"username\"}}"
},
"UseTransformer": true,
"Headers": {
"Content-Type": "application/json"
}
}
}
响应将类似于:
{
"path": "/test",
"result": "stef"
}
请注意,此功能当前处于预览模式,请参阅NuGet软件包版本1.0.4.8-preview-01。
如果您有任何疑问,请在此github项目上创建一个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.