我正在尝试使用Wiremock独立进程来模拟来自服务器的答案。情况是,对于特定的端点(我们称其为/ items),我可以提供多个查询参数(例如/items?item=1&item=10&item=12
)。
我想根据查询参数“构建”来自不同json文件的响应-因此构建带有数组的jsonBody之类的东西,其中包含来自item_1.json
,item_10
和{{1}的独立json文件的内容}
也许一个例子可以说明更多-这是映射文件:
item_12
所以基本上我很好奇是否有一种方法可以基于Wiremock中的查询参数来响应多个文件内容?
不幸的是,到目前为止,我只是收到纯文本:
{
"request": {
"method": "GET",
"urlPathPattern": "/items",
"queryParameters": {
"item": {
"matches": "1"
},
"item": {
"matches": "10"
},
"item": {
"matches": "12"
}
}
},
"response": {
"status": 200,
"jsonBody": {
"items": [
{
"bodyFileName": "items/item_{{request.query.item.first}}.json"
},
{
"bodyFileName": "items/item_{{request.query.item.[-1]}}.json"
},
{
"bodyFileName": "items/item_{{request.query.item.last}}.json"
}]
},
"headers": {
"Content-Type": "application/json"
},
"transformers": ["response-template"]
}
}
答案 0 :(得分:1)
开箱即用WireMock无法解决您的要求。
您最好的选择是编写一个ResponseDefinitionTransformer
实现,该实现采用您所描述的主体JSON格式,加载引用的文件并将其组合到响应主体中。
请参见此处的“转换响应”:http://wiremock.org/docs/extending-wiremock/
答案 1 :(得分:0)
在使用WireMock.Net时,可以通过在此(示例)映射中将 UseTransformer 设置为 true 来实现:
{
"Request": {
"Path": {
"Matchers": [
{
"Name": "WildcardMatcher",
"Pattern": "/bodyasfile_transform"
}
]
},
"Methods": [
"get"
]
},
"Response": {
"StatusCode": 200,
"Headers": { "Content-Type": "application/xml" },
"BodyAsFile": "c:\\temp-wiremock\\__admin\\mappings\\_{{request.query.MyUniqueNumber}}_\\MyXmlResponse.xml",
"UseTransformer": true
}
}
更新
在最新版本中,可以从文件中导入内容:
{
"Guid": "fd8ca21b-db82-48bc-ae5a-fc2153c2b000",
"Request": {
"Path": {
"Matchers": [
{
"Name": "WildcardMatcher",
"Pattern": "/filefragment"
}
]
},
"Methods": [
"get"
]
},
"Response": {
"Headers": { "Content-Type": "application/json" },
"BodyAsJson": {
"file1": "{{File \"c:\\\\temp-wiremock\\\\__admin\\\\mappings\\\\test_1.txt\"}}",
"file2": "{{File \"c:\\\\temp-wiremock\\\\__admin\\\\mappings\\\\test_{{request.query.MyUniqueNumber}}.txt\"}}"
},
"UseTransformer": true
}
}