2023年了, 推荐5种前端测试的方案

5,353 阅读4分钟

2023年了, 相信很多前端团队都开始考虑上自动化测试了, 这里分享 5 种推荐的前端测试方案.

根据测试金字塔, 我们给出以下 5 种推荐的测试方案. 并且每一种方案都会附上链接地址.

1. 单元测试: Vitest

vitest.dev/

单元测试是收益最高、速度最快的测试方案. 单元测试也能强迫我们编写更易测试的代码、让我们习惯分离副作用和抽象工具方法.

单元测试在2022年之前, 前端主流的方案是 Jest. 直到 vitest 的诞生, 我们可以用更快、更简单的 Vitest 进行单元测试.

单元测试是一门学问, 如何管理覆盖度、如何让测试的ROI(投入产出比)为正是对软件工程经验的挑战. 比较好但是却备受争议的方案是使用 TDD(测试驱动) 进行软件开发. TDD 对软件工程师的水平要求较高, 但是可以有效解决测试覆盖率的问题. 以后我们专门写一篇文章来讲解 TDD.

2. 组件测试: Testing library

testing-library.com/

前端组件测试也是单元测试的一种, 但是它基本是前端独有的, Testing library 可以模拟真实dom事件交互, 对你的各种组件进行测试. 它是介于界面测试和传统的单元测试之间. 也属于单元测试的一种. 配合 Vitest 对您的业务组件进行测试, 可以脱离只测试逻辑函数的范畴.

3. 集成测试: crypress

www.cypress.io/

crypress 是一种自动化集成测试的优秀方案, 你通过编写 crypress 代码, 控制浏览器或无头浏览器对你的项目进行真实的操作. 这是集成测试的一种, 因为它模拟了最终用户的操作行为, 所以它能够更全面的验证软件的可靠性.

众所周知, 集成测试, 又叫端到端测试(E2E), 它是一种覆盖范围广、但是测试成本较高的行为. 因为 E2E 测试每次执行的时间要比单元测试更长. 但是它能反应最终的问题.

4. 零代码自动化测试: Testflowy

image.png

Testflowy.com

Testflowy 也是一种集成测试方案, 它和 Crypress 雷同, 唯一的区别是它是以上所有方案中, 唯一一个不需要编写测试脚本的方案. Testflowy 和 Crypress 都是免费的.

Testflowy 让你很简单的通过只操作鼠标就可以完成测试细节的描述, 然后进行自动化的集成测试. 它每次执行的时间和 Crypress 一样, 也是一种覆盖范围广, 但是测试成本较高的行为.

5. 手动测试

不管你使用任何方案, 手动测试都无法避免, 您的自动化测试再优秀, 在新系统或大版本发布时, 你都无法避免的需要测试人员进行手动测试. 那么前 4 种自动化测试的方案, 存在的意义是什么?

  1. 单元测试可以减少你的低级bug的概率, 也可以帮助你未来对系统重构时, 你的最低保障: 你只需要保证你重构的代码通过了所有单元测试, 最起码你重构的代码在每个测试单元都是正确的, 减少低级逻辑错误的概率. 单元测试的目的是保证你编写的带代码单元的正确性, 不是保证系统的正确性.
  2. 集成测试可以提前帮你找出关键链路的错误, 也能减少每次改动后, 测试回归的成本. 集成测试由于编写成本高、测试因业务调整而被打破的概率也高, 所以很少能够利用集成测试覆盖所有场景, 一般只覆盖主流、核心场景. 这也是为什么本文推荐了 Testflowy 这款集成测试工具, 它零代码的特性, 可以减少你创建每个集成测试的成本, 让你的集成测试覆盖范围更广.

我们可以看到, 单元测试和集成测试都是降低人工测试成本的目的, 所以即便团队有测试人员手工测试, 我们还是建议你尝试增加自动化测试这个环节.

总结

以上 5 种方案可以组合使用, 请记住, 单元测试的收益永远是最高的, 但是如果只有单元测试是不够的.

很多工程师刚开始接触自动化测试都会有一个问题: 到底是用单元测试还是集成测试. 这个答案早就有定论:

单元测试去测试你的代码块, 集成测试去测试你的整个系统, 手动测试是最终兜底的. 结合使用才能够得到最高的投入产出比.