С помощью 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-адреса, либо встроенного в тело запроса.