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
型別的 bean 來定製 WireMock 配置(例如,新增自定義轉換器)。以下示例展示瞭如何做到這一點:
@Bean
WireMockConfigurationCustomizer optionsCustomizer() {
return new WireMockConfigurationCustomizer() {
@Override
public void customize(WireMockConfiguration options) {
// perform your customization here
}
};
}
透過元資料定製 WireMock
從 3.0.0 版本開始,您可以在契約中設定 metadata
。如果您設定一個鍵等於 wiremock
的條目,並且其值是有效的 WireMock 的 StubMapping
JSON / map 或一個實際的 StubMapping
物件,Spring Cloud Contract 將使用您定製的一部分內容來修補生成的存根。我們來看下面的例子:
在 metadata
部分,我們設定了一個鍵為 wiremock
的條目,其值是一個 JSON StubMapping
,它在生成的存根中設定了延遲。這樣的程式碼使我們能夠得到以下合併的 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 StubMapping
後處理,您可以在 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 的實現),並在其中註冊您選擇的自定義擴充套件。如果您不這樣做,即使您的 classpath 中有自定義的 WireMock 擴充套件,WireMock 也不會注意到它,不會應用它,並會打印出警告資訊,表明未找到給定的擴充套件。 |