契约测试?生产者?消费者?一文帮你理清楚


在这里插入图片描述
五星上将麦克阿瑟曾经说过“在契约测试面前,集成测试就是个弟弟“

契约测试

什么是契约?

如果从契约产生的阶段来说,现有资料表明最早要追溯到西周时期的《周恭王三年裘卫典田契》,将契约文字刻写在器皿上,就是为了使契文中规定的内容得到多方承认、信守,“万年永宝用”。所以订立契约的本身,就是为了要信守,就是对诚信关系的一种确立。诚信,是我国所固有的一种优良传统,也是延续了几千年的一种民族美德,在中国儒家的思想体系里,是伦理道德内容中的一部分。

然而,现在不是这么美好,现实中缺少契约精神的比比皆是
在这里插入图片描述
但是,在软件测试领域,契约这把利器,又重新的利用起来

先从测试金字塔讲起

在这里插入图片描述
对于测试而言,这个金字塔是理解测试级别的最好的隐喻,这个金字塔最早出于

Mike Cohn 在他的《Succeeding with Agile》,我们从底层往上读

  1. 单元测试通常是添加到项目中最常见的测试。目标是在函数或方法级别验证代码。如果您有 sum 函数,那么您想要检查它5 + 5 = 10。通常编写和维护此类测试很容易。

/**
 * the function to test
 */

const sum = (a, b) => {
   
  return a + b;
};


/**
 * the unit test
 */

test("adds 5 + 5 to equal 10", () => {
   
  expect(sum(5, 5)).toBe(10);
});

  1. 集成测试(或系统测试)检查组件之间的接口。您可以测试整个类或服务,这通常涉及mock模拟无法在测试环境中重现的外部接口。编写集成测试有点困难,因为涉及的代码更多,而且维护成本也更高。一次测试大量代码,因此追踪问题可能需要一些时间。
    在这里插入图片描述
  2. 端到端(E2E)测试是最完整的测试,因为目标是模拟产品的最终用户。您通常需要构建一个完整的端到端环境,其中包含应用程序的所有组件(所有服务、后端存储等)。您可以使用 Postman 等工具来模拟 REST 调用,或使用 Cypress 等工具来模拟通过 Web 应用程序界面的使用情况。通常,您将编写较少的 E2E 测试,因为它们在运行时间和维护时间方面都花费大量时间。

什么是锲约测试?

但是,显而易见的出现了一个问题

虽然金字塔顶部的测试更能代表客户的体验,

但它们也有一些令人痛苦的缺点。:

很慢;由于它们遍历多个系统并且通常必须串行运行,因此每个测试可能需要几秒钟到几分钟才能完成,特别是在必须执行先决设置(例如数据准备)的情况下。

难以维护;端到端测试要求所有系统在运行之前都处于正确的状态,包括正确的版本和数据。

可能不可靠或不稳定:由于编排测试环境的复杂性,它们经常会失败,导致误报,从而分散团队的注意力。在许多情况下,它们会由于与任何代码更改无关的配置问题而失败。

难以修复:当端到端测试失败时,由于问题的分布式和远程性质,调试问题通常很困难。

规模严重;随着越来越多的团队的代码得到测试,事情变得更加复杂,测试套件的运行速度呈指数级下降,并且发布在自动化管道中被堵塞。

在流程中发现错误为时已晚:由于运行此类测试套件的复杂性,在许多情况下,这些测试仅在代码提交后才在 CI 上运行 - 在许多情况下,由单独的测试团队在几天后运行。这种

  • 34
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值