gpt4 book ai didi

django - 为 django api 设置消费者驱动的契约(Contract)测试并 react 客户端的合适方法是什么?

转载 作者:行者123 更新时间:2023-12-04 15:40:53 24 4
gpt4 key购买 nike

我刚学了一个新术语 consumer driven contract testing .

我在想也许它可以帮助我解决为 django api 提供程序和 React 前端架构项目编写测试的问题。

前端和 Django API 后端位于不同的存储库中,并有自己的单元测试。

但是,偶尔会出现错误,因为前端假设了一些 Django 服务后端未返回的字段。

我最初考虑编写端到端测试,但它们运行缓慢且非常脆弱。

我发现这种消费者驱动的契约测试听起来很正确。但是当我四处搜索时,我找不到合适的东西。连Pact似乎只是为了将契约(Contract)转换为消费者测试。

针对此场景进行消费者驱动的契约测试的合适简单方法是什么?

最佳答案

Kim,听起来您正在寻找 API 集成测试,而不是真正的端到端测试。

正如您所说,使用 pact 的值(value)在于获得可以由供应商验证的契约(Contract)。契约的运行方式与您的单元测试完全一样。如果您遵循前端应用程序的约定步骤,您最终将编写调用提供程序(您的 django API)的单元测试,建立您期望从每次调用中获得的请求和响应。

默认情况下,Pact 会启动一个模拟服务器,它将指向您的 React 前端应用程序(您的消费者测试)中的 pact 测试发出的请求。这些测试一旦执行,就会生成 json 格式的 pact 文件。然后应由您的 API 执行协议(protocol)文件,以便 API 知道它不会破坏前端。

看起来您正在尝试使用 pact 进行集成测试。 Pact 不是正确的工具,因为您需要的只是一个调用您的 django API 来验证响应的测试。没有简单的方法来启动契约(Contract)测试并全速运行。虽然入门很容易,但如果没有正确的设置,您将无法获得所需的一切,而且它还涉及开发运营工作。

每当我需要测试与协议(protocol)外 API 的集成时,我所做的是:

  • 确保 API 调用在方法中被隔离,这样可以很容易地对您需要的每个单独的 API 方法调用进行单元测试;这很容易被遗漏,并且会导致复杂、不可靠的测试,因为您最终不得不在测试用例中放入大量逻辑,只是为了让它们返回您需要的响应;
  • 创建一个调用该方法的测试,然后该方法将调用您的 API 并为您提供所需的响应;

快速示例:假设您有一项允许用户创建个人资料的功能。逻辑都在一个名为 createNewUserProfile 的函数中

  • 调用 GET/user 传递用户 ID 以查看用户是否存在
  • 调用 GET/location 获取用户位置信息,以便您可以添加到用户个人资料
  • 调用 POST/user 将用户信息传递到您的后端以创建用户
  • 返回来自 GET 或 POST 的响应,具体取决于哪个被调用

此方法包含您的所有逻辑。所以你应该把它分解成

  • 执行 getUser 并调用 GET/user 的一个
  • 执行 getCurrentLocation 并调用 GET/location 的一个
  • 使用您拥有的数据调用 POST/user 的 createUser。
  • 重构 createNewUserProfile 以调用上面列出的方法。

然后您将为每个 getUser、getCurrentLocation、createUser 进行一次 API 集成测试,并且您不需要为更广泛的 createNewUserProfile 进行一次 API 集成测试,因为如果您有多个调用被业务包围,将更难找出失败的原因逻辑。

如果示例不够好,请告诉我,请随时给我们更多示例,以便我提供更详细的信息。

祝你好运!

关于django - 为 django api 设置消费者驱动的契约(Contract)测试并 react 客户端的合适方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57850707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com