2009-06-02 6 views
22

Lors du développement d'une application Grails 1.0.5, je suis horrifiée de la lenteur de la commande grails test-app. Même si les tests réels prennent seulement à 10 secondes, l'exécution entière ajoute àComment accélérer l'exécution du test de grails

réel 1m26.953s utilisateur de sys 0m1.860s

Cela inclut Grails bootstrapping, le chargement des extensions , compilation de tout le code, etc.

Des conseils sur la façon d'accélérer l'exécution de grails test-app seraient grandement appréciés.

Répondre

35

Vous pouvez utiliser le mode interactif pour accélérer vos tests.

Il suffit de lancer

grails interactive 

Ensuite, tapez

test-app 

La première fois sera la même que d'habitude, mais chaque fois après cela sera beaucoup plus rapide. Il y a actuellement quelques problèmes avec le mode interactif (comme manquer de mémoire après quelques passages) mais je trouve toujours que ça en vaut la peine.

+0

Brillant! Je vous remercie. –

+6

Je vous recommande simplement de définir plus généreusement votre espace permgen ou vous allez vous retrouver au bout d'une douzaine de cycles. Voici ce que j'utilise: -XX: PermSize = 64m -XX: MaxPermSize = 512m – Kuukage

+1

Nous exécutons notre projet Grails via Maven, dans ce cas la première commande est: mvn grails: exec -Dcommand = "interactive". –

1

Si vous utilisez encore 1.5.x Groovy vous pourriez probablement raser quelques secondes par la mise à niveau Groovy 1.6

+0

Merci pour la réponse. Je ne vais pas faire ce mouvement, car je ne sais pas comment Grails 1.0.x fonctionnera avec 1.6.x et 1.5.x est le bundled. –

6

Il n'y a pas de règles strictes et rapides pour l'accélérer, et les problèmes de performance vous voyez pourrait être spécifique à votre application.

Si votre amorçage prend ~ 75 secondes, cela semble assez long. Je regarderais de près tout ce que vous avez dans votre fichier Bootstrap.groovy pour voir si cela peut être réduit.

Avez-vous des plugins supplémentaires dont vous n'avez pas besoin (ou qui pourraient avoir une pénalité de performance majeure)?

Cela pourrait ne pas être une possibilité pour vous en ce moment, mais les améliorations de vitesse dans les grails 1.1.1/groovy 1.6.3 sur les grails 1.0.5/groovy 1.5.7 sont assez importantes.

Une autre chose qui me aide vraiment lors du test, est de spécifier des tests uniquement d'intégration ou seulement des tests unitaires si je suis workiing sur l'un ou l'autre:

grails test-app -unit 

grails test-app -integration 

Vous pouvez également spécifier une classe de test particulier (sans le préfixe "tests"), pour exécuter un seul test qui peut vraiment aider à TDD (ex pour "MyServiceTests" intégration):

grails test-app -integration MyService 

Dans Grails 1.1.1, avec 5 bootstrapping plugins et ~ 40 classes de domaine me prend moins de 20 secondes.

+0

Merci pour les suggestions - Je voudrais ajouter que c'est aussi mon matériel de développement lent. Le passage aux grails 1.6.3 coupe juste 5%. –

+1

@Robert Vous devez dire groovy 1.6.3. –

1

grails vient maintenant avec http://grails.org/plugin/testing installé. cela se moque de la substance du domaine, de sorte que vous pouvez faire des tests de classes de domaine comme tests unité. ils courent assez vite.

1

Vous pouvez choisir d'exécuter des tests unitaires et d'intégration en parallèle ainsi - voir cette article

1

L'augmentation des options de mémoire Java/JVM peut certainement accélérer les choses. La quantité de mémoire que vous pouvez donner dépend de votre équipement.

Si vous exécutez des grails à partir de la ligne de commande, définissez la variable d'environnement GRAILS_OPTS. Ajouter quelque chose comme ça à ~/.bash_profile

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

Si vous utilisez GGTS (Eclipse), vous devez ajouter ce aux arguments VM de la configuration de l'exécution. GGTS vm args

Il y a aussi quelques paramètres JVM qui peuvent être modifiés pour augmenter la vitesse:

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