我正在尝试使用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的初学者,所以如果有任何细节缺失,请询问,我会添加它们。
答案 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");