2009-06-02 14 views
22

Während der Entwicklung einer Grails 1.0.5 App bin ich entsetzt, wie langsam der grails test-app Befehl ist. Auch wenn die eigentlichen Tests nur nehmen und 10 Sekunden, fügt die gesamte Ausführung bis zuWie Grails Testausführung zu beschleunigen

echten 1m26.953s Benutzern 0m53.955s sys 0m1.860s

Dazu gehört Grails Bootstrapping, das Laden von Plugins , kompilieren den ganzen Code, usw.

Irgendwelche Hinweise, wie man die grails test-app Ausführung beschleunigt, würde sehr geschätzt werden.

Antwort

35

Sie können den interaktiven Modus verwenden, um Ihre Testläufe zu beschleunigen.

Führen Sie einfach

grails interactive 

Dann

test-app 

Das erste Mal, wie immer die gleiche sein wird geben, aber jedes Mal, danach wird dramatisch schneller sein. Es gibt derzeit einige Probleme mit dem interaktiven Modus (z. B. dass nach einigen Durchläufen der Arbeitsspeicher knapp wird), aber ich finde es immer noch wert.

+0

Brilliant! Vielen Dank. –

+6

Ich empfehle nur, Ihren Permgenraum großzügiger zu gestalten oder Sie werden nach einem Dutzend Zyklen auslaufen. Dies verwende ich: -XX: PermSize = 64m -XX: MaxPermSize = 512m – Kuukage

+1

Wir laufen unser Grails-Projekt über Maven, in diesem Fall lautet der erste Befehl: mvn grails: exec -D Command = "interactive". –

1

Wenn Sie sich immer noch mit Groovy 1.5.x könnten Sie wahrscheinlich ein paar Sekunden rasieren durch ein Upgrade 1.6

+0

Danke für die Antwort. Ich werde diesen Schritt nicht machen, da ich nicht sicher bin, wie Grails 1.0.x mit 1.6.x und 1.5.x funktioniert. –

6

Es gibt keine festen Regeln für die Beschleunigung es Groovy auf, und die Leistungsprobleme, die Sie sehen, dass sie spezifisch für Ihre App sind.

Wenn das Bootstrapping ~ 75 Sekunden dauert, klingt das ziemlich lang. Ich würde mir genau ansehen, was Sie in Ihrer Bootstrap.groovy-Datei haben, um zu sehen, ob das abgespeckt werden kann.

Haben Sie zusätzliche Plugins, die Sie möglicherweise nicht benötigen (oder die eine erhebliche Leistungseinbuße haben könnten)?

Dies ist möglicherweise keine Möglichkeit für Sie jetzt, aber die Geschwindigkeit Verbesserungen in Grails 1.1.1/groovy 1.6.3 über Grails 1.0.5/groovy 1.5.7 sind ziemlich signifikant.

Eine andere Sache, die mich wirklich hilft bei der Prüfung, ist nur Integrationstests oder nur Unit-Tests an, ob ich auf die eine oder andere bin workiing:

grails test-app -unit 

grails test-app -integration 

Sie auch eine bestimmte Testklasse angeben können (ohne die "Tests" Präfix), einen einzigen Test zu laufen, die wirklich mit TDD (ex für "MyServiceTests" Integration) helfen:

grails test-app -integration MyService 

In Grails 1.1.1, Bootstrapping mit 5 Plugins und ~ 40 Domain-Klassen dauert weniger als 20 Sekunden.

+0

Danke für die Vorschläge - Ich möchte hinzufügen, dass dies meine langsame dev Hardware ist. Der Wechsel zu Grails 1.6.3 ist nur 5% abgeschnitten. –

+1

@Robert Du musst groovy 1.6.3 meinen. –

1

Grails jetzt kommt mit http://grails.org/plugin/testing installiert. Dies spottet die Domäne Zeug, so können Sie einige Tests von Domain-Klassen als Einheit Tests tun. Sie laufen ziemlich schnell.

1

Sie können wählen, wie auch Modul- und Integrationstests parallel laufen zu lassen - siehe diesen article

1

Erhöhung der Java-Speicher/JVM-Optionen können auf jeden Fall die Dinge beschleunigen. Die Menge an Speicher, die Sie geben können, hängt von Ihrer Ausrüstung ab. Wenn Sie Grails über die Befehlszeile ausführen, setzen Sie die Umgebungsvariable GRAILS_OPTS. Fügen Sie so etwas zu ~/.bash_profile

export GRAILS_OPTS="-Xms3000M -Xmx3000M -XX:PermSize=256m -XX:MaxPermSize=512m" 

Wenn Sie GGTS (Eclipse) Sie dies zu den VM Argumente der Ausführungskonfiguration hinzufügen müssen. GGTS vm args

Es gibt auch einige JVM-Einstellungen, die geändert werden kann, um die Geschwindigkeit zu erhöhen:

-XX:+UseCodeCacheFlushing 
-XX:MaxInlineLevel=15 
-noverify (turns off class validation)