当提供者和消费者同时有消息和休息交互时,如何实现提供者端合约测试?

问题描述 投票:0回答:1

我使用消费者驱动的契约测试

我有一个提供者 p1 和一个消费者 c1。它们之间的交互包括消息传递以及 REST API 调用。两种交互都具有从消费者生成的单独的契约文件和单独的提供者合同测试文件。当我运行 Kafka 交互测试文件时,协议会拾取两个协议文件,因为提供程序名称相同,其中 Kafka 测试用例正在通过,而其余交互则失败,因为在上下文中 TestTarget 设置为 MessageTestTarget,而其余交互需要 HttpTestTarget。

我尝试将提供程序名称更改为 p1-kafka 和 p1-rest,但由于我们验证了提供程序名称,因此它会在 CI 管道中失败。我能想到的解决方案之一是为 Rest 实现双向合约测试,为 Kafka 实现消费者驱动的合约测试,这是不可行的。

spring-boot testing pact pact-jvm pactflow
1个回答
0
投票

您不能将同一个消费者的两个单独的合约发布到同一个提供者,一个使用 HTTP,另一个使用 Kafka(消息)——它们必须全部位于同一个合约中,或者针对不同的提供者(如您所述)。

在最新版本的 Pact 规范中,合约中可能有多种类型的交互(以前唯一的解决方法是以不同的方式命名 REST 和消息传递提供程序来解决该问题)。

最新版本的 Pact JVM 也应该支持这一点。我会找到正确的方法并更新这个答案。

© www.soinside.com 2019 - 2024. All rights reserved.