在maven上在Jetty上部署WireMock

时间:2013-06-17 14:53:09

标签: maven jetty maven-jetty-plugin wiremock

我正在尝试使用WireMock(v1.32)来模拟maven项目中的Web服务。为了运行测试,我使用jetty(v8.1.8)来部署战争。 我尝试了以下方法在jetty上运行WireMock(在我的pom文件中的jetty插件下):

<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>

但是,我无法找到有关如何通过servlet在WireMock上运行服务的更多信息。

在servlet上运行时,我无法找到有关如何为WireMock指定端口和主机的信息。我们非常感谢您对此设置的任何帮助。

我是使用WireMock的初学者,所以如果有任何细节缺失,请询问,我会添加它们。

1 个答案:

答案 0 :(得分:2)

首先,我强烈建议您考虑以编程方式启动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>

如果您已在非根URL下部署WAR,则还需要告知客户端此类信息。

WireMock.configureFor("my.jetty.host", 9090, "/wiremock");