为什么我的导轨测试这么慢?

时间:2010-04-05 20:08:38

标签: ruby-on-rails unit-testing

我的测试套件启动时需要5秒才正常吗?即使在运行空套件时,它仍然需要很长时间。是因为它在每次运行时都会启动一个新的rails实例吗?如果是这样,无论如何都要坚持下去吗?

示例:

rlepidi@rlepidi:~/projects/rails/my_project$ time rake test
/usr/bin/ruby1.9.1 -I"lib:test" "/var/lib/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/release_test.rb" 
Loaded suite /var/lib/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader
Started

Finished in 0.000181867 seconds.

0 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
0% passed

real    0m4.173s
user    0m3.820s
sys 0m0.288s

正如您所看到的,这个空的测试非常快,但由于某些原因仍然有4秒的开销。我正在使用Test :: Unit和Shoulda。

3 个答案:

答案 0 :(得分:11)

测试速度瓶颈是Rails加载其环境所需的时间。运行脚本/控制台,看看加载到您的环境需要多长时间......它应该是相同的。

你有一个足够大的代码库,有许多插件和宝石,加载时间可高达1分钟!! 如果你像我一样停止运行测试b / c你厌倦了等待30秒只是为了测试一个小的变化,你需要运行像spec_server这样的测试服务器,甚至更好:spork!

您会发现使用spec_server处理类缓存可能存在奇怪的问题,这就是我更喜欢spork的原因。

答案 1 :(得分:1)

我遇到了同样的问题,我通过安装ruby entreprise edition(REE)解决了这个问题。我不知道为什么但是在我的ruby 1.9.2下加载rails环境需要4-5秒,而使用REE需要1-2秒。

我使用RVM安装它。

答案 2 :(得分:0)

您的测试运行多长时间?通常Rails测试需要很长时间才能访问数据库。为了加快它们的初步改进,你可以:

  1. 通过设置:

    停止使用实例化灯具

    self.use_instantiated_fixtures = false

  2. 通过设置:

    开始使用事务性灯具

    self.use_transactional_fixtures = true

  3. 为了进一步提高测试性能,请考虑使用preloaded fixtures