[PYTHON] Mesurer la couverture des applications Django avec Coverage.py

Cet article est l'article du 23ème jour du Calendrier de l'Avent Python Partie 2 2015.

Mesurer la couverture avec Django

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'...

Mesurez la couverture avec Coverage.py

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.

finalement

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

Mesurer la couverture des applications Django avec Coverage.py
Créer une application Web avec Django
Déployer l'application Django avec Docker
Application de publication sur Twitter réalisée avec Django
Créer une application Web avec Django
Développement d'applications à l'aide de SQLite avec Django (PTVS)
J'ai fait une application WEB avec Django
Internationalisation avec Django
CRUD avec Django
[Note] Mesurer la couverture lors de l'exécution d'un test unitaire de Django
Créez une application Hello World avec un seul fichier avec django
Authentifier Google avec Django
Django 1.11 a démarré avec Python3.6
Télécharger des fichiers avec Django
Procédure de création d'une application avec Django avec Pycharm ~ Préparation ~
Résumé du développement avec Django
Sortie PDF avec Django
Sortie Markdown avec Django
Utiliser Gentelella avec Django
Twitter OAuth avec Django
Premiers pas avec Django 1
Envoyer des e-mails avec Django
Application Web réalisée avec Python3.4 + Django (Construction de l'environnement Part.1)
Téléchargement de fichiers avec django
Utilisez LESS avec Django
Authentification unique à l'application Django avec AWS SSO
La mutualisation mécanise avec Django
Un mémo sur la création d'une application Django (Python) avec Docker
Utiliser MySQL avec Django
Django à partir d'aujourd'hui
Premiers pas avec Django 2
Déployer l'application Django sur EC2 avec Nginx + Gunicorn + Supervisor
Lancez-vous avec Django! ~ Tutoriel ⑤ ~
Créer une API avec Django
Vérifiez la couverture de python avec pytest-cov
Faites Django avec CodeStar (Python3.8, Django2.1.15)
Déployer Django sans serveur avec Lambda
Python3 + Django ~ Mac ~ avec Apache
Premiers pas avec Python Django (1)
Développement d'applications Web avec Flask
Créer une page d'accueil avec django
Application WebSocket avec Flask-Socket IO
Lancez-vous avec Django! ~ Tutoriel ④ ~
Mesurer la vitesse WiFi avec Python
Premiers pas avec Python Django (4)
Premiers pas avec Python Django (3)
Combinez Fast API avec Django ORM
Lancez-vous avec Django! ~ Tutoriel ⑥ ~
Utilisez Django pour enregistrer les données de tweet
Effectuer le cryptage AES avec DJango
Voir la couverture du flacon avec pytest-cov
Introduction à Python Django (6)
Renommer une application Django existante
Combinez deux images avec Django
Premiers pas avec Django avec PyCharm
Application Web avec Python + Flask ② ③
Web en temps réel avec les chaînes Django
Suppression de double envoi avec Django
Framework Django REST avec Vue.js
Utilisez prefetch_related commodément avec Django
Premiers pas avec Python Django (5)