耙子测试运行速度很慢

时间:2012-08-05 20:21:03

标签: ruby windows unit-testing rubymine

经过一些测试后,我确信我的设置(窗口,rubymine和最新的ruby版本)都有问题。我现在的时间是:

Finished tests in 14.289817s, 0.0700 tests/s, 0.3499 assertions/s.

1 tests, 5 assertions, 0 failures, 0 errors, 0 skips

Process finished with exit code 0

进行5次非常简单的测试(只检查空字段上的验证是否有效)。这5个单元测试的总时间为160秒,超过2分钟。

我该怎么做才能提高这个速度?

以下是测试:

require 'test_helper'

class ItemTest < ActiveSupport::TestCase
  test 'item attributes must not be empty' do
    item = Item.new
    assert item.invalid?
    assert item.errors[:name].any?
    assert item.errors[:description].any?
    assert item.errors[:image_url].any?
    assert item.errors[:rating].any?
  end
end

3 个答案:

答案 0 :(得分:6)

您的问题是Windows。我们在Windows上使用JRuby,它实际上比Windows上的RubyInstaller(mingw)ruby运行得更快但是在运行测试套件或启动rails服务器时我们确实看到非常慢的结果。由于加载了Rails环境,单次测试运行大约需要1分钟。 您有几个选择:

  1. 切换到linux / osx
  2. 使用spork为您的测试预先加载几个rails环境。请注意,这并不完美,但会大大减少您的时间。使用此选项,您可能希望使用minitest或rspec,我无法使用testunit在Windows上使用spork。使用spork,您应该能够将单次测试运行时间缩短到大约10秒。
  3. 编写尽可能多的测试以在Rails之外运行,换句话说,不需要Rails堆栈。这将是非常快的,您应该能够在几秒钟内运行测试,但正如您猜测的那样,很难在rails之外测试很多东西(控制器,视图)。虽然对于已经分解为已经不需要任何东西的模块的功能,但可以完美地工作。
  4. 祝你好运!

答案 1 :(得分:2)

你宝石堆栈的其余部分是什么?有时第三方宝石由rails初始化并将尝试打电话回家(New Relic,Airbrake),这可能会使你的测试时间膨胀(尽管可能不是这么多)。如果您的测试套件没有严格要求的东西,您应该尝试将其拉入正确的env组,或通过bundler设置require :false

group :production do
  gem 'newrelic_rpm'
end

答案 2 :(得分:0)

启动时间似乎在扼杀你,所以你和我可能在同一条船上。在Jodell和Dark Castle之间已有很多这方面的内容,但这里有几乎所有有用的东西,按功效降序排列。

  1. 获得补丁1.9.3,并将2.0文件系统改进向后移植。第一个获得2倍更好的数字,但我使用第二个因为我觉得第一个是不稳定的
  2. 设置GC选项
  3. 关闭收集覆盖率数据(我的IDE保持志愿服务)
  4. 运行Spork和set SPEC_OPTS=--drb
  5. 关闭病毒扫描程序(实际上并没有这样做,反正我的价值仅为10%)
  6. 仔细检查你的宝石,用require:false
  7. 推迟加载宝石 实际上,6并没有真正地给我买东西。我们遇到的最大问题是无条件地加载Thin(它安装了Eventmachine,安装了21兆字节),但是堆栈中接下来的3个实际上正被RSpec使用。我没有看过网络流量,但Jodell可能会在那里做点什么。