当前位置: 首页 > 知识库问答 >
问题:

PACT vs Spring云合同测试[关闭]

慕和惬
2023-03-14

想要改进这个问题吗?更新问题,以便通过编辑这篇文章用事实和引用来回答。

最初的关闭原因未得到解决

我正在尝试了解PACT和Spring Cloud合同之间更好的工具来实施消费者驱动程序合同测试。我没有找到任何明确的例子来找到优缺点。

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

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

共有2个答案

百里意智
2023-03-14

在合同测试中,我们希望确保API的提供者和使用者彼此兼容。因此,我们将我们的期望定义为使用DSL的合同,并针对API的使用者或提供者进行测试,如果成功,则将其发布(通过手动复制或发布到共享存储库)到合同的另一方(提供者或使用者)。

此类功能的两个主要提供商是:Pact和SCC(Spring Cloud Contract)

PACT: Pact是一个消费者驱动的契约,这意味着我们在消费者端定义和验证契约,然后将其推送到提供者端进行验证。此外,Pact不局限于特定的框架甚至语言(pact-JVM适用于Java应用程序)。此外,它与Spring (Boot)集成得很好,您可以在启动整个应用程序时(@SpringBootTest)或在切片测试期间(@WebMvcTest)定义pact测试。

SCC:一般来说,它鼓励提供者驱动的契约,这意味着您在提供者端定义契约,如果它通过验证,那么就将其发布到消费者端。然而,我们可以反过来做,甚至我们可以单独定义契约,并针对生产者和消费者手动测试它。

尉迟冯浩
2023-03-14

Spring Cloud契约允许您为REST APIs和消息传递定义和测试契约。它提供了一个清晰易用的静态类型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()
    }
}

生产者端测试由 SCC 自动生成,并在生成期间添加到项目中。如果没有履行合同的正确实施,则不会构建和部署项目。如果它们通过,则将生成使用者的存根,并与相应的项目版本一起发布。

在消费者端,对于HTTP,SCC提供了Stubrunner,它启动Wiremck(内存超文本传输协议服务器)实例,为匹配的请求提供存根响应。Stubrunner与外部工件存储库(如Nexus和艺术工厂)以及本地m2存储库一起使用。

SCC与SpringBoot无缝集成,也与SpringCloud现成集成,可以在集成测试期间代替服务发现。

它还与Pact进行了开箱即用的集成,并允许在仅使用SCC合同定义的同时,通过挂钩来利用其他Pact功能。

SCC还提供了一个基于Docker的选项,用于在JVM以外的技术中实现和测试契约。

声明:我是Spring Cloud的合同委托人。

 类似资料:
  • 我能够收到生产者端的绿色通行证,但在消费者端,我一直得到 合同是存在的。 我尝试了几个用户案例,如官方spring cloud文档中描述的。 https://cloud.spring.io/spring-cloud-contract/reference/html/gett-started.html#gett-started-cdc-consumer-run 以下是使用者代码示例:https://g

  • 使用Spring Cloud Dalston,我们构建了一个代理服务,当然使用Zuul。我现在正在尝试添加Spring Cloud合约测试,以从合约遵守的角度验证我们的代理服务按预期工作。奇怪的是,我可以发送请求并收到200状态代码,但预期的响应正文、内容类型标头等为空,因此我的测试失败了。 对于使用Zuul功能的测试服务,是否有Spring Cloud合同文档中未指定的其他配置?

  • 到目前为止,我已经发现,通过在contract中定义“TriggeredBy”,生成的测试将调用那里提供的方法,因此我们将需要提供该方法在TestBase中执行的操作的实际实现。另一个是“outputMessage”,在这里我们可以验证之前的方法调用是否正确地生成了发送到某个交换的消息体。 资料来源:文件和样本 我的问题是,有没有办法从契约中产生输入消息,而不是触发自己的自定义方法?文档中的Spr

  • 我已经为契约测试做了演示应用程序。下面是我提到的链接。我已经改变了一些东西,像图案匹配器和体型。https://www.javacodeGeeks.com/2017/03/Consumer-drived-testing-pact-spring-boot.html 我能够从消费者发布协议,并从提供方验证它。 我也被要求从消费者端验证协议。例如。使用者将json发送给提供者以创建新用户。 但现在con

  • 测试框架 Truffle comes standard with an automated testing framework to make testing your contracts a breeze. This framework lets you write simple and manageable tests in two different ways: In Javascript