2012-08-05 159 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可能正在那裏。