引言
今天,我想通过一个类比——购买你梦想中的房子??——来向你介绍合约测试的概念。无论你是否已经拥有了梦想中的房子,还是仍在寻找,你可能都知道这个过程带来的兴奋和期待。
想象一下,你终于找到了完美的房子。你很高兴继续推进,但在钥匙交到你手中之前,与卖家明确期望至关重要。这包括达成细节上的共识:价格、房子的状况以及其他任何条款。为了正式化这一点,会起草一份合同,而中立的一方,比如公证人或银行,会帮助确保一切清晰且公平。
这个场景与软件开发中的合约测试如出一辙,消费者(买家)和提供者(卖家)就一份合约达成一致,以确保他们的互动符合期望。合约代理(比如公证人)作为调解人,验证并执行这些协议。
让我们进一步剖析这个类比。
消费者
在这个场景中,你是消费者。你有具体的期望:面积、房间数量、位置、价格、社区等。
在合约测试中,消费者是一个需要从提供者那里消费数据或服务的服务或应用程序。消费者通常是一个向后端服务发起请求的 Web 或移动应用程序,也可能是另一个调用后端服务的服务。
消费者测试验证消费者是否正确创建请求,是否按预期处理提供者的响应,并揭示对提供者行为的任何误解。
提供者
然后,卖家是提供房子的人。他们承诺房子的某些特性:花园、现代化厨房、友好的社区等。
在合约测试的另一端,提供者承诺提供特定的数据或功能。通常是一个后端服务。
合约
合约是你和卖家之间的书面协议。它确保双方都理解并同意正在提供的内容以及期望的内容(例如,价格、交货日期、房子的特性)。
在软件中,合约并无不同。合约是消费者和提供者之间关于他们将如何互动的正式协议(例如,API 规范、请求/响应格式)。
嗯……其实不是!合约并不等同于JSON模式。这篇文章很好地解释了基于模式和基于合约的测试之间的区别。
简而言之:模式是 JSON 中数据组织方式的结构蓝图或定义。它描述了数据的结构、格式和关系。
但模式并不指定数据应该如何使用,何时提供,或者消费者和提供者之间的互动应该如何表现。它纯粹是关于数据格式和结构的。
合约包含模式,但除此之外,还定义了消费者和提供者之间的行为和互动协议。
合约包含以下数据:
·消费者和提供者的名称
· 请求的数据要求
· 消费者和提供者之间的互动
· 动态值的匹配规则
· 环境和部署信息
合约代理
合约代理,就像银行或公证人一样,帮助验证并调解协议。他们确保双方都遵守他们的承诺。
在合约测试中,合约代理可以是一个工具或框架(例如,Pact),它存储并验证合约。它确保提供者和消费者坚持他们同意的规范。
代理帮助独立验证双方之间的兼容性,确保双方能够顺利合作。
Can-I-Deploy 工具
为了使消费者和提供者能够检查他们是否可以将更改部署到生产环境中,Pact 提供了一个名为 can-i-deploy 的命令行界面(CLI)工具,它使消费者和提供者能够确定合约的验证状态。
合约测试方法
主要有两种方法来进行合约测试:
· 消费者驱动合约测试(CDCT)方法
· 提供者驱动合约测试(PDCT)方法
· 在本系列中,我将讨论传统的 CDCT 方法。
消费者驱动测试
在消费者驱动的方法中,消费者推动合约。作为消费者,在最终确定购房之前,你可能会检查房子以确认它符合你的期望,并将你的期望作为合约发布给代理。另一方面,卖家必须确保他们的房子如合约所述,并准备好出售。这就像提供者端测试,确保他们交付合约所指定的内容。
合约测试确保消费者(买家)和提供者(卖家)在他们的期望和交付物上达成一致,代理(公证人或银行)促进这个过程。这种方法减少了沟通不畅的风险,并确保了顺利的合作——无论你是购买房子还是构建软件系统。
结论
合约测试充当消费者和提供者之间的桥梁,确保顺利合作。就像最终确定购买你梦想中的房子一样,双方同意一份概述期望和交付物的合约,代理确保一切对齐。无论是购买房子还是开发软件,清晰的协议都能带来更顺利的结果!
文末了:可以到我的个人号:atstudy-js
这里有10W+ 热情踊跃的测试小伙伴们,一起交流行业热点、测试技术各种干货,一起共享面试经验、跳槽求职各种好用的
欢迎加入 ↓ ↓ ↓
AI测试、 车载测试、自动化测试、银行、金融、游戏、AIGC...