Как включить шаблоны ответов в сервлете Wiremock? - PullRequest
0 голосов
/ 16 мая 2018

Я запускаю Wiremock на сервлете, реализующем этот проект с https://github.com/tomakehurst/wiremock/tree/master/sample-war

Я могу развернуть это в Tomcat и он работает.

Теперь я хочу включить Шаблон ответа на этом сервере , чтобы я мог использовать шаблоны руля для настройки тела ответа. Я видел несколько решений, связанных с правилами Junit, , непосредственно устанавливающих это из кода , а также с автономного сервера, но не могу найти решение для включения шаблонов ответа из сервлета.

Как мне включить это из сервлета wiremock?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

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

public class CustomListener implements ServletContextListener {

private static final String APP_CONTEXT_KEY = "WireMockApp";

@Override
public void contextInitialized(ServletContextEvent sce) {
    ServletContext context = sce.getServletContext();

    boolean verboseLoggingEnabled = Boolean.parseBoolean(
            firstNonNull(context.getInitParameter("verboseLoggingEnabled"), "true"));
    WarConfiguration warConfiguration = new WarConfiguration(context);
    warConfiguration.extensionsOfType(MockTokenTemplate.class);
    final WireMockConfiguration wireMockConfiguration =WireMockConfiguration.wireMockConfig();
    wireMockConfiguration.extensions("com.test.MockTokenTemplate","com.test.MockTokenInqTemplate");
    //wireMockConfiguration.jettySettings();
    wireMockConfiguration.containerThreads(Integer.valueOf(200));
    wireMockConfiguration.disableRequestJournal()
            .containerThreads(Integer.valueOf(200))
            .jettyAcceptors(Integer.valueOf(-1))
            .jettyAcceptQueueSize(Integer.valueOf(1000))
            .jettyHeaderBufferSize(Integer.valueOf(8192));
    String fileSourceRoot = context.getInitParameter("WireMockFileSourceRoot");
 final FileSource fileSource = new ServletContextFileSource(context, fileSourceRoot);
    wireMockConfiguration.fileSource(fileSource);
    //wireMockConfiguration.usingFilesUnderDirectory("/WEB-INF/wiremock/");

    //wireMockConfiguration =(WireMockConfiguration) warConfiguration;
    WireMockApp wireMockApp = new WireMockApp(wireMockConfiguration, new NotImplementedContainer());
    context.setAttribute(APP_CONTEXT_KEY, wireMockApp);
    context.setAttribute(StubRequestHandler.class.getName(), wireMockApp.buildStubRequestHandler());
    context.setAttribute(AdminRequestHandler.class.getName(), wireMockApp.buildAdminRequestHandler());
    context.setAttribute(Notifier.KEY, new Slf4jNotifier(verboseLoggingEnabled));
}

/**
 * @param context Servlet context for parameter reading
 * @return Maximum number of entries or absent
 */
private Optional<Integer> readMaxRequestJournalEntries(ServletContext context) {
    String str = context.getInitParameter("maxRequestJournalEntries");
    if(str == null) {
        return Optional.absent();
    }
    return Optional.of(Integer.parseInt(str));
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
}

}

Дайте мне знать, если вам нужна помощьпри создании пользовательских шаблонов ответов.

0 голосов
/ 18 декабря 2018

Если вы хотите использовать wiremock с docker, у меня есть пример docker-compose.yaml здесь с подробным ведением журнала и шаблонами.

Раскрутите Wiremock в контейнере Docker с помощью docker-compose up.

docker-compose.yaml пример:

version: "3"
services:
 wiremock:
  image: rodolpheche/wiremock:latest
  ports:
    - "8181:8080"
  volumes:
    - ./__files/:/./home/wiremock/__files/
    - ./mappings/:/./home/wiremock/mappings/
  command:
    - -verbose
    - -global-response-templating

docker-compose up (в каталоге, в котором вы сохранили yaml и принимаете запросы на доступ к файловой системе), тогда вы должны быть готовы к работе.

URL-адрес Wiremock будет http://localhost:8181

После этого выполните запись с реальными данными (http://localhost:8181/__admin/recorder)

Разделите тело на отдельный файл и поместите его в папку __files.. Укажите файл с "" bodyFileName "в файле запроса (сопоставления)

У меня есть несколько предложений здесь. mobileera_wiremock_kb

...