挑战测试金字塔

2025-06-07

挑战测试金字塔

本文最初发布于https://juristr.com/blog/2019/07/testing-cypress-intro 。更多内容请访问juristr.com/blog。

编写自动化测试已成为软件开发中的一项标准做法,并且(应该)成为健康软件开发流程中不可或缺的一部分。测试(尤其是自动化测试)可以有不同的风格和不同的级别。在本文中,我将简要概述使用 Cypress 进行自动化 UI 测试或端到端测试。


(摘自我的时事通讯。点击此处订阅


测试固然重要,但它也关乎成本与收益。我们不想盲目地测试所有东西,而是专注于最关键的部分,并创建能够带来最大收益(我们也可以称之为投资回报率 (ROI ))的测试。首先,我们来谈谈手动测试与自动化测试。我经常这样思考:

  • 手动测试需要花钱(而且需要反复进行)
  • 自动化测试需要投入资金,随着时间的推移,会产生投资回报(即希望应用程序的错误更少)

手动测试不算投资。它只是花钱获取一次性反馈,仅此而已。自动化测试可以持续不断地提供反馈。而测试的投资回报率 (ROI) 正是我们追求的目标。

但即使是自动化测试,我们也有不同的测试。从总体上讲,我喜欢将它们分为单元级测试和集成级测试。这也是你经常看到神秘的测试金字塔的时候:

测试金字塔根据执行速度和编写成本告诉我们应该编写哪些测试。虽然集成级测试被认为速度慢且成本高,但它们却能给我们带来最大的价值。仔细想想,它们更贴近最终用户的操作,而单元级测试更像是一种开发者工具,用来验证各个独立部分是如何独立工作的。

最近, Web 开发领域可用工具的变化开始对这种观点提出一些挑战。事实上,Kent C. Dodds 开始提供测试金字塔的另一种形式,他称之为“测试奖杯”。

使用 Cypress 进行测试

如果我们更多地关注 UI(和端到端)测试领域,那么市面上有一些工具。它们大多数基于 Selenium 驱动程序。我一直将它们与 Java、.Net 结合使用,并且更成功地与NightwatchJSProtractor等包装器结合使用。Selenium 非常棒,它围绕浏览器 API 提供了一个抽象层,允许您使用各种不同的编程语言编写 Selenium 测试。然而,正是这种抽象也使其使用起来繁琐冗长,并且难以调试。

Cypress是市场上相对较新的工具,绝对值得一试。它不仅使用起来非常清爽,API 也很简单,而且还拥有一些很酷的杀手级功能,例如时间旅行、改进的调试实时重新加载自动等待

使用 Cypress,您可以通过浏览器自动化编写集成级测试。坦白说,它会点击您指定的按钮,并验证结果状态是否符合我们的预期。在这一点上,它与 Selenium 非常相似。但即便如此,它们仍然截然不同。一提到自动化 UI 测试,我通常会感到胃痛。我用过很多自动化工具,它们大多会导致测试不稳定,并产生大量的误报……以至于你只能丢弃它们或禁用它们。Cypress 似乎吸取了教训,并且在处理 Web 的异步特性方面做得非常出色,提供了一流的调试功能,并与您的 Web 应用完美集成。其中一个核心区别是,Cypress 在您的浏览器“内部”运行,与您的 Web 应用并存。

因此,它可以访问 DOM 以及所有正在进行的 XHR 请求,甚至允许我们将它们存根 (stub out)。这为改进测试体验开辟了许多可能性。不过,在我深入探讨细节之前,请先回顾一下我大约一年前做的 15 分钟闪电演讲。

另外,别忘了查看Cypress 文档。团队投入了大量时间来完善文档,使其更加出色且易于理解。

文章来源:https://dev.to/juristr/challenging-the-testing-pyramid-4hnl
PREV
如何打造合适的在线形象并开始打造你的品牌
NEXT
我创建了我的第一个 NPM 包