该版本仍在开发中,尚未被视为稳定。对于最新的稳定版本,请使用 spring-cloud-contract 5.0.0!spring-doc.cadn.net.cn

WireMock 定制

在本节中,我们将展示如何自定义使用 WireMock 的工作方式。spring-doc.cadn.net.cn

注册您自己的 Wiremock 分机

WireMock 允许你注册自定义分机。默认情况下,Spring Cloud Contract会注册 转换器,可以让你从响应中引用请求。如果你愿意的话 提供您自己的扩展,您可以注册org.springframework.cloud.contract.verifier.dsl.wiremock.WireMockExtensions接口。 由于我们使用Spring。工厂扩展方法,你可以创建类似的条目 以下内容META-INF/spring.factories文件:spring-doc.cadn.net.cn

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

以下示例展示了一个自定义扩展:spring-doc.cadn.net.cn

测试线模拟扩展.groovy
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 将修补生成的 存根,包含你自定义的一部分。让我们来看下面的例子spring-doc.cadn.net.cn

元数据我们用钥匙设置了一个条目铁丝模仿其值为 JSON存根地图这会在生成的存根中设置延迟。这些代码让我们获得了以下合并后的 WireMock JSON 存根。spring-doc.cadn.net.cn

{
  "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"
}

当前的实现只允许作存根部分(我们不更改生成的测试)。还有,哪些内容不会被改变 是整个请求、正文和响应的头部。spring-doc.cadn.net.cn

通过元数据和定制处理器定制 WireMock

如果你想应用自定义的WireMock存根地图后期处理,你可以低于META-INF/spring.factoriesorg.springframework.cloud.contract.verifier.converter.StubProcessor键寄存器,你自己的存根处理器实现。为了方便,我们创建了一个名为org.springframework.cloud.contract.verifier.wiremock.WireMockStubPostProcessor该书献给WireMock。spring-doc.cadn.net.cn

你需要实现一些方法,告诉 Spring Cloud Contract 后期处理器是否适用于某个合同,以及后期处理应该是什么样的。spring-doc.cadn.net.cn

在消费者端,使用Stub Runner时,记得通过自定义程序HttpServerStubConfigurer实现(例如,扩展WireMockHttpServerStubConfigurer)你可以注册一个你选择的自定义分机。如果你不这样做,即使你在类路径上有自定义的 WireMock 扩展,WireMock 也不会注意到它,不会应用它,并会打印出一个警告语句,提示该扩展未被找到。