【发布时间】:2011-04-09 10:48:10
【问题描述】:
我有一个 Rails 应用程序,在我的 RSpec 测试中包含超过 2,000 个示例。不用说,这是一个大型应用程序,有很多需要测试的地方。在这一点上运行这些测试效率很低,而且因为它需要很长时间,我们几乎已经到了在推出新版本之前不鼓励编写它们的地步。我将 --profile 添加到我的 spec.opts 以查找运行时间最长的示例,其中至少有 10 个平均需要 10 秒才能运行。在你们的 RSpec 专家中这是正常的吗?对于一个例子来说,10 秒是否太长了?我意识到,对于 2,000 个示例,彻底测试所有内容将花费大量时间 - 但在这一点上 4 小时有点可笑。
对于运行时间最长的示例,您看到了什么样的时间?我可以做些什么来解决我现有的规范,以便找出瓶颈并帮助加快速度。在这一点上,每一分钟都非常有帮助。
【问题讨论】:
-
慢速测试是集成测试吗?他们在打分贝吗?如果是这样,数据库被重新加载的频率是多少,你可以模拟数据库吗?
-
您是否能够只运行与您正在处理的部分相关的部分规范,类似于 SeattleRB 的自动测试?你有可以运行所有测试的持续集成服务器吗?
-
请记住,所有事物都是相对的。我听说过“grrr,我们的测试套件永远需要”20 分钟……和 16-20 小时。这一切都在旁观者的眼中。给定测试的 10 秒通常意味着单元测试已成为如下所述的集成测试。
-
针对此类问题的建议:将
perftools.rb与您的测试框架一起使用,以了解您大部分时间都在使用什么。接听前 10 个电话并尝试消除/略读它们。然后重复,直到快乐。
标签: ruby-on-rails ruby unit-testing rspec bdd