问题标签 [pact]

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.

0 投票
1 回答
480 浏览

java - 使用 Pact 和 JUnit 测试 SSL 安全 API

我正在尝试在我们的两个服务器系统之间实现 pact 测试,但不幸的是,我正在努力实现消费者测试:我包含了 pact-jvm-consumer-junit_2.11 工件并使用@Rule 创建了这样的提供:

不幸的是(至少对于测试而言)我们的客户端被硬编码为使用 SSL 连接。因此,我们的测试失败了,因为 pact 服务器不允许 SSL 连接。有没有办法告诉 pact 这样做或解决这个问题而无需设置外部反向代理服务器?

0 投票
2 回答
2115 浏览

c# - 验证 PactNet 中的类型

我正在测试微服务,并且正在使用PactNet创建和验证协议。我发现测试太脆弱了,因为验证者正在检查确切的值而不是验证类型。

例如,我正在针对 GitHub API 进行测试,并且测试有效。如果添加了新的 Repo,则该public_repos值会增加 1,并且测试失败。

有人用它来检查类型而不是具体值吗?

这是验证码:

这是 PACT 文件。

0 投票
1 回答
541 浏览

microservices - 消费者驱动的合同

有没有办法在微服务的单元测试中检查消费者合同?我知道我们可以在通过 JUnit 进行集成测试时在 java 中使用 Pact 库。但我想知道是否有办法对单元测试做同样的事情?

0 投票
1 回答
158 浏览

java - pact-jvm-consumer-specs2 - 缺失:[错误] 方法:GET

我对使用 sbt 运行的 spec2 消费者的 Pact JVM 有问题。- 有什么问题?- 我不生成任何协议文件。

给定:

  • 具有依赖项的 sbt 项目

    “au.com.dius”%%“pact-jvm-consumer-specs2”%“3.2.11”

    “org.specs2” %% “specs2-junit” % “3.3.1”

我有规格类:

当我使用 sbt test 运行时,我得到:

0 投票
1 回答
1391 浏览

windows - 在 Babun 上使用 pact 安装后 Cygwin 软件包无法正常工作(Windows 10)

https://github.com/babun/babun/issues/702相同

我在安装时第一次注意到这一点pact install digwhich dig返回二进制文件的位置,但它什么也不做:

后来我意识到安装后没有任何软件包可以工作。我试过phprubygem)。

关于如何排除 Cygwin 故障的想法?我假设这就是问题所在。它安装在 %HOMEPATH%/.babun/cygwin


更新:当我从 Window 的 cmd.exe 尝试 ruby​​ 或 php 时,我收到一个标题为“未找到入口点”的错误对话框:过程入口点 __locale_ctype_ptr 无法位于动态链接库中... .babun\cygwin\bin \cygruby220.dll 或 cygphp.dll,分别。

我查了一下,但没有找到任何有用的信息。

我还应该补充一点,我刚刚意识到我最初可能已经在 Windows 7 上安装了 Babun(在升级到 10 之前),但是我现在在 Windows 10 上完全重新安装了一个,所以我希望这不是问题。

0 投票
1 回答
411 浏览

go - 允许带有参数的多个提供者状态(Golang)

由于我们的团队(即我自己和其他两个开发人员)在过去一周左右的 PACT 上飙升,其中一个令人担忧的领域是无法将参数与提供者状态相关联。由于缺少此关键功能(计划在第 3 版发布),我们可能不会从我们各自的服务子团队中获得支持。

@MattFellows - 关于 Go 版本 3 何时可用的任何预测?我们有没有机会更早地获得这个功能?

允许带有参数的多个提供程序状态 在以前的版本中,提供程序状态被定义为一个描述性字符串。如果不将值编码到描述中,就无​​法推断状态所需的数据。

0 投票
3 回答
926 浏览

pact - 我可以创建一个 PACT 以在不同的主机名上运行吗?

我可以创建一个 PACT 以在不同的主机名上运行吗?我一直在使用协定规则并将主机名保持为 localhost。但现在我正在尝试为无法在 localhost 上运行的应用程序创建一个协议。

@Rule public PactProviderRule provider = new PactProviderRule("ServiceNowClientRestClientProvider", "localhost", 8080, this);

是否可以将 localhost 更改为其他内容,如果可以,是否有我需要的其他配置。我尝试将在 localhost 上工作的测试更改为代码正在使用的实际主机名,但它失败了,我收到各种错误消息“未解析的地址”或“无法分配请求的地址:绑定”或“使用中的地址”

0 投票
2 回答
2606 浏览

ruby - 如何针对需要身份验证令牌的 API 验证协议?

我正在为我的合同测试套件使用Pact gem(并且喜欢它!)。我正在测试的 API 服务需要所有请求的授权令牌。

