WireMock 定制
在本节中,我们将展示如何自定义使用 WireMock 的方式。
注册您自己的 WireMock 扩展
WireMock 允许您注册自定义扩展。默认情况下,Spring Cloud Contract 注册
转换器,它允许您引用响应中的请求。如果你想
提供您自己的扩展,您可以注册org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions
接口。
由于我们使用spring.factories
扩展方法,您可以创建一个类似于
以下内容中的META-INF/spring.factories
文件:
org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions=\
org.springframework.cloud.contract.stubrunner.provider.wiremock.TestWireMockExtensions
org.springframework.cloud.contract.spec.ContractConverter=\
org.springframework.cloud.contract.stubrunner.TestCustomYamlContractConverter
以下示例显示了自定义扩展:
import com.github.tomakehurst.wiremock.extension.Extension
/**
* Extension that registers the default transformer and the custom one
*/
class TestWireMockExtensions implements WireMockExtensions {
@Override
List<Extension> extensions() {
return [
new DefaultResponseTransformer(),
new CustomExtension()
]
}
}
class CustomExtension implements Extension {
@Override
String getName() {
return "foo-transformer"
}
}
如果希望转换仅应用于显式映射
需要它,则覆盖applyGlobally() 方法并将其设置为false . |
WireMock 配置的自定义
您可以注册类型为org.springframework.cloud.contract.wiremock.WireMockConfigurationCustomizer
自定义 WireMock 配置(例如,添加自定义转换器)。
以下示例显示了如何执行此作:
@Bean
WireMockConfigurationCustomizer optionsCustomizer() {
return new WireMockConfigurationCustomizer() {
@Override
public void customize(WireMockConfiguration options) {
// perform your customization here
}
};
}
通过元数据自定义 WireMock
在 3.0.0 版中,您可以将metadata
在您的合同中。如果将键等于wiremock
和值
将是一个有效的 WireMockStubMapping
JSON / 地图或实际的StubMapping
对象,Spring Cloud Contract 将修补生成的
存根。让我们看下面的例子
在metadata
部分我们设置了一个带有键的条目wiremock
其值为 JSONStubMapping
这会在生成的存根中设置延迟。这样的代码允许我们获得以下合并的 WireMock JSON 存根。
{
"id" : "ebae49e2-a2a3-490c-a57f-ba28e26b81ea",
"request" : {
"url" : "/yamlfrauds",
"method" : "GET"
},
"response" : {
"status" : 200,
"body" : "{\"count\":200}",
"headers" : {
"Content-Type" : "application/json"
},
"fixedDelayMilliseconds" : 2000,
"transformers" : [ "response-template" ]
},
"uuid" : "ebae49e2-a2a3-490c-a57f-ba28e26b81ea"
}
当前的实现只允许作存根端(我们不更改生成的测试)。另外,什么不会改变 是响应的整个请求、正文和标头。
通过元数据和自定义处理器自定义 WireMock
如果要应用自定义 WireMockStubMapping
后处理,您可以在META-INF/spring.factories
在org.springframework.cloud.contract.verifier.converter.StubProcessor
key 注册你自己的存根处理器实现。为了您的方便,我们创建了一个名为org.springframework.cloud.contract.verifier.wiremock.WireMockStubPostProcessor
专用于 WireMock。
您必须实现一些方法来通知 Spring Cloud Contract 后处理器是否适用于给定的合约,以及后处理应该是什么样子。
在消费者端,在使用 Stub Runner 时,记得传递自定义HttpServerStubConfigurer 实现(例如,扩展的WireMockHttpServerStubConfigurer ) 中,您将在其中注册所选的自定义扩展。如果你不这样做,即使你在类路径上有一个自定义的 WireMock 扩展,WireMock 也不会注意到它,不会应用它,并且会打印出一个警告语句,表明找不到给定的扩展。 |