代码之家  ›  专栏  ›  技术社区  ›  ryeguy

为什么我的rails测试这么慢?

  •  8
  • ryeguy  · 技术社区  · 15 年前

    例子:

    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秒的开销。我在Shoulda中使用Test::Unit。

    3 回复  |  直到 15 年前
        1
  •  12
  •   simianarmy    15 年前

    测试速度瓶颈是Rails加载其环境所需的时间。运行script/console并查看将您加载到环境中需要多长时间…应该是相同的。

    你有一个足够大的代码库和许多插件&宝石,装载时间可高达1分钟!! 如果你像我&停止运行测试b/c你厌倦了仅仅为了测试一个小的改变而等待30秒,你需要运行一个像spec\u server这样的测试服务器,或者更好的:spork!

    您会发现,在spec\u server处理类缓存时可能会出现一些奇怪的问题,这就是我喜欢spork的原因。

        2
  •  1
  •   alarive    14 年前

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

    我用RVM安装的。

        3
  •  0
  •   kopper    15 年前

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

    1. self.use\u instantiated\u fixtures=false

    2. 通过设置开始使用事务性装置:

      self.use\u transactional\u fixtures=真

    preloaded fixtures .