每个端点的 PACT 合同测试

PACT contract tests per endpoint

您好,您正在使用 PACT 进行有关合同测试的一些初步研究。在我使用契约代理来托管契约的范例中,我从高层次理解需要在消费者端进行契约测试,运行 是针对契约模拟服务器的一组测试。 .. 然后将其发布给契约经纪人。提供者还需要一个合约,在合约中它使用消费者在合约代理上创建的合约来 运行 它的测试。

我的问题是:在消费者端,是否需要为每个端点编写多个不同的测试?

如果您所说的端点是指不同域上的不同 API,那么是的。

契约的概念是在任何一对 consumer/provider 之间进行交互。例如,如果您有一个前端 SPA(消费者)使用 2 个不同的 APIs(提供者),例如身份验证 api(即 auth.yourdomain.com)和数据 API(如 data.yourdomain.com),您需要将前端与身份验证 API 之间的交互记录为前端与数据 API 之间的一个合同和另一个合同。

这些合约中的每一个都会有至少一次交互,但也可能有很多次交互,比如,当您在身份验证 API 的根目录下执行 GET 请求时,它 returns X,如果你在 /auth 中使用正文中的 username/password 执行 POST,它 returns Y 等

这有意义吗?

简短的回答是肯定的。

这取决于每个 API 端点的作用。但通常情况下,每个端点都可以处理不同的操作,并且根据请求,您需要确保您的代码可以处理它(如果它使用所有这些操作——这很重要)。

例如以下是 "CRUD" 类服务的典型情况:

  1. GET /<resource> 有效请求,return 200 和资源主体
  2. GET /<resource> 请求错误,return 一个 400 和一个错误正文
  3. GET /<resource> 没有身份验证令牌,return 401
  4. POST /<resource> 具有有效请求,return 201 和资源 ID / 主体
  5. 删除/<resource> ...等等

在每个操作和资源中,可能存在多态负载(请求或响应)。如果您的消费者代码必须处理这个问题,它也应该对这些进行测试。

您可能会发现 this page 在我们的文档中对这个主题很有用。