AICon 上海站|90%日程已就绪,解锁Al未来! 了解详情
写点什么

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:0372915

评论

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

【Vuex 源码学习】第五篇 - Vuex 中 Mutations 和 Actions 的实现

Brave

源码 vuex 9月日更

Alibaba iOS 工程架构腐化治理实践

阿里巴巴终端技术

ios 研发效能 客户端 架构治理

NQI质量基础设施一站式方案,NQI一站式线上平台搭建

13530558032

【云计算】从事云计算运维可以考取哪些证书?

行云管家

云计算 阿里云 运维 华为云 云运维

Android如何用代码执行shell命令

Changing Lin

9月日更

财经违规自媒体集体扑街,必须打击违规自媒体账号

石头IT视角

重磅发布!百度飞桨获2021全球智博会产品金奖

百度大脑

人工智能

区块链是如何运作的、是如何防止被篡改的?

CECBC

建立测试自动化策略【译】

FunTester

自动化测试 测试框架 测试管理 测试策略 FunTester

Java 17 正式发布,Oracle 宣布从 JDK 17 开始正式免费,Java 迈入新时代

Java 编程 源码 架构

花了3个小时解决了和异地女朋友一起看电影的需求(内附源码)

ZEGO即构

android 音视频 一起看电影

数字货币钱包开发,imtoken钱包系统搭建

13530558032

自动化驱动的高可用网络:爱奇艺B2网络流量自动调度系统建设实践

爱奇艺技术产品团队

流量

软件测试工程师应该怎样规划自己

程序员阿沐

程序员 职业规划 软件测试 自动化测试 经验分享

到底什么是区块链?是咋样的运营原理

CECBC

围绕低代码开发存在的三个误解

低代码小观

程序员 低代码 企业管理 低代码开发平台 应用开发

ONNX 浅析:如何加速深度学习算法工程化?

拍乐云Pano

人工智能 深度学习 音视频

【OpenIM原创】IM服务端docker、源码、集群部署 非常实用

OpenIM

2021智博会全国区块链大赛暨首届“星火杯”区块链应用大赛正式启动

云计算,

【上汽零束SOA】云管端一体化SOA软件平台系列介绍之六:数字生态篇

SOA开发者

自动驾驶 SOA 智能汽车 OTA

北鲲云SaaS平台为生物制药研发进程带来“加速度”

北鲲云

Alibaba 80k Star《Java面试突击手册》(全彩版)开源

Java 程序员 架构 面试 计算机

Apollo 配置中心详细教程

牧小农

Apollo 阿波罗

量化交易APP开发,量化交易系统源码

13530558032

让全链路压测变得更简单!Takin2.0重磅来袭!

TakinTalks稳定性社区

WorkPlus即时通讯软件,满足政企局域网办公需求

BeeWorks

【上汽零束SOA】云管端一体化SOA软件平台系列介绍之六:数字生态篇

SOA开发者平台

软件 SOA 生态 汽车 OTA

等保三级多久测评一次?每年都要测评吗?

行云管家

网络安全 信息安全 等保

集齐海外主流云平台,EMQ X Cloud 正式支持 Google Cloud Platform 部署

EMQ映云科技

IoT Google Cloud AIOT 云 原生云 CTO

终于完成了私有NPM和PYPI repo的搭建

吴脑的键客

npm nexus pypi

高可用 | 关于 Xenon 高可用的一些思考

RadonDB

MySQL 数据库

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