问题标签 [pact-broker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
amazon-ecs - 设置 Pact 代理的基本 url
我在我的 ECS 中运行 pact-broker-docker。当前verificationResultUrl
指向一个 IP 地址,我的协议系统的其他 URL 也是如此。我假设这是我的码头私人地址。如何向 docker 容器提供基本 URL,以便verificationResultUrl
解析为正确的 URL。
pact-jvm - 无法发布到 Pack-Broker:重复键值违规
当版本和标签保持不变但协议的内容在(重新)发布试验之间发生变化时,我们现在面临一个问题。
最近我们的 CICD 开始使用一个全新的协议代理服务器,它取代了旧的。旧代理图像来自 dius/pact-broker 新代理图像来自 pactfoundation/pact-broker(最新)
要发布协议,我们使用“pact:publish”maven 插件命令
场景:(试验之间projectVersion和tag的值是一样的)
- 第一次发布协议时,一切正常(返回 201)
- 重新发布时,虽然协议内容保持不变,但返回 ok (200),因为协议中没有任何更改
- 当重新发布,但协议内容发生变化时,返回错误 500,表示一个或多个协议文件被代理拒绝。
在 pact broker 日志上,错误显示如下:
2019-09-18 08:38:50.512340 E [9:puma 001 delegate.rb:83] root -- PG::UniqueViolation: 错误:重复键值违反唯一约束“unq_latest_ppid_prov_conver”详细信息:键(provider_id,consumer_version_id)= (15, 39) 已经存在。: INSERT INTO "latest_pact_publication_ids_for_consumer_versions" ("consumer_version_id", "provider_id", "pact_publication_id", "consumer_id", "pact_version_id") VALUES (39, 15, 71, 16, 48) RETURNING NULL 2019 -09-18 08:38:50.513334 E [9:puma 001 logging.rb:37] root -- 错误参考 YouFegbNWY - Sequel::UniqueConstraintViolation PG::UniqueViolation: 错误:重复键值违反唯一约束“unq_latest_ppid_prov_conver”详细信息:键 (provider_id, consumer_version_id)=(15, 39) 已经存在。
我希望契约经纪人允许我用新的内容替换相同版本和标签的现有契约内容(据我所知——这在“旧”契约经纪人中工作得很好)
post - 无法将结果发布给契约经纪人
我正在尝试使用以下命令在 localhost:9292 上的协议代理主机上发布验证结果:
在这里,我无法从下面的语法中获取验证 url 的值。
目前我已经在以下网址进行了验证:
../animal-service > specs/service_consumers> rake:pact-verify-at[]
。
我无法弄清楚如何从上述请求中检索验证 URL。我错过了什么,请帮忙。
java - 无法将 Java 中提供者的标签名称发送到 Pact Broker
正如您在下面看到的,我已将“pact.provider.tag”、“pact.provider.version”、“pact.verifier.publishResults”的值传递给 JVM 系统属性值。结果正在发布到 Pact Broker,但标记名称提供者未发布。请告诉我如何为提供者发布标签
@MockBean 私有 FactoringService 服务;
json - 基于数据类型而不是数据值的 Pact Consumer / Provider
我们目前在我们的 Spring Boot 应用程序中使用 Pact-Broker,我们的集成测试结果非常好。我们使用 Pact-Broker 的测试基于对 REST API 的调用,并将响应与我们提供程序中的值进行比较,始终使用 JSON 格式。我们的问题是要比较的值位于数据经常变化的数据库中,这使我们非常频繁地更新测试。
您知道是否可以仅通过数据类型进行验证?
我们想要尝试的是验证 JSON 格式是否正确以及数据类型是否匹配,例如,如果我们的 REST API 提供以下输出:
例如,我们想从之前的输出中验证以下内容:
- JSON格式良好。
- 所有的键/值对都存在于模型中。
- 该值与特定数据类型匹配,例如,键操作存在于所有条目中并包含字符串数据类型。
您知道这是否可以通过 Pact-Broker 完成?我在文档中搜索,但没有找到任何有关如何执行此操作的示例。
提前非常感谢。
此致。
pact - Pact CDC 测试最佳实践
我读过类似这样的文章,这些文章建议在提供者端验证存在于消费者功能分支中的合同,实际上允许合同在合并到主控之前进行“预验证”。但是,我已经阅读了 Pact 团队的其他文档,说明相反。在The Steps to Reaching Pact Nirvana中,它指出“为了在您的提供商的 CI 中保持绿色构建,而不是验证最新的整体协议,它应该验证 CI 中标记为“master”的最新版本的协议。” 在这里,我假设“最新的整体协议”是指可能存在于发布到 Pact Broker 的消费者功能分支中的协议。
我很困惑。为了不“让提供者团队不高兴”,如The Steps to Reaching Pact Nirvana中所述,如果提供者永远不会验证该协议并且只验证“主”和“生产”协议?另一种问这个问题的方法是什么时候会/应该从功能分支发布/验证协议,而不是消费者和提供者的主分支反对“主”和“生产”协议?
pact - IMockProviderService.VerifyInteractions 在 Pact 中的作用?
IMockProviderService.VerifyInteractions 在 Pact 中的作用是什么?使用它的最佳做法是什么?
pact - 提供程序测试与协议代理的集成,用于 Spring Boot junit5 + 应用程序属性中的配置
pact-jvm-provider-spring 声明对于 junit5 提供程序测试,不需要使用 spring 库。
但是,@PactBroker 注释取决于系统属性。有没有办法通过 Spring Property Resolver 让这个应用程序属性工作。我尝试创建类似于 SpringEnvironmentResolver.kt 的东西并在上下文设置中使用它。但这没有用。
我收到以下错误
指定的协议代理主机无效('${pactbroker.host:}')。请提供有效的主机或指定系统属性“pactbroker.host”。
更新 经过更多搜索后发现 setTarget 不起作用,需要将其移至 @BeforeEach 方法。
下面的代码片段帮助它与 @PactFolder 注释一起工作。但是具有属性的@PactBroker 仍然无法正常工作
spring-boot - 使用代理进行 Springboot 协议测试
我有一个在 AWS 云上运行的协议代理。我可以在 demo.service.aws.cloud/demo-service/latest 之类的示例 url 上看到一些描述说“app-a-service 和 app-b-service 之间的协议”显示了交互。这是对经纪人:
现在我构建了我的 Springboot 休息控制器,它返回文档中定义的那些响应。我现在如何运行测试以确保我的实现满足协议代理的这些要求?
以下是我的 TestPacts,以确保我的实现符合经纪人的合同(不确定这是否正确):
当我运行时,我得到错误:
spring-boot - 如何使用 junit 5 spring boot 编写 pact-jvm 消费者驱动程序协议测试?
我是编写 PACT 测试用例的新手。我有一个非常简单的场景,一个微服务在开发服务器上运行,它根据路径变量(它的一个 GET 调用)返回 true 或 false。如何编写生成 PACT 的测试用例?如何为协议设置代理服务器以进行发布?目前我只关心消费者端。
首先,我编写了以下代码?
OrderMsConsumerTest
当我在 intellij 中编写 click 并运行测试时,我得到以下异常结果?
我在这里有点困惑@PactTestFor(providerName = "orderms-provider", port = "8888")我现在没有设置代理,所以它会在端口 8888 自动运行一个提供者名称 orderms-provider 的模拟服务器?我是否需要在端口 8888 上运行应用程序并进行实际调用并通过测试?如何使测试用例作为我的 Maven 构建的一部分运行?