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
4

3 回答 3

6

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

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

祝你好运!

于 2012-08-11T16:16:05.787 回答
2

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

组:生产做
  宝石'newrelic_rpm'
结尾
于 2012-08-14T02:40:47.210 回答
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 延迟宝石的加载

6实际上并没有给我买太多。我们最大的错误是无条件加载 Thin(它会拉入 Eventmachine,安装了 21 兆字节),但堆栈中的下 3 个实际上被 RSpec 使用。我没有看过网络流量,但 Jodell 可能正在那里做些什么。

于 2012-10-12T18:02:41.997 回答