为什么金融机构要采用 API 契约测试?
金融服务业广泛使用内部和外部 API。例如,一家金融科技初创公司可能使用开放银行 API 来发起资金转账或监控交易。或者,一家银行可能拥有使用 API 进行通信的内部微服务、Web 应用程序和移动应用程序。在这两种情况下,失败都是不可接受的。
让我们更仔细地了解一下为什么应该使用契约测试而不是集成测试,Pactflow 的双向支持如何使契约测试可扩展,以及金融服务行业的成功案例。
API 契约测试消除了集成测试和端到端测试的许多问题,使其更容易确保为内部和外部 API 消费者提供稳健的体验。
为什么选择 API 契约测试?
许多金融机构使用集成测试来验证微服务、Web 应用程序和移动应用程序是否可以通信。虽然有多种集成测试,但最常见的是端到端 (E2E) 测试,它涉及将所有内容部署到生产环境中,并对其运行一系列测试场景。
不幸的是,集成测试出了名的缓慢且难以维护。例如,测试工程师必须在运行任何测试之前确保每个系统都处于正确的状态。更糟糕的是,在分布式和远程系统中调试失败的测试几乎是不可能的。最后,这些问题往往会随着规模的扩大而加剧。
契约测试通过捕获两个服务之间的交互并将其存储在契约中来解决这些问题。虽然与模式测试和其他方法类似,但契约测试不需要双方达成共识。相反,您可以单独测试每个系统,自动化确保契约是最新的。
Pact 如何提供帮助
Pact 是一种代码优先的消费者驱动契约测试工具,它需要访问集成点两侧的代码。消费者编写一个单元测试,可以操纵提供者服务器上的状态。这样,消费者可以确保他们的应用程序在达到 E2E 测试的最后阶段之前就能与提供者的基础设施良好地协同工作。
- 消费者针对提供者模拟进行单元测试其行为
- 记录系统之间所需交互的契约。
- 契约在团队之间共享以实现协作。
- 契约中的请求针对提供者 API 重放,并根据消费者期望进行验证。
- 提供者模拟任何其他系统以进行隔离测试。
与提供者驱动的契约测试工具不同,Pact 契约是在自动化消费者测试执行期间生成的。因此,测试只涵盖消费者实际使用的 API 部分,并且测试会随着时间的推移自动演变。无需保持静态契约测试规范的最新性才能有效。
添加双向支持
Pactflow 是一种扩展 Pact 功能的契约测试工具,它支持双向契约,提供更大的灵活性。该工具允许消费者和提供者发布自己的集成版本。然后,他们可以使用跨契约验证来确保彼此兼容。
Pactflow 中的跨契约验证工作流程。来源:Pactflow
通过解耦提供者和消费者契约,双向支持使消费者能够进行更改并立即确定是否可以部署。同时,提供者不必担心管理提供者状态或维护大量示例。分布式团队、多个服务和各种集成点都不是问题!
Pactflow 提供了其他几项功能,旨在支持团队和企业启动和扩展其契约测试计划,例如团队和基于角色的访问、安全身份验证和审计跟踪。它还提供托管存根以简化本地开发、拉取请求状态检查、Webhook、测试洞察、加密秘密以及对 Terraform 的支持,以避免配置漂移并确保 CI/CD 管道顺利运行。
使用 OpenAPI 规范
Pactflow 的双向契约测试也与 OpenAPI(一种 API 规范和文档工具)协同工作。事实上,许多 API 测试套件最初都是使用 OAS 其他协议进行基于模式的测试。随着组织处理更大的系统和更复杂的级别,对契约测试的需求往往会随着时间的推移而出现。
当然,SwaggerHub/OAS 除了测试之外还有许多其他好处。例如,API 模拟工具可以轻松地在没有任何代码的情况下虚拟化操作;SDK 生成工具帮助为开发人员创建最新库;样式验证器有助于确保您的 API 在开发人员的 IDE 中保持一致。
客户成功案例
许多大型金融服务机构正在利用契约测试来确保其 API 的稳定性。
M1 Finance 是一家拥有数十万用户的芝加哥个人理财应用程序,它拥有健壮的后端测试,但其前端 API 网关只有少量集成和 E2E 测试。此外,虽然 TypeScript 和 GraphQL 提供了一定程度的安全性,但它们没有一套强大的测试自动化工具来确保稳定性。
通过采用 Pactflow 进行契约测试,该公司改善了工程和产品之间的沟通和协作,并消除了耗时的手动测试流程。由于 Pactflow 简化的完整契约测试功能,该过程从使用 OSS Pact Broker 的概念验证到将主要利益相关者纳入其中,仅用了不到六个月的时间。
万事达卡的忠诚度奖励应用程序也广泛使用 Pact 的契约测试功能。这些应用程序依赖 REST API 来配置持卡人可以根据其信用卡使用的返利促销。当然,REST API 的任何意外更改都可能破坏应用程序,从而造成重大风险。
该公司将 Pact 契约实施到其持续集成和部署 (CI/CD) 流程中,以生成契约并将其发布到代理,以供提供者使用。然后,提供者将在其自己的 CI/CD 管道中检索契约并对其运行自动化契约测试。
总结
契约测试可以在软件开发生命周期的早期为开发人员提供关于 API 端点的快速可靠的反馈,从而消除集成和 E2E 测试中最具问题的一些方面。通过在消费者和提供者之间建立契约,双方都可以最大限度地降低 API 规范更改或其他问题导致崩溃或中断的风险。如果出现问题,他们可以在开发过程的早期解决,这样解决起来更快更简单。
免费试用 Pactflow,看看提高 API 测试水平并最大限度降低问题影响生产用户的风险是多么容易。