Cet article est l'article du 23ème jour du Calendrier de l'Avent Python Partie 2 2015.
Pour mesurer la couverture des tests unitaires avec Django, il est standard d'utiliser django-nose.
Si vous cherchez un peu comment le configurer, beaucoup d'informations sortiront, donc je ne les republierai pas ici. En ce qui concerne les articles sur Qiita, les articles suivants sont toujours valables même maintenant lorsque Django 1.9 est sorti.
Essayez de configurer cette application Django minimale pour utiliser django-nose
pour la couverture. Je vais le mesurer.
$ ./manage.py test sample --with-coverage --cover-package=sample --cover-html
nosetests sample --with-coverage --cover-package=sample --cover-html --verbosity=1
Creating test database for alias 'default'...
.
Name Stmts Miss Cover Missing
--------------------------------------------------
sample.py 0 0 100%
sample/settings.py 21 9 57% 58, 76, 112-130
sample/urls.py 4 0 100%
sample/views.py 5 0 100%
--------------------------------------------------
TOTAL 30 9 70%
----------------------------------------------------------------------
Ran 1 test in 0.011s
OK
Destroying test database for alias 'default'...
Dans la plupart des cas, vous devriez être d'accord avec django-nose, mais pour le moment la dernière version de django-nose == 1.4.2
[n'a pas rattrapé les nouvelles fonctionnalités de Django 1.8](https: // Je suis curieux de connaître github.com/django-nose/django-nose/issues/244).
De plus, les avantages de django-nose sont devenus moins visibles, sauf qu'il est plus facile de produire une couverture, donc je suis de plus en plus motivé à utiliser le testeur standard de Django.
Selon Publier ce stackoverflow, Coverage.py Il semble que vous puissiez également mesurer la couverture en utilisant pypi / coverage) directement, alors je l'ai essayé moi-même.
Dans l'exemple d'application Django ci-dessus, ce sera cette révision.
Exécutez le test tout en mesurant la couverture.
$ coverage run --source=sample --omit='*/tests/*' manage.py test sample
Rapport de couverture de sortie.
$ coverage report
Name Stmts Miss Cover
----------------------------------------
sample/__init__.py 0 0 100%
sample/settings.py 20 0 100%
sample/urls.py 4 0 100%
sample/views.py 5 0 100%
sample/wsgi.py 4 4 0%
----------------------------------------
TOTAL 33 4 88%
Afficher le rapport de couverture en HTML dans le répertoire «cover».
$ coverage html --directory=cover
Étant donné que la fonction de mesure de couverture de django-nose n'enveloppe que Coverage.py, la sortie du rapport sur la console et le rapport HTML sont presque identiques.
Si vous définissez .coveragerc
dans le répertoire de travail, vous pouvez omettre les options de la commande ci-dessus.
[run]
omit = */tests/*
[html]
directory = cover
Exemple d'exécution.
$ coverage run --source=sample manage.py test sample
$ coverage report
$ coverage html
Voir la documentation pour .coveragerc
.
J'ai présenté un exemple de mesure de la couverture avec Coverage.py au lieu de django-nose.
Il ne fait aucun doute que c'est pratique car django-nose peut faire ce que vous ne pouvez pas faire sans exécuter la commande trois fois sans django-nose, mais si vous l'automatisez bien avec CI, Coverage.py seul Le faire est également une option.
Recommended Posts