Развертывание WireMock на Jetty в maven

Я пытаюсь использовать WireMock (v1.32), чтобы издеваться над веб-сервисами в проекте maven. Для запуска тестов я использую причал (v8.1.8) для развертывания войн. Я пробовал следующие подходы для запуска WireMock на причале (под плагином причала в моем файле pom):

<execution>
                    <id>start-wiremock</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>deploy-war</goal>
                    </goals>
                    <configuration>
                        <war>${project.build.directory}/dependent-war/wiremock-war.war</war>
                        <scanIntervalSeconds>0</scanIntervalSeconds>
                        <daemon>true</daemon>
                        <scanIntervalSeconds>10</scanIntervalSeconds>
                        <webApp>
                            <contextPath>/wiremock</contextPath>
                            <tempDirectory>${project.build.directory}/tmp2</tempDirectory>
                        </webApp>
                        <connectors>
                            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                                <port>${wiremock.port}</port>
                            </connector>
                        </connectors>
                        <systemProperties>
                            <systemProperty>
                                <name>shared.system.config.file</name>
                                <value>file:///${project.basedir}/src/test/resources/shared.properties</value>
                            </systemProperty>
                            <systemProperty>
                                <name>file.location.base.path</name>
                                <value>${basedir}</value>
                            </systemProperty>
                        </systemProperties>
                    </configuration>
                </execution>

И:

 <contextHandlers>
                    <contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
                        <war>${project.build.directory}\dependent-war\wiremock-war.war</war>
                        <tempDirectory>${project.build.directory}/tmp2</tempDirectory>
                        <contextPath>/wiremock</contextPath>
                    </contextHandler> 
                </contextHandlers>

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

Я не могу найти информацию о том, как указать порт и хост для WireMock при работе с сервлетом. Любая помощь в получении этой настройки будет принята с благодарностью.

Я новичок в использовании WireMock, поэтому, если какие-либо детали отсутствуют, спросите, и я их добавлю.


person Jess    schedule 17.06.2013    source источник


Ответы (1)


Во-первых, я настоятельно рекомендую вам либо запустить WireMock программно, либо запустить автономный JAR, например.

java -jar wiremock-1.32-standalone.jar --port <your port number>

В начале вашего тестового кода вам нужно будет сообщить клиенту, где находится сервер:

WireMock.configureFor("<wiremock server host>", <your port number>);

Существует несколько вариантов программного запуска: 1) Если вы используете JUnit, вы можете просто добавить @Rule, как описано здесь: http://wiremock.org/getting-started.html#junit.-4-x 2) Для любой другой тестовой среды вы можете обновить сервер: http://wiremock.org/getting-started.html#non-junit-and-general-java-usage

Стоит отметить, что некоторые функции WireMock недоступны при развертывании в контейнере (в основном связанные с внедрением ошибок).

Если у вас нет другого выбора, кроме как работать внутри контейнера, то стоит отметить несколько вещей: Хост и порт сервера задаются в настройках контейнера, поэтому в настройках плагина Maven вам нужно что-то вроде этого:

<connectors>
    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
       <port>9090</port>
    </connector>
</connectors>

Если вы развернули WAR под некорневым URL-адресом, вам также необходимо сообщить об этом клиенту, например.

WireMock.configureFor("my.jetty.host", 9090, "/wiremock");
person Tom    schedule 19.06.2013
comment
Кстати, версия 1.33 уже вышла, и это упрощает тестирование, когда вы правильно развернули ее в контейнере. Вы можете просто нажать localhost:8080/wiremock/__admin в своем веб-браузере, и если все работает нормально, вы должен увидеть (изначально пустой) список сопоставлений-заглушек - person Tom; 20.06.2013