簡體   English   中英

耙子測試運行速度很慢

[英]Rake tests running very slow

經過一些測試后,我確信我的設置(窗口,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

你的問題是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之外測試很多東西(控制器,視圖)。 雖然對於已經分解成已經不需要任何東西的模塊的功能,但工作正常。

祝好運!

什么是你的寶石堆棧的其余部分? 有時第三方寶石由rails初始化並將嘗試打電話回家(New Relic,Airbrake),這可能會使你的測試時間膨脹(盡管可能不是這么多)。 如果您的測試套件沒有嚴格要求的東西,您應該嘗試將其拉入正確的env組,或通過bundler設置require :false

group :production do
  gem 'newrelic_rpm'
end

啟動時間似乎在扼殺你,所以你和我可能在同一條船上。 在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可能正在那里。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM