JavaScript 应用中的困境:全局测试超时

2024-12-13   出处: simplythetest.tumblr  作/译者:Josh Grant/ 溜的一比

过去几年里,我一直在使用各种基于 NodeJS 的测试框架。这些框架包括 Mocha、Jasmine 和 Playwright。有趣的是——至少对我来说——这些框架往往有一些共同的模式和结构。虽然其中一些模式很好(例如默认使用配置文件),但有一个我实在讨厌的模式:实现一个全局测试超时,而且这个超时默认是开启的。

亲爱的读者,我不喜欢这个功能,一点都不喜欢。

这个想法其实很简单:设置一个超时值——比如说 30 秒——如果一次测试执行的总时间超过这个超时值,测试就会失败或者抛出一个错误,提示“您的测试运行时间已超过 30 秒”。在很多情况下,这个超时值默认是 30 到 60 秒左右。将这个功能配置成这样,简直是疯了。

测试框架的形态和规模各不相同,就像软件项目一样。有些框架是精简而高效的,只有少量相对快速的测试;而另一些则是庞大且缓慢的,测试代码也远非最佳。如果你正在为测试自动化创建一个框架,你应该预见到不同类型的项目可能会使用你的工具。对于某些项目,可能需要 30 秒来设置并连接到被测系统,而测试甚至在开始之前就会超时失败。

要记住软件中的默认值的力量,默认值可以极大地影响你的工具的工作方式。测试失败就是失败,无论是什么原因。如果失败的原因是几年前的某个团队成员决定 30 秒“太长了”而导致的,那可能会引发一些尴尬的对话。编码框架应该帮助你的团队工作,而不是成为绊脚石。仅仅因为测试运行时间超过了某个不明确的值而导致失败,这似乎违反了“最小惊讶”设计原则。

当然,也有一些情况可以禁用这个超时功能,但这让我不禁想为什么一开始要启用它呢?例如,在 Jasmine 中有一个 DEFAULT_TIMEOUT_INTERVAL​ 值,这是一个规范在超时并失败之前所能运行的最长时间。但为什么不默认禁用这个功能呢?一个任意的规范应该运行多长时间?这是一个完全基于上下文的开放性问题。这些问题和讨论本可以通过不启用这个功能来避免。

我必须承认,全局测试超时在某些情况下确实有一些好的用例。在成熟的持续交付流水线中,超出某个运行时阈值的测试可以从流水线中移除并重新评估,但这需要其他的配套措施。全局超时也可以作为性能问题的粗略信号,但同样需要其他的检查和平衡机制来配合。

默认启用这种超时功能,并不会让我感到愉悦,我相信对于很多第一次使用 JS 测试的团队来说也是如此。


声明:本文为本站编辑转载,文章版权归原作者所有。文章内容为作者个人观点,本站只提供转载参考(依行业惯例严格标明出处和作译者),目的在于传递更多专业信息,普惠测试相关从业者,开源分享,推动行业交流和进步。 如涉及作品内容、版权和其它问题,请原作者及时与本站联系(QQ:1017718740),我们将第一时间进行处理。本站拥有对此声明的最终解释权!欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,与我们的编辑和其他窝友交流。
/46 人阅读/0 条评论 发表评论

登录 后发表评论
最新文章