使用Spring Cloud Contract Groovy DSL,我如何参数化响应以包括请求中的值



我正在使用Spring Cloud Contract为REST服务创建存根,以便可以使用REST客户端进行测试。我有一个在Spring Boot应用程序中工作的存根运行程序,一切都如预期的那样工作。我遇到的问题是,我希望在响应中看到请求的元素,以便更好地模拟REST服务的最终行为。例如,在这个合同中,我希望在请求的"代码"字段中传递的内容在响应中出现反流:

package contracts
org.springframework.cloud.contract.spec.Contract.make {
request {
method('POST')
url $("/resource")
body ([
code : $(client(regex('[a-zA-Z0-9]{5,32}')))
])
}
response {
status 200
body([
code: ???
])
}
}

显然,输入的"代码"可以是与正则表达式匹配的任何内容,因此实际值在运行时之前是未知的。有什么东西可以代替"??"来返回请求中提交的代码吗?我尝试访问,例如:

request.body.serverValue['code']

但这个值似乎是在编译时生成的,也许是为了在生成的测试源下在ContractVerifierTest.java中自动生成测试。

这能做到吗?这是对Spring Cloud Contract的适当使用吗?

目前不支持。我们更喜欢有更简单合同的方法。如果您在响应中需要来自请求的值,只需硬编码合同的请求和响应部分。

但是,您可以提交一个问题,我们可以尝试在未来的版本中考虑一些问题。

更新:

对于1.1.0版本,这已经是可能的了。查看文档了解更多信息-http://cloud.spring.io/spring-cloud-static/spring-cloud-contract/1.1.0.RELEASE/#_referencing_request_from_response

最新更新