【问题标题】:Can I use Pact broker for Functional Tests?我可以使用 Pact 代理进行功能测试吗?
【发布时间】:2020-05-24 00:13:48
【问题描述】:

我有一个服务,它接收请求,生成电子邮件,将电子邮件保存到消息队列(由其他微服务发送)并返回 httpStatus.Ok。 我想测试是否会针对不同的请求生成相关的电子邮件。

根据Contract Tests vs Functional Tests 我的测试是功能性的,而不是合同测试。 (如果我的服务会将电子邮件内容作为 api 响应返回,那么使用 Pact 进行合同测试肯定是合适的)。

我有一个想法,特别是使用 Pact 基础架构进行此类功能测试
1.将请求和预期生成的电子邮件保存到 Pact Broker
2. 在提供者验证测试中提交请求并验证生成的电子邮件与预期的电子邮件。

在这样的功能测试中使用 Pact 有意义吗?
有谁知道类似用法的例子吗?
任何替代技术(最好在 .Net Core 中)进行类似测试?

我也在考虑 https://github.com/approvals/ApprovalTests.Net,但 Pact 基础设施更吸引我。

相关说明:Pact 通常适用于 http 请求/响应,但 Pact V3(尚未由 PackNet 实现)Introduces messages for services that communicate via event streams and message queues。一个描述消息契约契约测试的例子是 https://dius.com.au/2017/09/22/contract-testing-serverless-and-asynchronous-applications/ 被引用 Pact for MessageQueue's : Sample Provider test in case of MessageQueues

【问题讨论】:

    标签: functional-testing pact pact-broker pact-net


    【解决方案1】:

    我有一个服务,它接收请求,生成电子邮件,将电子邮件保存到消息队列(由其他微服务发送)并返回 httpStatus.Ok。

    正如您所说,虽然 Pact 的目的不是成为传统意义上的功能测试工具,但不测试功能几乎是不可避免的。目标实际上是测试系统之间的合同(这会产生一个小的灰色区域,您需要在其中决定最适合您的测试策略的内容)。

    您不想对 Pact 执行的操作是运行验证测试,然后检查电子邮件是否实际发送、是否已写入队列以及下游微服务是否可以处理它 - 这将超出“合同测试”的界限。

    顺便说一句:你绝对可以做的是在发布到队列的这个组件和从它接收的下游组件之间创建一个单独的合约测试(参见 .NET 库的这个 WIP 分支:https://github.com/pact-foundation/pact-net/pull/175

    我想测试是否会针对不同的请求生成相关电子邮件。

    如果对于那些“不同的测试”,来自 API 的响应是可以预测的 - 那么是的,您绝对可以使用 Pact 做到这一点。

    因此,将上述内容改写为 “我有一项服务接收请求,返回 httpStatus.Ok 并发送电子邮件正文” 是可接受的合同测试 IMO。

    然后您可以使用各种场景对此进行扩展:

    1. 用户创建成功时...
    2. 当用户已经存在时...

    希望有帮助!

    附:可能值得加入 https://slack.pact.io 并与那里的社区进一步聊天。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      相关资源
      最近更新 更多