2010-04-05 18 views
8

Czy to normalne, że mój zestaw testów zajmuje tylko 5 sekund, aby uruchomić? Nawet przy uruchomieniu pustego pakietu nadal trwa to długo. Czy to dlatego, że przy każdym uruchomieniu uruchamia się nowa instancja szyn? Jeśli tak, czy mimo to jest to trwałe?Dlaczego moje testy szyn są tak powolne?

Przykład:

[email protected]:~/projects/rails/my_project$ time rake test 
/usr/bin/ruby1.9.1 -I"lib:test" "/var/lib/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/release_test.rb" 
Loaded suite /var/lib/gems/1.9.1/gems/rake-0.8.7/lib/rake/rake_test_loader 
Started 

Finished in 0.000181867 seconds. 

0 tests, 0 assertions, 0 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications 
0% passed 

real 0m4.173s 
user 0m3.820s 
sys 0m0.288s 

Jak widać, ten pusty Test jest bardzo szybki, ale nie ma jeszcze 4 sekundy napowietrznych z jakiegoś powodu. Używam Test :: Unit with Shoulda.

+0

Czy możesz opublikować wynik "time rake test: units --trace" –

Odpowiedz

11

"Wąskie gardło prędkości testowej" to czas, w którym Rails ładuje swoje środowisko. Uruchom skrypt/konsolę i sprawdź, ile czasu zajmie Ci załadowanie do twojego środowiska ... powinno być takie samo.

Jeden masz wystarczająco dużo kodu z wieloma wtyczkami & klejnoty, czas ładowania może wynosić nawet 1 minutę !! Jeśli jesteś taki jak ja & przestań wykonywać testy b/c masz dość czekania 30 sekund na testowanie małej zmiany, musisz uruchomić serwer testowy, taki jak spec_server, lub jeszcze lepiej: spork!

Przekonasz się, że mogą występować dziwne problemy związane z buforowaniem klas z serwerem spec_server, dlatego wolę spork.

+0

Dzięki, myślę, że to naprawdę było ładowanie środowiska Rails. Przełączyłem się na Rspec ze Sporkiem i jest trochę lepiej. – ryeguy

+0

spróbuj załadować klejnoty, ale nie wymagaj ich od razu. Zamiast tego wymagają ich, gdy są używane, a środowisko ładuje się znacznie szybciej. W Gemfile z Rails 3 wygląda to tak: gem 'some_gem_name',: lib => zero –

0

Jak długo trwa test? Zwykle testy Railsów trwają długo z powodu dostępu do bazy danych. Aby przyspieszyć je jako początkową poprawę możesz:

  1. zaprzestać używania instancja urządzeń poprzez ustawienie:

    self.use_instantiated_fixtures = false

  2. początek użyciu urządzeń transakcyjnych poprzez ustawienie:

    siebie .use_transactional_fixtures = true

Aby jeszcze bardziej zwiększyć wydajność testów, rozważ użycie opcji preloaded fixtures.

+0

Czas, przez jaki testy są faktycznie * uruchomione *, jest nieistotny. Mam tylko jeden pakiet w tej chwili, ale problem jest nawet wtedy, gdy NIE mam testów, trwa to jeszcze 5 sekund. Kiedy uruchamiam mój pakiet, może to być 5,1 sekundy. Próbuję tylko dowiedzieć się, czy to ma potrwać tak długo do bootstrap. Czy to dla ciebie? – ryeguy

+0

Wyraźnie plakat nie ma tego problemu. –

1

Miałem ten sam problem i rozwiązałem go, instalując edycję Ruby Entreprise (REE). Nie wiem dlaczego, ale ładowanie środowiska szynowego zajęło 4-5 sekund pod moim rubinem 1.9.2, a 1-2 sekundy z REE.

Zainstalowałem go za pomocą RVM.

Powiązane problemy