PACT与Spring Cloud合约测试

use*_*058 5 spring-cloud-contract pact

我试图了解PACT和Spring Cloud Contract之间更好的工具,以实施消费者驱动程序合同测试。我没有找到任何明显的例子来寻找利弊。

我想实现CDCT,并且在我的项目中不使用Spring。根据我的理解,我认为PACT很好。

欢迎任何信息或建议。谢谢。

Olg*_*zek 10

Spring Cloud Contract允许您为REST API和消息传递定义和测试合同。它提供了清晰易用的静态类型Groovy DSL,还允许通过yaml定义合同。无论是使用DSL还是使用yaml,对于熟悉标准HTTP /消息传递术语的人来说,定义合同都是非常直观的,例如:

request {
    method PUT()
    url '/fraudcheck'
    body([
           "client.id": $(regex('[0-9]{10}')),
           loanAmount: 99999
    ])
    headers {
        contentType('application/json')
    }
}
response {
    status OK()
    body([
           fraudCheckStatus: "FRAUD",
           "rejection.reason": "Amount too high"
    ])
    headers {
        contentType applicationJson()
    }
}
Run Code Online (Sandbox Code Playgroud)

生产方测试由SCC自动生成,并在构建过程中添加到项目中。如果没有正确执行合同的实现,则不会构建和部署项目。如果它们通过,则将生成消费者存根并将其与相应的工件版本一起发布。

在消费者方面,对于HTTP,SCC提供了Stubrunner,该Stubrunner启动Wiremock(内存中的HTTP服务器)实例,该实例提供对匹配请求的存根响应。Stubrunner可与外部工件存储库(例如Nexus和Artifactory)一起使用,也可与本地m2存储库一起使用。

SCC与SpringBoot无缝集成,并且还与Spring Cloud集成,可以在集成测试期间代替服务发现。

它还与Pact集成在一起,并允许仅通过使用SCC合同定义通过挂钩利用其他Pact功能。

SCC还提供了基于Docker的选项,用于在JVM以外的技术中实施和测试合同。

免责声明:我是Spring Cloud Contract提交者。

  • 这个答案并没有真正提供两者之间的区别。它只是谈论 SCC,并没有真正将其与 Pact 区分开来。例如,第一行“REST API 和消息传递的测试合约”:您也可以在 Pact 中执行此操作。 (3认同)