2010-06-28 20 views
14

L'exécution des tests unitaires Django est loin trop lente. Surtout quand je veux juste faire un test, mais le coureur de test veut créer la base de données entière et détruire le tout juste pour ce test. Dans le cas où je n'ai modifié aucun de mes modèles, je pourrais économiser beaucoup de temps si Django ne voulait pas essayer de créer et de détruire toute la base de données, et l'enregistrer pour la prochaine fois. Mieux encore, ce serait génial si le coureur d'essai était capable de voir quels modèles avaient changé et de les remplacer seulement avant de faire des tests.Comment puis-je demander à Django de sauvegarder ma base de données de test?

Je préférerais ne pas devoir sous-classer le coureur de test moi-même, mais c'est ce que je vais devoir faire si je ne trouve pas une solution bientôt. Y a-t-il quelque chose comme ça qui existe déjà?

Répondre

8

Dans django1.8 ajouté nouveau paramètre pour manage.py test commande --keepdb

./manage.py test --keepdb 
4

Avez-vous essayé d'utiliser une base de données SQLite en mémoire pour les tests? C'est beaucoup plus rapide que d'utiliser une base de données sur disque.

+0

La dernière fois que j'ai essayé, spatialite ne jouait pas bien sur quelle que soit la version de ubuntu j'utilisais, donc j'abandonnèrent rapidement cette. Je devrais essayer encore maintenant si. –

+3

Je pense qu'il est nécessaire d'exécuter les tests sur la même base de données, que vous utilisez en live, sinon toujours, au moins avant chaque commit. –

+0

Attention: SQLite3 ne fonctionne pas actuellement en mode multithread, donc si vous avez des tests (d'intégration) qui s'appuient sur/testent un accès concurrent à la base de données, ils vous donneront du chagrin. – JohnJ

1

J'utilise Djang-nez. Si vous définissez un environnement var REUSE_DB = 1, il ne détruira pas le DB après l'exécution des tests et réutilisera ce même DB pour la prochaine exécution. Chaque fois que votre schéma change, réglez REUSE_DB = 0 et effectuez une exécution complète. Après cela réinitialiser à 1 et vous êtes prêt à partir.

https://github.com/django-nose/django-nose