春云合约:如何防止生产者破坏消费者



我是Spring Cloud Contracts的新手,最近我能够生成Producer合约,并使用安装在本地maven repo上的存根在消费者端编写测试。

如果我违反了Producer方面的约定,然后安装了新的存根,就像预期的那样,如果我运行使用者测试,它将失败。

但想象一下这个场景:

  • 制作人被更改,违反了消费者的合同
  • Producer上的测试通过,因此构建成功并最终部署
  • 后来的消费者-由于生产者上的合同破裂,构建失败

在生产者构建期间,以某种方式执行该生产者的消费者的所有测试,这有意义吗?如果是,怎么办?

我们如何才能避免生产者伤害消费者?

非常感谢你的帮助。

问候

生产者执行消费者的测试是没有意义的,因为有时你甚至不知道谁在使用你的应用程序,例如,当你的API是公共的。

预计消费者使用的存根会破坏消费者的测试,因为这是消费者知道合同已更改的方式之一。因此,当消费者的构建过程中合同测试失败时,您可以获得快速反馈,而不是因为合同更改而在生产中出现错误。

但是,您可以在消费者方面拥有更多的控制权,通过存根的版本进行测试,而不是获得最新版本:

@AutoConfigureStubRunner(ids = {"<url>:<service>:<VERSION>:stubs:<port>"}, stubsMode = StubRunnerProperties.StubsMode.LOCAL)

缺点是消费者的合同测试可能无法反映生产商在生产中的版本。

此外,您还可以为不同类型的消费者签订不同的合同:

Spring Cloud合同:为具有不同或部分不同期望的多个消费者编写合同测试

最新更新