2012-08-05 32 views
11

Sau khi chạy một số thử nghiệm, tôi tin chắc rằng đã xảy ra sự cố với thiết lập của tôi (windows, rubymine và các phiên bản ruby ​​mới nhất). Giờ hiện tại của tôi là:Thử nghiệm Rake chạy rất chậm

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 

Với 5 kiểm tra dễ dàng (chỉ kiểm tra xem xác thực trên các trường trống). Tổng thời gian cho 5 bài kiểm tra đơn vị này là 160 giây, hơn 2 phút.

Tôi có thể làm gì để cải thiện tốc độ này?

Dưới đây là các bài kiểm tra:

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

Mua máy nhanh hơn? Không thành thật - không có kiến ​​thức sâu hơn về các bài kiểm tra của bạn thật khó để nói. – iltempo

+0

Đã thêm các bài kiểm tra – Organiccat

+1

Bây giờ tôi rất ấn tượng về sự chậm chạp. Bạn thậm chí không nhấn vào cơ sở dữ liệu. Có thể tải môi trường Rails mất rất nhiều thời gian. 'Rake -vT' hoạt động trong bao lâu? – iltempo

Trả lời

6

Vấn đề của bạn là Windows. Chúng tôi sử dụng JRuby trên Windows và nó thực sự chạy nhanh hơn RubyInstaller (mingw) ruby ​​trên Windows nhưng chúng tôi thấy kết quả rất chậm khi chạy các bộ thử nghiệm hoặc bắt đầu một máy chủ đường ray. Khoảng 1 phút cho một lần chạy thử nghiệm do tải môi trường Rails. Bạn có một vài lựa chọn:

  1. Chuyển đến Linux/OSX
  2. Sử dụng Spork để giữ một vài đường ray môi trường được nạp sẵn cho các bài kiểm tra của bạn. Lưu ý rằng điều này không hoàn hảo nhưng nó sẽ giảm đáng kể thời gian của bạn. Với tùy chọn này, bạn có thể muốn sử dụng minitest hoặc rspec, tôi gặp khó khăn khi lấy spork để làm việc trên Windows với testunit. Với spork bạn sẽ có thể có được thời gian chạy thử nghiệm duy nhất của bạn xuống còn khoảng 10 giây.
  3. Viết bao nhiêu thử nghiệm của bạn để chạy bên ngoài Rails, nói cách khác là không yêu cầu ngăn xếp Rails. Điều này sẽ rất nhanh, bạn sẽ có thể chạy thử nghiệm chỉ trong vài giây nhưng như bạn có thể đoán, thật khó để kiểm tra rất nhiều thứ (bộ điều khiển, khung nhìn) bên ngoài đường ray. Hoạt động hoàn hảo mặc dù cho các chức năng bạn đã chia thành các mô-đun đã không yêu cầu bất cứ điều gì từ đường ray.

Chúc may mắn!

+0

Cảm ơn nhận xét. Tôi đã không nhận thức được khi ban đầu đi vào nó mà đường ray chạy rất nặng trên Windows. Tôi tưởng tượng môi trường Mac dựa trên Unix cho phép nó chạy nhanh hơn? Tôi đã quyết định từ bỏ RoR cho đến khi tôi có quyền truy cập vào một cỗ máy cho phép tôi chạy đúng đường ray. Tôi đoán đây sẽ là lý do chính khiến đường ray không phổ biến hơn (theo ý kiến ​​cá nhân của tôi). – Organiccat

+0

Có, Rails và rất nhiều loại ngôn ngữ kịch bản cho vấn đề đó được viết cho các môi trường * nix, vì vậy có, Mac sẽ hoạt động tốt. Windows giống như một suy nghĩ và đặc biệt là với Rails nó là chậm hơn đáng kể. Bạn sẽ tiết kiệm được rất nhiều thời gian nếu bạn bắt đầu và gắn bó với môi trường mà hầu hết các công việc của Rails được thực hiện. –

+0

Tôi đã tạo một máy ảo (virtualbox) và đã cài đặt Linux trên đó. Thời gian thử nghiệm là xuống đến (một vẫn không terribly tuyệt vời) 11 giây từ 32 giây. Tôi có thể thấy mặc dù đó chỉ là về tất cả mọi thứ ruby ​​chạy nhanh hơn trong linux ngay cả khi được thực hiện từ mô phỏng phần mềm. – Pynner

2

Phần còn lại của ngăn xếp đá quý của bạn là gì? Đôi khi đá quý của bên thứ ba được khởi tạo bằng đường ray và sẽ cố gắng gọi điện thoại cho nhà (New Relic, Airbrake) có thể làm tăng thời gian thử nghiệm của bạn (mặc dù có thể không phải do điều này nhiều). Nếu có gì không đúng yêu cầu cho bộ kiểm tra của bạn, bạn nên cố gắng kéo nó vào nhóm env thích hợp, hoặc thiết lập require :false qua bundler:

 
group :production do 
    gem 'newrelic_rpm' 
end 
0

thời gian Startup dường như giết chết bạn, vì vậy bạn và tôi có lẽ trong cùng một chiếc thuyền. Giữa Jodell và Dark Castle, rất nhiều điều này đã được đề cập đến, nhưng đây là danh sách gần như toàn bộ những thứ giúp tôi, theo thứ tự giảm dần về hiệu quả.

  1. Nhận bản vá 1.9.3 với các cải tiến hệ thống tệp 2.0 được nhập lại.Là người đầu tiên được 2x số tốt hơn nhưng tôi đang sử dụng thứ hai bởi vì tôi cảm thấy đầu tiên là ổn định
  2. Đặt tùy chọn GC của bạn
  3. Tắt dữ liệu thu thập bảo hiểm (My IDE giữ tình nguyện này)
  4. Run Spork, và set SPEC_OPTS=--drb
  5. Tắt trình quét virus (không thực sự làm được điều này, nó chỉ có giá trị 10% cho tôi anyway)
  6. Kiểm tra Gems của bạn, kéo dài thời gian tải của đá quý với yêu cầu: false

6 thực sự không mua cho tôi nhiều lắm. Điều quan trọng nhất mà chúng tôi gặp phải là tải Thin vô điều kiện (mà kéo trong Eventmachine, mà 21 MB được cài đặt), nhưng 3 tiếp theo trên stack đã thực sự được sử dụng bởi RSpec. Tôi đã không xem xét lưu lượng mạng, nhưng Jodell có lẽ đang ở trên một cái gì đó ở đó.

Các vấn đề liên quan