写点什么

eBay 和 Lastminute 采用契约测试来驱动架构演进

  • 2023-06-07
    北京
  • 本文字数:1434 字

    阅读完需:约 5 分钟

eBay和Lastminute采用契约测试来驱动架构演进

lastminute.com采用契约测试来降低系统级集成测试所带来的复杂性,并改进反馈周期和开发过程。eBay 也采用契约测试来帮助其内部进行API演化,并为客户端团队提供支持。


在分布式系统(如微服务架构)中,应用程序服务使用 RPC(远程过程调用)风格的请求或异步消息进行交互。测试这类系统的常用方法是使用系统测试(端到端集成测试),这通常需要将整个系统部署在测试环境中。


lastminute.com 的软件工程师Ivan Dell'Oro指出集成/系统测试所带来的挑战:

在过去,我们通过集成测试来验证两个微服务之间的消息交换,由于多种原因会导致测试失败。为避免阻碍开发过程,我们选择忽略这些测试。结果是它们被忽视了好几个月,当一边的系统发生变化,两边的 CI 管道却都是绿色的:通常,当生产环境中出现了故障,应该是契约出现了错误。


eBay 团队也表示:

对于 eBay 的通知平台团队来说,我们面临的另一个挑战是,我们的 API 被许多领域团队调用。在演进服务 API 的同时保持与所有消费者端的兼容性是我们的一个基本原则。


这两个团队都一直在寻找能够让测试变得不那么脆弱和更快速的方法,目标是改善开发人员/测试人员的体验,缩短反馈周期,加快价值交付的速度,同时支持内部契约的演进,例如 API 规范和消息 schema。


最后,经过一些研究和实验,他们采用契约测试作为验证服务间交互正确性的主要方法。lastminute.com 发现,这给他们的微服务架构和交付过程带来了积极的影响,与标准的系统级测试相比,测试执行时间大大缩短了。eBay 使用契约测试来验证其平台中的集成点,支持通过写作来确保内部 API 可以在不出现不兼容问题的情况下演进。


lastminute.com 已经使用Pact(一个客户端驱动的契约测试工具)对微服务之间的 RPC 交互进行了契约测试,并在随后将其扩展到服务间的异步交互(通过 RabbitMQ 代理交换消息)上。



图片来源:https://technology.lastminute.com/contract-testing-asynchronous-messaging-pact-junit-mockk/


eBay 的团队研究了基于OpenAPI规范的 API 定义语义版本控制,但得出的结论是,版本控制本身不足以解决系统测试的脆弱性。他们将BDD(行为驱动开发)视为描述 API 消费者需求的一种方式,生产者和消费者团队协作编写所有需求并使其可执行。事实证明,在采用这种方法时,API 提供方需要在客户需求发生变化时捕获和更新客户需求,而这已被证明是有问题的。


最后,他们发现了契约测试,生产者和消费者团队可以在他们的测试用例中使用 Mock(或存根)来独立地维护测试套件。


他们对Spring Cloud Contract和 Pact 进行了评估,最终选择了后者,因为后者可以更直接地使用 schema,并有更好的跨团队交互支持。他们对 Spring Cloud Contract 和 Pact 进行了评估,最终选择了后者,因为后者可以更直接地使用 schema,并有更好的跨团队交互支持。他们对Pactflow(一款商业版 Pact 产品)和内部 CI/CD 工具进行了无缝集成,并创建了一个专门的开发者门户,用于配置新的契约测试。



图片来源:https://tech.ebayinc.com/engineering/api-evolution-with-confidence-a-case-study-of-contract-testing-adoption-at-ebay/


Dell'Oro 强调,契约测试本身并不能完全替代系统级集成测试。契约测试旨在验证服务之间数据交换的正确性,但服务级集成测试会同时执行业务逻辑和错误处理,确保整个流程/数据流的正确性和弹性。


【声明:本文由 InfoQ 翻译,未经许可禁止转载。】


