Django unité de test sans créer de base de données de test à chaque fois que je lance
Semble que "manage.py test" crée de la base de données de test à chaque fois que je lance le test. Est-il un moyen pour empêcher la création de base de données de test à chaque fois que je lance le test, mais juste tronquer les données (flush)?
Mes tables sont presque sur 40 tables (même pour une seule application, et non l'ensemble du projet), et me rend malade à chaque fois que j'ai lancer le test.
OriginalL'auteur CIF | 2011-08-25
Vous devez vous connecter pour publier un commentaire.
Selon vos besoins, vous avez un peu de choix:
Vous pourriez écrire un test personnalisé coureur ou d'ajuster la valeur par défaut: https://docs.djangoproject.com/en/1.6/topics/testing/advanced/#other-testing-frameworks
Vous pouvez utiliser SimpleTestCase
Il y a aussi des add-ons comme django-test-utils (bien que je ne sais pas si spécifique que l'on travaille avec moderne Django versions).
Sinon, pour accélérer le tout, vous pouvez utiliser SQLite en mémoire de la base de données OU créer votre base de données de test dans le disque RAM (comme tmpfs ou ramfs) - en fait, c'est orthogonale à l'aide d'autres techniques.
OriginalL'auteur Tomasz Zielinski
De Django 1.8 vous pouvez utiliser l'option --keepdb du pavillon, lors de l'appel de la manage.py
De sorte que votre appel pourrait ressembler à ce qui suit:
Ou en utilisant le raccourci -k il pourrait ressembler à ça:
Même avec keepdb, django insiste sur l'exécution des migrations de tous les temps
le test de la base de données n'existe pas, il sera créé lors de la première exécution, puis conservées pour chaque run. Tout non imputées migrations sera également appliqué à la base de données de test avant de lancer la suite de tests. django-docs
Mais oui, les migrations sera appliqué à chaque fois que vous exécutez les tests (voir la django-source pour référence). Toutefois, l'exécution de tous les tests avec un plus haut niveau de verbosité mode (
python manage.py test -k --verbosity 2
), vous verrez les migrations ne sont pas vérifiés, mais ne pas réappliquer si elles ont été appliquées avant et n'ont pas été modifiées entre les deux séries de tests.OriginalL'auteur Kim
django-nez prend en charge la réutilisation de la base de données:
https://github.com/django-nose/django-nose#enabling-database-reuse
Cependant, assurez-vous de lire les commentaires:
OriginalL'auteur benjaoming
La solution suivante permettra également de réduire la db moment de la création si il y a plus de nombre de migrations sud. Pendant le test unitaire, l'exécution de syncdb au lieu de courir tout le sud des migrations sera beaucoup plus rapide.
OriginalL'auteur venkat
Je devine que ce n'est pas le plus pratique, mais quelque chose que j'ai fait, comme une solution de contournement consiste à créer quelques-uns des différents programmes de test dans la gestion/commandes répertoire au sein de l'application.
https://docs.djangoproject.com/en/1.7/howto/custom-management-commands/
Par exemple, je travaille sur une application qui nécessite un niveau Postgres fonctionnalité (ne peut pas utiliser Sqlite) donc au lieu de créer des fonctions de test dans le cadre de tests.py j'ai créé test_process.py dans myapp/gestion/commande/
OriginalL'auteur Joe Fusaro
Vous voudrez peut-être avoir
pytest
en tant que testeur. Exemple de Configuration de la façon suivante.Échantillon
pytest.ini
fichier:Échantillon
runtests.py
fichier:Échantillon
requirements.txt
fichier:Exécuter les tests:
Note, cet effet est obtenu grâce à
reuse-db
etnomigrations
directives.OriginalL'auteur Artur Barseghyan