在测试环境之外模拟第 3 方集成

问题描述 投票:0回答:1

在我开发的许多应用程序中,我们都存在严重依赖第一方和第三方 API 的问题。因此,在我们的一些应用程序中,如果没有这些 API,尝试登录是没有用的。要么关键数据不存在,要么整个应用程序就像一个服务器端渲染 SPA,它自己不包含任何数据,而是在请求时从 API 中提取该数据(我们会尽可能缓存它)。

由于我们没有沙箱环境,因此在尝试本地开发应用程序时,这会带来一个巨大的问题。我们当前的解决方案是在业务逻辑和实际 HTTP 调用之间创建一个服务层。然后,我们在本地环境中将 HTTP 实现替换为仅返回虚假数据的类。除了几个问题之外,这在大多数情况下都工作得很好:

  1. 这一次只能为我们提供应用程序的一种状态。与数据库中的数据不同,我们无法轻松运行不同的播种器来复制不同的场景。

  2. 如果我们在生产中遇到错误,我们无法在不实际深入代码并添加一些条件来返回特定响应的情况下复制 api 响应。使用存储在数据库中的数据,可以轻松登录 TablePlus 并手动设置某些条件,甚至从生产中下拉选择表。

  3. 例如,在我们的模拟中,如果我们尝试让它根据请求的资源 ID 动态响应不同的响应,我们的函数可能会变得相当大且令人讨厌。

在我看来,这使得为每个场景创建每个测试的开销相当高。如果我们可以使用类似于数据库工厂的东西来生成一堆不同的请求-响应对,我们就可以测试更多的情况,并且当我们尝试复制我们遇到的错误时,如果我们可以以某种方式动态地设置某些场景生产。

由于我们的应用程序是使用 Laravel 和 PHP 构建的,与数据库不同,模拟不会从一个请求持续到另一个请求。我们不能像在数据库中那样简单地进行修补并开始将 API 与数据集成。

我试图想出一种方法来使用缓存并设置请求-响应对。这也可以移动到数据库,但不希望有仅在本地使用的额外表。

有什么想法吗?

laravel mocking integration seeding
1个回答
0
投票

我试图想出一种方法来使用缓存并设置 请求-响应对

看起来您正在创建自己的 API 模拟/存根工具。如果我错了,请纠正我。您是否尝试过WiremockStoplight PrismSpecmatic(我是specmatic 的联合创始人兼首席技术官)等工具?所有这些工具都允许您设置请求响应映射、模拟故障、导入第一方和第三方提供商的 OpenAPI 规范等。Specmatic 的一个独特优势是它使您的期望数据始终与 API 规范保持同步,从而避免“陈旧存根”问题。这是一个视频演示

© www.soinside.com 2019 - 2024. All rights reserved.