2012-08-05 167 views
11

运行一些测试后,我确信我的设置(windows,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 
+0

购买更快的机器?不诚实 - 没有更深的知识你的测试很难说。 – iltempo 2012-08-05 20:26:07

+0

添加了测试 – Organiccat 2012-08-05 20:30:04

+1

现在,我对这种缓慢感到印象深刻。你甚至没有碰到数据库。可能是加载Rails环境需要很长时间。 rake -vT运行多久? – iltempo 2012-08-05 20:32:52

回答

6

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

  1. 改用Linux/OSX
  2. 使用叉勺,以保持两轨环境预装了您的测试。请注意,这并不完美,但会大大缩短您的时间。有了这个选项,你可能会想使用minitest或者rspec,我在使用testunit获得spork在Windows上工作时遇到了麻烦。通过spork,您应该可以将单个测试运行时间缩短到大约10秒钟。
  3. 编写尽可能多的测试以在Rails之外运行,换句话说就是不需要Rails堆栈。这将是非常快的,你应该能够在几秒钟内运行测试,但正如你所猜测的,很难在轨道外测试很多东西(控制器,视图)。对于已经不需要任何轨道的模块,已经分解出来的函数可以很好地工作。

祝你好运!

+0

感谢您的评论。最初进入Windows时,我并没有意识到rails运行的非常糟糕。我想基于Unix的Mac环境可以让它运行得更快?我决定放弃RoR,直到我能够访问允许我正确运行导轨的机器。我想这应该是导轨不受欢迎的主要原因(以我个人的观点)。 – Organiccat 2012-08-13 10:00:39

+0

是的,Rails和很多脚本类型语言都是针对* nix环境编写的,所以是的,Mac可以正常工作。 Windows就像是一个事后的想法,特别是在Rails速度非常慢的时候。如果你一开始就坚持使用大多数Rails工作的环境,你将节省大量时间。 – 2012-08-13 18:47:21

+0

我已经创建了一个虚拟机(virtualbox)并在其上安装了linux。测试时间从32秒到11秒(仍然不是很好)。我可以看到,尽管从软件模拟完成所有事情ruby在Linux中运行得更快。 – Pynner 2012-08-14 14:40:03

2

你的宝石堆栈的其余部分是什么?有时候第三方的宝石会被rails初始化,并且会尝试打电话回家(New Relic,Airbrake),这会让你的测试时间膨胀(尽管可能不会太多)。如果有什么不严格要求的测试套件,你应该尝试把它拉成合适的ENV组,或者通过捆绑设置require :false:出现

 
group :production do 
    gem 'newrelic_rpm' 
end 
0

启动时间将杀了你,所以你和我可能在同一条船上。在Jodell和黑暗城堡之间,已经有很多这方面的内容已经被覆盖了,但是这里有我帮助的几乎所有的东西,按照功效的降序排列。

  1. 获得补丁1.9.3 2.0的文件系统改进backported。第一个获得2个更好的数字,但我使用的是第二,因为我觉得第一是不稳定的
  2. 设置您的GC选项
  3. 关闭收集覆盖数据(我的IDE一直在做这个)志愿者
  4. 运行叉勺,和set SPEC_OPTS=--drb
  5. 关闭病毒扫描程序(实际上并没有做到这一点,只有不足10%,我反正)
  6. 仔细检查你的宝石,延缓与需要宝石的负荷:假

6实际上并没有给我买太多东西。我们错误的最大问题是无条件加载Thin(其中包含安装21兆字节的Eventmachine),但堆栈中的下3个实际上被RSpec使用。我没有看过网络流量,但Jodell可能正在那里。