С помощью wiremock можно вернуть тело, зависящее от почтового запроса

Я пытаюсь проверить класс провайдера openid. Класс openid-клиента делает HTTP-запрос. Я издеваюсь над ответом на этот запрос с помощью wiremock. Я пытаюсь высмеять действительный ответ openid. Однако действительный ответ зависит от параметров запроса. Используя wiremock, могу ли я настроить mock-запрос, где тело ответа зависит от параметров запроса?

Ответы

Ответ 1

Это возможно, вам просто нужно использовать ResponseTansformer. В приведенном ниже примере код responseDefinition определяется приведенным ниже типом. Здесь я высмеиваю службу кодирования, просто возвращая тела обратно обратно вызывающему. Хотя в трансформаторе я могу вернуть все, что захочу, на основе содержимого запроса.

int port = 8080;
WireMockServer wireMockServer = new WireMockServer(new WireMockConfiguration().port(port).extensions(new ResponseTransformer() {
    @Override
    public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files) {
        return new ResponseDefinitionBuilder().like(responseDefinition)
                .withBody(request.getBodyAsString().getBytes())
                .build();
    }

    @Override
    public String name() {
        return "request body returning request transformer";
    }
}));
wireMockServer.start();
WireMock.configureFor("localhost", port);

stubFor(post(urlEqualTo("/encode"))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/octet-stream")
                .withStatus(200)));

stubFor(post(urlEqualTo("/decode"))
        .willReturn(aResponse()
                .withHeader("Content-Type", "application/octet-stream")
                .withStatus(200)));

Ответ 2

Wiremock поддерживает расширения, которые вы можете написать себе, которые действуют как промежуточное программное обеспечение, используемое для перехвата тел запроса и ответа, чтобы вы могли форматировать его, как вам нравится. Он очень гибкий и позволяет вам создавать новые тела ответов динамически или даже вообще не реагировать.

В качестве примера мы написали расширение для этого в Opentable и открыли его на Maven Central. Это позволяет обрабатывать атрибуты json в качестве переменных и интерполировать их в тело ответа. Проверьте это. Сообщите нам, как это происходит, или если у вас есть какие-либо вопросы. https://github.com/opentable/wiremock-body-transformer

Ответ 3

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

Вы не можете параметризовать ответ с аргументами, переданными через запрос. Лучшее, что вы можете сделать, это использовать матчи для того, чтобы ваш издевавшийся сервер отвечал соответствующим образом.

Я бы порекомендовал вам сделать некоторые тесты на единицу или интеграцию с простым jUnit, чтобы проверить запросы и ответы в таких случаях. Они должны быть быстрее, если вы хотите проверить, правильно ли отвечают запросы на получение. Я вижу WireMock в качестве альтернативы приемочному тесту, чтобы убедиться, что ваш интерфейс с другими службами REST не сломается.

Ответ 4

Я исследовал это честный бит, а ответ - нет (на сегодняшний день, во всяком случае).

Вам нужно настроить конкретный (статический) ответ для каждого запроса, для которого требуется уникальный ответ.

Ответ 5

Я никогда не использовал wiremock. Но согласно их онлайн-документации вы можете написать макет, который соответствует URL-адресам и параметрам тела запроса. Таким образом, вы должны иметь возможность возвращать разные макеты в зависимости от параметров либо самого URL-адреса, либо встроенного в тело запроса.