查看英文原文https://www.infoq.com/news/2023/05/ebay-contract-testing-evolution/


延伸阅读:

测试驱动开发?还是测试驱动需求?

软件界旷世之架:测试驱动开发(TDD)之争

2023-06-07 11:0385165

评论

发布
暂无评论
发现更多内容

评测有度·成长有迹:AI 标准化考核系统数智化转型实践

上海拔俗

关联洞察·智能决策:知识图谱分析系统赋能产业智慧化升级

上海拔俗

技术集成、数据驱动,经济波动期间企业财务自救指南

智达方通

企业管理 数字化管理 全面预算管理

ListenHub:让编辑 AI 播客像用 Word 一样简单;前天猫精灵总裁创业:运动可穿戴 +智能体切入通用智能丨日报

RTE开发者社区

就在本周五!全球首款 AI 主题桌游试玩会丨Convo AI&RTE2025

RTE开发者社区

工业智脑·知识驱动:智能工业知识图谱系统赋能制造业数字化转型

上海拔俗

道路养护设计系统

深圳亥时科技

云栖实录 | 阿里云助力金山办公打造智能搜索新标杆:WPS云文档搜索技术全面升级

阿里云大数据AI技术

elasticsearch 阿里云 wps AI搜索 金山办公

springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务

刘大猫

人工智能 云计算 算法 物联网 大模型

过程控制 通讯维护经验总结(1)

万里无云万里天

工业 智能制造 工厂运维

视觉觉醒·感知革命:人工智能图像处理系统开启机器视觉新纪元

上海拔俗

新闻速递丨Altair 全新发布 2026 Altair HPCWorks:实现 HPC、AI 与量子性能的跃升

Altair RapidMiner

AI HPC 仿真 高性能计算 CAE

智能原生·创造无限:AIGC 软件开发平台驱动数字内容生产革命

上海拔俗

递归算法实践--到仓合单助力京东物流提效增收

京东科技开发者

智能感知·先知先行:AI 智能巡检系统重塑设备运维新范式

上海拔俗

让数据流动更智能:元数据如何重塑DataOps与ETL

谷云科技RestCloud

元数据 数据同步 DataOps ETL 数据集成

【实体店老板必看】你和“客流爆满”之间,只差一个“GEO优化”!

森潮全域科技

GEO优化

我在iOS/Swift工程中成功编译了HarfBuzz!

非专业程序员Ping

ASP.NET Core Blazor 路由配置和导航

码农刚子

ASP.NET Core blazor Blazor入门

云栖实录:重构可观测 - 打造大模型驱动的云监控 2.0 与 AIOps 新范式

阿里巴巴云原生

阿里云 云原生 云监控 可观测

心灵灯塔·数字港湾:AI 心理辅导系统重塑心理健康服务新范式

上海拔俗

移动端性能监控探索:可观测 Android 采集探针架构与实现

阿里巴巴云原生

阿里云 阿里云云原生

过程控制 软件维护经验总结(1)

万里无云万里天

工业 智能制造 工厂运维

一个开源免费、轻量级的 Avalonia UI 控件库

追逐时光者

.net 微软

智能决策·流程自驱:业务管理大模型重塑企业数字化运营新范式

上海拔俗

系统商(ERP、OMS、WMS 等)打通物流 API 数据的重要一环

快递鸟

捷行在线分享LeSS专场

ShineScrum

产品开发 规模化敏捷 AI赋能

这款国产智能编码工具,竟然登顶全球TOP3!

苍何

什么是低代码开发平台?2025年最热门的10大低代码开发平台盘点!

优秀

低代码 低代码开发平台

谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑

poemyang

垃圾回收 Java虚拟机

EasyExcel碰到问题记录

京东科技开发者

eBay和Lastminute采用契约测试来驱动架构演进_文化 & 方法_Rafal Gancarz_InfoQ精选文章