【问题标题】:Using Spring Cloud Contract Groovy DSL, how can I parameterize the response to include values from the request?使用 Spring Cloud Contract Groovy DSL,如何参数化响应以包含请求中的值?
【发布时间】:2017-06-01 18:00:03
【问题描述】:

我正在使用 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 开始你可以做到的。
  • 哦,太好了@MarcinGrzejszczak,感谢您的更新!

标签: wiremock spring-cloud-contract


【解决方案1】:

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

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

更新:

在 1.1.0 版本中,这已经成为可能。查看文档以获取更多信息 - http://cloud.spring.io/spring-cloud-static/spring-cloud-contract/1.1.0.RELEASE/#_referencing_request_from_response

【讨论】:

  • 我们如何在 DSL 合约中传递请求参数,使用 Spring Cloud 合约进行微服务架构。
  • 您的意思是在响应中引用请求的一部分?如果这是问题所在,请查看我指向文档的更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 2014-01-24
  • 1970-01-01
相关资源
最近更新 更多