2010-04-05 24 views
8

Ist es normal, dass meine Testsuite nur 5 Sekunden benötigt, um zu starten? Selbst wenn eine leere Suite läuft, dauert es noch so lange. Liegt es daran, dass bei jedem Lauf eine neue Instanz von Schienen ausgelöst wird? Wenn ja, gibt es sie trotzdem persistent?Warum sind meine Schienen so langsam?

Beispiel:

[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 

Wie Sie sehen können, wird dieser leere Test ist wirklich schnell, aber es gibt immer noch 4 Sekunden von Overhead aus irgendeinem Grund. Ich verwende Test :: Unit mit Shoulda.

+0

Können Sie die Ausgabe von "Time Rake Test: Einheiten - Trace" –

Antwort

11

Testgeschwindigkeits-Engpass ist die Zeit, die Rails benötigt, um seine Umgebung zu laden. Führen Sie script/console aus und sehen Sie, wie lange es dauert, Sie in Ihre Umgebung zu laden ... es sollte dasselbe sein.

One Sie haben eine große Codebase mit vielen Plugins & Edelsteine, Ladezeit kann so hoch wie 1 Minute sein !! Wenn Sie wie ich sind & Stoppen Sie Tests b/c Sie sind satt, 30 Sekunden zu warten, nur um eine kleine Änderung zu testen, müssen Sie einen Testserver wie spec_server oder noch besser: spork!

Sie werden feststellen, dass es seltsame Probleme beim Klassencaching mit spec_server geben kann, weshalb ich Spork bevorzuge.

+0

Danke, ich denke, es war wirklich nur die Rails-Umgebung geladen. Ich bin mit Spork zu Rspec gewechselt und es ist ein bisschen besser. – ryeguy

+0

versuchen Sie, die Edelsteine ​​zu laden, aber nicht sofort. Stattdessen erfordern sie, wenn sie verwendet werden, und die Umgebung wird viel schneller geladen. In Rails 3 Gemfile sieht das etwa so aus: gem 'some_gem_name',: lib => nil –

0

Wie lange läuft Ihr Test? Normalerweise dauern Rails-Tests aufgrund des Datenbankzugriffs lange. Zur Beschleunigung ihnen als anfänglicher Besserung konnte man:

  1. Anschlag mit instanziiert Vorrichtungen durch Setzen:

    self.use_instantiated_fixtures = false

  2. Start mit Transaktions Leuchten, indem:

    Selbst .use_transactional_fixtures = true

Um die Testleistung noch zu verbessern, denken Sie bitte daran, preloaded fixtures zu verwenden.

+0

Die Zeit, die die Tests tatsächlich * run * nehmen, ist vernachlässigbar. Ich habe gerade nur eine Suite, aber das Problem ist, selbst wenn ich keine Tests habe, dauert es immer noch 5 Sekunden. Wenn ich meine Suite betreibe, sind es vielleicht 5,1 Sekunden. Ich versuche nur herauszufinden, ob es so lange dauern sollte, um Bootstrap zu machen. Macht es für dich? – ryeguy

+0

klar das Plakat hat dieses Problem nicht. –

1

Ich hatte das gleiche Problem und ich löste es durch die Installation von Ruby Entreprise Edition (REE). Ich weiß nicht warum, aber das Laden der Rails-Umgebung dauerte 4-5 Sekunden unter meinem Rubin 1.9.2, vs 1-2 Sekunden mit REE.

Ich habe es mit RVM installiert.