WireMock Customization
在本节中,我们将展示如何自定义使用 WireMock的方式。
Registering Your Own WireMock Extension
WireMock 允许您注册自定义扩展。默认情况下,Spring Cloud 合约会注册转换器,该转换器让您通过响应来引用请求。如果您想提供您自己的扩展,可以注册 org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions
接口的实现。由于我们使用 spring.factories
扩展方法,所以您可以在 META-INF/spring.factories
文件中创建类似于以下内容的条目:
Unresolved directive in wiremock-customization.adoc - include::{stubrunner_core_path}/src/test/resources/META-INF/spring.factories[]
以下示例展示了一个自定义扩展:
Unresolved directive in wiremock-customization.adoc - include::{verifier_root_path}/src/test/groovy/org/springframework/cloud/contract/verifier/dsl/wiremock/TestWireMockExtensions.groovy[]
如果您希望仅对明确需要它的映射应用转换,请覆盖 applyGlobally()
方法并将其设置为 false
。
Customization of WireMock Configuration
您可以注册 org.springframework.cloud.contract.wiremock.WireMockConfigurationCustomizer
类型的 Bean,以定制 WireMock 配置(例如,为了添加自定义转换器)。以下示例展示了如何实现:
Unresolved directive in wiremock-customization.adoc - include::{wiremock_tests}/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationCustomizerTests.java[]
// perform your customization here
Unresolved directive in wiremock-customization.adoc - include::{wiremock_tests}/src/test/java/org/springframework/cloud/contract/wiremock/AutoConfigureWireMockConfigurationCustomizerTests.java[]
Customization of WireMock via Metadata
通过版本 3.0.0,您可以在您的合约中设置 元数据
了。如果您设置具有等于 wiremock
的键的条目,并且此值会是有效的 WireMock 的 StubMapping
JSON/映射或一个实际的 StubMapping
对象,Spring Cloud 合约会修补已生成的存根,并包含您的定制内容。我们来看一下以下示例
Unresolved directive in wiremock-customization.adoc - include::{standalone_samples_path}/http-server/src/test/resources/contracts/yml/fraud/shouldReturnFraudStats.yml[]
在 metadata
部分,我们设置一个键为 wiremock
的条目,其值为一个 JSON StubMapping
,其中设置了一个延迟的生成的 stub 中。此类代码能让我们获取以下合并的 WireMock JSON stub。
{
"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"
}
当前实现允许仅处理 stub 部分(我们不更改生成的测试)。此外,不会更改响应的整个请求、主体和标头。
Customization of WireMock via Metadata and a Custom Processor
如果你想应用自定义的 WireMock StubMapping
后期处理,你可以在 META-INF/spring.factories
中的 org.springframework.cloud.contract.verifier.converter.StubProcessor
键下注册你自己的 stub 处理器实现。为了你的使用方便,我们创建了一个称为 org.springframework.cloud.contract.verifier.wiremock.WireMockStubPostProcessor
的接口,专门用于 WireMock。
你必须实现方法来告知 Spring Cloud Contract 后处理器是否适用于给定的契约以及后期处理应如何执行。
在使用者端,使用 Stub Runner 时,请记住传递自定义 HttpServerStubConfigurer
实现(例如,扩展 WireMockHttpServerStubConfigurer
的实现),您可以在其中注册您选择的自定义扩展。如果不这样做,即使您在类路径上具有自定义 WireMock 扩展,WireMock 也不会注意到它,不会应用它,并且会打印一条警告消息,指出未找到给定的扩展。