Dieser Artikel ist der Artikel zum 23. Tag von Python Part 2 Adventskalender 2015.
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'...
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
.
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