В WireMock, как и в других инструментах мокирования сервера, есть возможность выбора файла с телом ответа на основе параметров запроса в URL. Это делается с помощью использования WireMock Request Matchers и Response Definitions.
Request Matchers - это модуль WireMock, который позволяет проверять и сопоставлять параметры запроса с определенными правилами. Он используется для сопоставления и выбора мок-ответа на основе состояния запроса.
Для решения вашей задачи необходимо определить кастомный Request Matcher, который будет проверять параметры запроса в URL и сопоставлять их с нужными файлами с телами ответа. Затем, при совпадении параметров, можно вернуть соответствующий файл с телом ответа.
Вот пример использования WireMock с выбором файла с боди в зависимости от параметра запроса в URL:
1. Создайте mock-сервер в WireMock:
WireMockServer wireMockServer = new WireMockServer(options().port(8080)); wireMockServer.start(); WireMock.configureFor("localhost", wireMockServer.port()); // Загрузите файлы с телами ответа в директорию mappings FileMappingsSource mappingsSource = new SingleRootFileMappingsSource( Paths.get("путь_к_директории_с_файлами_ответов").toAbsolutePath().toString() ); wireMockServer.loadMappingsUsing(mappingsSource);
2. Определите класс, реализующий кастомный Request Matcher:
class CustomRequestMatcher extends RequestMatcherExtension { @Override public String getName() { return "custom-request-matcher"; } @Override public MatchResult match(Request request, Parameters parameters) { List<StubMapping> stubMappings = parameters.remainderAsMappings(); // Получите значение параметра запроса в URL String parameterValue = request.queryParameter("имя_параметра_запроса"); // Проитерируйтесь по всем мок-ответам и сравните значение параметра запроса с нужным значением for (StubMapping mapping : stubMappings) { String expectedValue = mapping.getMetadata().getString("имя_пользовательского_параметра"); if (parameterValue.equals(expectedValue)) { return MatchResult.of(true); } } return MatchResult.of(false); } }
3. Зарегистрируйте кастомный Request Matcher и используйте его для выбора файлов с телами ответов:
WireMock.registerExtension(new CustomRequestMatcher()); WireMock.stubFor( get(urlEqualTo("/some-path")) .withExtension("custom-request-matcher") .willReturn(aResponse().withBodyFile("файл_с_боди_ответа.json")) );
В данном примере мы создаем mock-ответ для GET-запроса на /some-path
, который проверяет наличие параметра запроса в URL и возвращает файл с телом ответа файл_с_боди_ответа.json
. Значение параметра сопоставляется с заданным значением в пользовательском параметре.
Таким образом, WireMock позволяет выбирать файл с телом ответа в зависимости от параметра запроса в URL. Вы можете настроить разные mock-ответы для различных вариантов параметров запроса и легко изменять их в процессе разработки и тестирования.