Есть ли способ включить несколько файлов JSON в ответ на основе параметров запроса? - PullRequest
2 голосов
/ 04 июня 2019

Я пытаюсь использовать автономный процесс Wiremock для проверки ответов с сервера.Дело в том, что для конкретной конечной точки (назовем это / items) я могу предоставить несколько параметров запроса (например, /items?item=1&item=10&item=12).Я хотел бы «собрать» ответ из отдельных файлов json на основе параметров запроса - поэтому создайте что-то вроде jsonBody с массивом внутри, содержащим содержимое отдельных файлов json из item_1.json, item_10 и item_12

может быть, пример расскажет больше - вот файл сопоставления:

{
"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"]
  }
}

Так что, в принципе, мне любопытно, есть ли способ ответить содержимым нескольких файлов на основе параметров запроса в Wiremock?

К сожалению, сейчас я только что получил простой текст:

{
    "items": [
        {
            "bodyFileName": "items/item_1.json"
        },
        {
            "bodyFileName": "items/item_10.json"
        },
        {
            "bodyFileName": "items/item_12.json"
        }
    ]
}

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Нет способа выполнить то, что вы просите, с помощью WireMock из коробки.

Лучше всего было бы написать реализацию ResponseDefinitionTransformer, которая использует описанный вами формат тела JSON, загружаетфайлы, на которые ссылаются, и объединяют их в тело ответа.

См. «Преобразование ответов» здесь: http://wiremock.org/docs/extending-wiremock/

0 голосов
/ 04 июня 2019

При использовании 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
    }
}
...