1

我正在尝试使用 WireMock (v1.32) 在 maven 项目中模拟 Web 服务。为了运行测试,我使用 jetty (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>

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

在 servlet 上运行时,我找不到有关如何为 WireMock 指定端口和主机的信息。任何有关设置此设置的帮助将不胜感激。

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

4

1 回答 1

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");
于 2013-06-19T20:57:04.293 回答