[PYTHON] Messen Sie die Abdeckung der Django-Anwendung mit Coverage.py

Dieser Artikel ist der Artikel zum 23. Tag von Python Part 2 Adventskalender 2015.

Messen Sie die Abdeckung mit Django

Um die Abdeckung von Unit-Tests mit Django zu messen, wird standardmäßig [Django-Nase] verwendet (https://pypi.python.org/pypi/django-nose).

Wenn Sie ein wenig nach der Einstellung suchen, werden viele Informationen angezeigt, sodass ich sie hier nicht erneut veröffentlichen werde. Was die Artikel über Qiita betrifft, so sind die folgenden Artikel auch jetzt noch gültig, wenn Django 1.9 veröffentlicht wird.

Versuchen Sie, diese minimale Django-Anwendung so einzustellen, dass "Django-Nase" für die Abdeckung verwendet wird. Ich werde es messen.

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

Messen Sie die Abdeckung mit Coverage.py

In den meisten Fällen sollten Sie mit Django-Nase gut zurechtkommen, aber im Moment hat die neueste Version von django-Nase == 1.4.2 [die neuen Funktionen in Django 1.8 nicht eingeholt](https: // Ich bin neugierig auf github.com/django-nose/django-nose/issues/244).

Außerdem sind die Vorteile der Django-Nase weniger spürbar geworden, außer dass es einfacher ist, die Abdeckung auszugeben. Daher bin ich motivierter, den Standard-Testläufer von Django zu verwenden.

Laut Post this stackoverflow, Coverage.py Es scheint, dass Sie die Abdeckung auch direkt mit pypi / Abdeckung messen können, also habe ich es selbst versucht.

In der obigen Beispielanwendung für Django ist dies diese Überarbeitung.

Führen Sie den Test durch, während Sie die Abdeckung messen.

$ coverage run --source=sample --omit='*/tests/*' manage.py test sample

Bericht zur Ausgabeabdeckung.

$ 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%

Bericht über die Abdeckung in HTML in das Verzeichnis "cover" ausgeben.

$ coverage html --directory=cover

Da die Coverage-Messfunktion von Django-Nose nur Coverage.py umschließt, sind die Ausgabe des Berichts auf der Konsole und des HTML-Berichts nahezu identisch.

Wenn Sie ".coveragerc" im Arbeitsverzeichnis definieren, können Sie die Optionen des obigen Befehls weglassen.

[run]
omit = */tests/*

[html]
directory = cover

Ausführungsbeispiel.

$ coverage run --source=sample manage.py test sample
$ coverage report
$ coverage html

Siehe Dokumentation zu .coveragerc.

Schließlich

Ich habe ein Beispiel für die Messung der Abdeckung mit Coverage.py anstelle von Django-Nase vorgestellt.

Es besteht kein Zweifel, dass dies praktisch ist, da Django-Nose das kann, was Sie nicht können, ohne den Befehl dreimal ohne Django-Nose auszuführen. Wenn Sie ihn jedoch mit CI gut automatisieren, ist Coverage.py allein Dies ist auch eine Option.

Recommended Posts

Messen Sie die Abdeckung der Django-Anwendung mit Coverage.py
Erstellen Sie eine Webanwendung mit Django
Stellen Sie die Django-Anwendung mit Docker bereit
Twitter-Posting-Anwendung mit Django gemacht
Erstellen Sie eine Webanwendung mit Django
App-Entwicklung mit SQLite mit Django (PTVS)
Ich habe eine WEB-Bewerbung bei Django gemacht
Internationalisierung mit Django
CRUD mit Django
[Hinweis] Messen Sie die Abdeckung, wenn Sie einen Komponententest von Django durchführen
Erstellen Sie mit Django eine Hallo-Welt-Anwendung mit nur einer Datei
Authentifizieren Sie Google mit Django
Django 1.11 wurde mit Python3.6 gestartet
Laden Sie Dateien mit Django hoch
Verfahren zum Erstellen einer Anwendung mit Django mit Pycharm ~ Vorbereitung ~
Entwicklungsverdauung mit Django
PDF mit Django ausgeben
Markdown-Ausgabe mit Django
Verwenden Sie Gentelella mit Django
Twitter OAuth mit Django
Erste Schritte mit Django 1
Mail mit Django senden
Webanwendung erstellt mit Python3.4 + Django (Teil.1 Umgebungskonstruktion)
Datei-Upload mit Django
Verwenden Sie WENIGER mit Django
Einmaliges Anmelden bei der Django-Anwendung mit AWS SSO
Pooling mechanisieren mit Django
Ein Memo zum Erstellen einer Django (Python) -Anwendung mit Docker
Verwenden Sie MySQL mit Django
Django ab heute
Erste Schritte mit Django 2
Stellen Sie die Django-Anwendung auf EC2 mit Nginx + Gunicorn + Supervisor bereit
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Erstellen Sie eine API mit Django
Überprüfen Sie die Python-Abdeckung mit pytest-cov
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Stellen Sie Django serverlos mit Lambda bereit
Python3 + Django ~ Mac ~ mit Apache
Erste Schritte mit Python Django (1)
Entwicklung von Webanwendungen mit Flask
Erstellen Sie eine Homepage mit Django
WebSocket-Anwendung mit Flask-Socket IO
Fangen Sie mit Django an! ~ Tutorial ④ ~
Messen Sie die WLAN-Geschwindigkeit mit Python
Erste Schritte mit Python Django (4)
Erste Schritte mit Python Django (3)
Kombinieren Sie Fast API mit Django ORM
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Verwenden Sie Django, um Tweet-Daten zu speichern
Führen Sie eine AES-Verschlüsselung mit DJango durch
Anzeigen der Kolbenabdeckung mit pytest-cov
Einführung in Python Django (6)
Benennen Sie eine vorhandene Django-Anwendung um
Kombiniere zwei Bilder mit Django
Erste Schritte mit Django mit PyCharm
Webanwendung mit Python + Flask ② ③
Echtzeit-Web mit Django-Kanälen
Doppelte Submit-Unterdrückung mit Django
Django REST Framework mit Vue.js
Verwenden Sie prefetch_related bequem mit Django
Erste Schritte mit Python Django (5)