我知道如何为我的用户生成 API 令牌,但我不知道在 Pact 工作流程中放置令牌的位置。我在 Pact 文档和 repo 中搜索了示例,但没有任何运气。

我尝试在消费者规范中发送 POST 以生成令牌,但 Pact 模拟服务器不知道如何处理请求和错误(如我所料)。

我发现了这个例子requestFilter,它看起来很有希望,特别是能够使用 a和方法为所有请求分配预定义的标头addHeader

如何在 Pact gem 中使用这样的请求过滤器?

如果这不是当前功能,我还有什么替代方案?

更新:

J_A_X 的答案非常适合与模拟服务器创建协议,但它不能满足 API 服务提供商对有效身份验证令牌的期望。更具体地说,我需要在运行 pact:verify 时将有效的身份验证令牌动态插入到协议中。所以,更近了一步,但仍然需要弄清楚后半部分。

马修的回答包含对后半部分(pact:verify)的两种可能解决方案的提示。我犹豫是否要引入另一个依赖项,所以我很想让 ProxyApp 类示例正常工作。我不明白我到底会传递给 ProxyApp.new() 什么。建议?

0 投票
3 回答
2235 浏览

java - Pact 提供者测试的范围应该是什么?

大约半年前,我的组织开始使用 Pact 来创建/验证用 Java 编写的 REST 服务/微服务之间的合同。我们很难决定提供商测试的适当范围或掌握程度,并且希望从其他协议用户的经验中获得一些输入。

基本上,讨论围绕在提供者测试中模拟/存根的位置展开。在服务中,您至少必须模拟对其他服务的外部调用,但您也可以选择模拟更接近 REST 资源类。

我们将其归结为两个选项:

1.第一个选项是提供者测试应该是一个严格的契约测试,并且只使用提供者服务的 REST 资源类,模拟/存根从那里使用的服务类/编排器等。该合同测试将通过组件测试进行扩充,这些组件测试将测试由供应商测试存根/模拟的部分。

2.第二种选择是使用提供者测试作为组件测试,为每个请求执行整个服务组件。只有对其他组件的传递外部调用才会被模拟/存根。

这些是专业人士对每个选项的想法

选项 1 的专业人士:

  • 测试将更易于实施,并且占用空间更小
    => 更高程度的隔离。
  • 无论如何,我们可能需要其他组件测试来涵盖通常未包含在消费者期望中的用例(错误流等)。这样我们就不会在一个包中混合不同类型的组件测试(Pact 和其他),从而使测试套件更易于理解。

选项 2 的专业人士:

  • 测试正在执行更多“真实”代码=>由于不良模拟/存根导致测试错误的风险降低。

我真的很想听听您的提供商测试在这方面的典型表现。有最佳实践吗?

澄清我们所说的“组件”是什么意思:一个组件是一个微服务或一个更大的服务应用程序中的一个模块。我们从 Martin Fowlers http://martinfowler.com/articles/microservice-testing/中获取了“组件”的定义。

提供者服务/组件通常在 Jersey 资源类中具有 REST 端点。此端点是 Pact 提供者测试的提供者端点。一个例子:

在上面的示例中,@Autowired(我们使用 spring)CustomerOrchestrator 可以在运行提供程序测试时被模拟,或者您可以注入真正的“Impl”类。如果您选择注入真正的“CustomerOrchestratorImpl.class”,它将具有额外的 @Autowired bean 依赖项,而这些依赖项又可能具有其他...一个 REST 客户端,它将对其他下游服务/组件执行 HTTP 调用。

如果我们在上面的示例中采用我的“选项 1”解决方案,我们将模拟 CustomerResource 中的 customerOrchestrator 字段,如果我们采用“选项 2”,我们将为 CustomerResource 中的每个依赖项注入 Impl 类(真正的类)依赖图并创建模拟数据库条目和模拟下游服务。

作为旁注,我应该提到我们很少在提供者测试中实际使用真实的数据库。在我们采用“选项 2”的情况下,我们模拟了 DAO 类层,而不是模拟实际的数据库数据,以减少测试中移动部件的数量。

我们创建了一个“测试框架”,它自动模拟任何未在 spring 上下文中显式声明的 Autowired 依赖项,因此存根/模拟对我们来说是一个轻量级的过程。这是一个提供者测试的摘录,该测试执行 CustomerResource 并启动存根的 CustomerOrchestrator bean:

0 投票
2 回答
574 浏览

pact - 如何通过协议测试验证响应中包含的图像

我想使用协议测试来验证提供者是否可以在响应中提供图像。现在实际的响应看起来像这个 包含图片的服务器响应主体

我的 Pact Json 文件看起来像这样

契约测试总是失败并说身体不匹配。我可以理解实际响应不是 base64 格式,也不是字符串。它应该是一些二进制文件。在这种情况下,我怎样才能编写匹配规则来验证它是一个二进制文件?