|
对于最新的稳定版本,请使用 spring-cloud-contract 5.0.0! |
介绍春云合约
Spring Cloud Contract 将 TDD 提升到了软件架构层面。 它允许你进行基于消费者和生产者驱动的合同测试。
历史
在成为 Spring Cloud Contract 之前,这个项目被称为 Accurest。 该游戏由Marcin Grzejszczak和Jakub Kubrynski(Codearte)创作。
这0.1.0发行时间为2015年1月26日,并变得稳定1.0.0于2016年2月29日发行。
测试问题
如果我们想测试前一图左上角的应用 为了判断它是否能与其他服务通信,我们可以做以下一种 有两点:
-
部署所有微服务并进行端到端测试。
-
在单元测试和集成测试中模拟其他微服务。
两者各有优点,但也有很多缺点。
部署所有微服务并执行端到端测试
优势:
-
模拟生产。
-
测试服务之间的真实通信。
弊:
-
为了测试一个微服务,我们必须部署六个微服务,几个数据库, 以及其他物品。
-
测试运行的环境只锁定了一组测试(其他测试不行 可以同时进行测试)。
-
它们运行时间很长。
-
反馈往往在流程的后期才出现。
-
它们极难调试。
在单元测试和集成测试中模拟其他微服务
优势:
-
他们反馈非常快。
-
他们没有基础设施需求。
弊:
-
服务的实现者创建的存根可能与 现实。
-
你可以通过测试但失败后进入生产环境。
为了解决上述问题,春云合约诞生了。主要思想是 能给你非常快速的反馈,无需设置 整个微服务的世界。如果你做的是存根,那你只需要申请 是你的应用程序直接使用的。下图展示了这种关系 申请的简章:
Spring Cloud Contract让你确信所使用的存根是 由你拨打的服务创建。另外,如果你能用它们,那就意味着它们 并与制片方进行了测试。简而言之,你可以信任这些存根。
目的
春云合约的主要目的包括:
-
确保HTTP和消息存根(开发客户端时使用)完全正确地执行 具体是服务器端实现的功能。
-
推广ATDD(验收测试驱动开发)方法和微服务架构风格。
-
提供一种发布合同变更、双方都能立即看到的方式。
-
生成用于服务器端的样板测试代码。
默认情况下,Spring Cloud Contract 作为 HTTP 服务器存根与 Wiremock 集成。
| Spring Cloud 合约的目的不是开始写作业务 合同中的特征。假设我们有一个欺诈检查的商业用例。如果 用户可能有100种不同的骗子原因,我们假设你会制造两个 合同,一个代表正面情况,一个代表否定情况。合同测试包括 用于测试应用程序间的契约,而非模拟完整行为。 |
什么是合同?
作为服务的消费者,我们需要明确自己想要实现什么。我们必须 制定我们的期望。这就是我们写合同的原因。换句话说,契约是 对API或消息通信应如何呈现的达成共识。请考虑以下例子:
假设你想发送包含客户公司的ID,并且
它想向我们借的金额。你还想把它发送给/fraudcheck通过使用
这放方法。以下列表显示了一份合同,用于检查客户是否应当
在Groovy和YAML中都被标记为欺诈:
| 预计合同来自可信来源。你绝不应该下载或与来自不可信地点的合同进行交互。 |