spring云合同dsl指定路径参数
spring cloud contract dsl specify path parameter
我正在尝试为 GET 请求创建一个合同,我想使用一个路径参数,它也可以在响应中重复使用。这是可能吗?我只能找到 POST、查询参数和正文的示例。
因此,如果我想定义一个请求实体的合同,即 /books/12345-6688,我想在响应中重用指定的 ID。
如何为这样的事情创建合同?
不,这是不可能的,因为 https://github.com/tomakehurst/wiremock/issues/383 . Theoretically you could create your own transformer + override the way stubs are generated in Spring Cloud Contract. That way the WireMock stubs would contain a reference to your new transformer (like presented in the WireMock docs - http://wiremock.org/docs/extending-wiremock/)。但这听起来像是为某事做了大量工作,但似乎并不是那么必要。为什么你需要这样做?在消费者方面,您想测试集成,对吗?因此,只需在合同中硬编码一些值而不是引用它们,然后检查您是否可以解析这些值。
更新:
如果您只需要参数化请求 URL 但不想在响应中引用它,您可以使用像这里这样的正则表达式 - https://cloud.spring.io/spring-cloud-contract/single/spring-cloud-contract.html#_regular_expressions
更新 2:
就像@laffuste 提到的,从 RC1 开始你可以引用一个具体的路径元素
可能自 Spring 云合同 1.2.0-RC1(在 this issue 中修复)。
response {
status 200
body(
path: fromRequest().path(),
pathIndex: fromRequest().path(1) // <-- here
)
}
参见docs。
我正在尝试为 GET 请求创建一个合同,我想使用一个路径参数,它也可以在响应中重复使用。这是可能吗?我只能找到 POST、查询参数和正文的示例。 因此,如果我想定义一个请求实体的合同,即 /books/12345-6688,我想在响应中重用指定的 ID。
如何为这样的事情创建合同?
不,这是不可能的,因为 https://github.com/tomakehurst/wiremock/issues/383 . Theoretically you could create your own transformer + override the way stubs are generated in Spring Cloud Contract. That way the WireMock stubs would contain a reference to your new transformer (like presented in the WireMock docs - http://wiremock.org/docs/extending-wiremock/)。但这听起来像是为某事做了大量工作,但似乎并不是那么必要。为什么你需要这样做?在消费者方面,您想测试集成,对吗?因此,只需在合同中硬编码一些值而不是引用它们,然后检查您是否可以解析这些值。
更新: 如果您只需要参数化请求 URL 但不想在响应中引用它,您可以使用像这里这样的正则表达式 - https://cloud.spring.io/spring-cloud-contract/single/spring-cloud-contract.html#_regular_expressions
更新 2: 就像@laffuste 提到的,从 RC1 开始你可以引用一个具体的路径元素
可能自 Spring 云合同 1.2.0-RC1(在 this issue 中修复)。
response {
status 200
body(
path: fromRequest().path(),
pathIndex: fromRequest().path(1) // <-- here
)
}
参见docs。