有没有一种方法可以基于查询参数在响应中包含多个json文件?

时间:2019-06-03 22:02:40

标签: json response wiremock

我正在尝试使用Wiremock独立进程来模拟来自服务器的答案。情况是,对于特定的端点(我们称其为/ items),我可以提供多个查询参数(例如/items?item=1&item=10&item=12)。 我想根据查询参数“构建”来自不同json文件的响应-因此构建带有数组的jsonBody之类的东西,其中包含来自item_1.jsonitem_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"]
  }
}

2 个答案:

答案 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
    }
}