|
该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 spring-cloud-contract 5.0.0! |
WireMock 定制
在本节中,我们将展示如何自定义使用 WireMock 的工作方式。
注册您自己的 Wiremock 分机
WireMock 允许你注册自定义分机。默认情况下,Spring Cloud Contract会注册
转换器,可以让你从响应中引用请求。如果你愿意的话
提供您自己的扩展,您可以注册org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions接口。
由于我们使用Spring。工厂扩展方法,你可以创建类似的条目
以下内容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"
}
}
如果你只想把变换应用在映射上,那就要明确地
需要它,覆盖applyGlobal()方法,并将其设置为false. |
通过元数据定制 WireMock
3.0.0版本你可以设置元数据在你们的合同里。如果你设置一个条目,键为铁丝模仿以及
将是一个有效的WireMock's存根地图JSON / 地图还是实际的存根地图对象,Spring Cloud Contract 将修补生成的
存根,包含你自定义的一部分。让我们来看下面的例子
在元数据我们用钥匙设置了一个条目铁丝模仿其值为 JSON存根地图这会在生成的存根中设置延迟。这些代码让我们获得了以下合并后的 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
如果你想应用自定义的WireMock存根地图后期处理,你可以低于META-INF/spring.factories在org.springframework.cloud.contract.verifier.converter.StubProcessor键寄存器,你自己的存根处理器实现。为了方便,我们创建了一个名为org.springframework.cloud.contract.verifier.wiremock.WireMockStubPostProcessor该书献给WireMock。
你需要实现一些方法,告诉 Spring Cloud Contract 后期处理器是否适用于某个合同,以及后期处理应该是什么样的。
在消费者端,使用Stub Runner时,记得通过自定义程序HttpServerStubConfigurer实现(例如,扩展WireMockHttpServerStubConfigurer)你可以注册一个你选择的自定义分机。如果你不这样做,即使你在类路径上有自定义的 WireMock 扩展,WireMock 也不会注意到它,不会应用它,并会打印出一个警告语句,提示该扩展未被找到。 |