如何从磁盘读取映射和响应文件
How to read mapping and response files from disk
我将 WireMock
作为单个 WAR 部署到我的服务器。我按照提供的 sample-war project 使我的 WAR 工作。这非常有用,所以感谢这个例子。
我的应用程序唯一的一个问题是 WireMock 从 WAR 内部读取映射和配置文件。
这些文件的路径可通过 web.xml
文件中的 WireMockFileSourceRoot
上下文参数进行配置,但仅当路径指向位于 WAR.[=17= 中的目录时才有效]
我想将映射和响应文件保存在磁盘上的单独文件夹中。
我检查了源代码,正如我所见,WireMock 使用 ServletContextFileSource
class 从 servlet 上下文中读取映射文件。 class 扩展 AbstractFileSource
.
我找到了一个很好的候选 SingleRootFileSource
,它也扩展了相同的抽象 class,在我看来,这个 class 可以从磁盘的任何目录读取映射文件,但是我不知道如何设置 WireMock 以使用此 class 而不是默认值。
你能告诉我正确的方向吗?
首先,您需要将SingleRootFileSource
读取的文件转换为StubMappings
。例如:
SingleRootFileSource stubsFolder = new SingleRootFileSource("my/path/to/jsons/with/recorded/stubs")
stubsFolder.listFilesRecursively().each { TextFile stubFile ->
StubMapping mapping = StubMapping.buildFrom(stubFile.readContentsAsString());
...
然后您需要在 Wiremock 服务器中注册它们。有几种方法可以完成。 Wiremock 服务器和客户端都可以注册存根。不知道你如何 运行 测试,但如果每个测试用例需要不同的存根,你可能必须使用客户端注册存根(使用 com.github.tomakehurst.wiremock.client.WireMock.stubFor
)。如果您决定使用 stubFor
,您必须引入将 StubMapping
转换为 MappingBuilder
的简单适配器,因为 stubFor
仅将 MappingBuilder
作为参数。示例适配器:
public class MappingBuilderAdapter implements MappingBuilder {
StubMapping stubMapping;
@Override
public StubMapping build() {
return this.stubMapping;
}
...
在调用 stubFor
之前,客户端必须连接到服务器。签出 configureFor
从 wiremock 客户端连接的方法,如 [使用 Java 客户端配置 WireMock] 中所述:http://wiremock.org/docs/running-standalone/
我将 WireMock
作为单个 WAR 部署到我的服务器。我按照提供的 sample-war project 使我的 WAR 工作。这非常有用,所以感谢这个例子。
我的应用程序唯一的一个问题是 WireMock 从 WAR 内部读取映射和配置文件。
这些文件的路径可通过 web.xml
文件中的 WireMockFileSourceRoot
上下文参数进行配置,但仅当路径指向位于 WAR.[=17= 中的目录时才有效]
我想将映射和响应文件保存在磁盘上的单独文件夹中。
我检查了源代码,正如我所见,WireMock 使用 ServletContextFileSource
class 从 servlet 上下文中读取映射文件。 class 扩展 AbstractFileSource
.
我找到了一个很好的候选 SingleRootFileSource
,它也扩展了相同的抽象 class,在我看来,这个 class 可以从磁盘的任何目录读取映射文件,但是我不知道如何设置 WireMock 以使用此 class 而不是默认值。
你能告诉我正确的方向吗?
首先,您需要将SingleRootFileSource
读取的文件转换为StubMappings
。例如:
SingleRootFileSource stubsFolder = new SingleRootFileSource("my/path/to/jsons/with/recorded/stubs")
stubsFolder.listFilesRecursively().each { TextFile stubFile ->
StubMapping mapping = StubMapping.buildFrom(stubFile.readContentsAsString());
...
然后您需要在 Wiremock 服务器中注册它们。有几种方法可以完成。 Wiremock 服务器和客户端都可以注册存根。不知道你如何 运行 测试,但如果每个测试用例需要不同的存根,你可能必须使用客户端注册存根(使用 com.github.tomakehurst.wiremock.client.WireMock.stubFor
)。如果您决定使用 stubFor
,您必须引入将 StubMapping
转换为 MappingBuilder
的简单适配器,因为 stubFor
仅将 MappingBuilder
作为参数。示例适配器:
public class MappingBuilderAdapter implements MappingBuilder {
StubMapping stubMapping;
@Override
public StubMapping build() {
return this.stubMapping;
}
...
在调用 stubFor
之前,客户端必须连接到服务器。签出 configureFor
从 wiremock 客户端连接的方法,如 [使用 Java 客户端配置 WireMock] 中所述:http://wiremock.org/docs/running-standalone/