Dies ist eine Fortsetzung von Artikel CI CI für Python-Treiber zur Überwachung des DIY-Solarstromerzeugungssystems, diesmal Python-Code-Abdeckung (Testcover) Rate) wird gemessen.
Es ist mühsam, jedes Mal den folgenden Testläufercode zu schreiben. Installieren Sie daher das Nasenpaket und verwenden Sie den Befehl nosetests.
import unittest
if __name__ == "__main__":
all_tests = unittest.TestLoader().discover("./", "test_*.py")
unittest.TextTestRunner(verbosity=1).run(all_tests)
nosetests ist ein Befehl, der von pip verwendet werden kann, um das Nasenpaket zu installieren.
Wie Sie unter So finden Sie Testfälle für Nosetests sehen können, scheint es, dass es derzeit Unterklassen von unittest.TestCase sammelt und ausführt. ..
tsmppt60_driver $ nosetests -v
test_init (test_base_controller.TestChargeControllerStatus) ... ok
test_compute_scaler_current (test_base_management.TestMb) ... ok
test_compute_scaler_voltage (test_base_management.TestMb) ... ok
----------------------------------------------------------------------
Ran 3 tests in 0.230s
OK
Schreiben Sie Folgendes in die Testsuite von setup.py, lassen Sie die Nase die Testsuite sammeln und testen Sie sie über setup.py Es ist auch möglich auszuführen.
setup (
# ...
test_suite='nose.collector'
)
$ python setup.py test
Fügen Sie zum Messen der Abdeckung die folgende Option --mit Abdeckung hinzu.
tsmppt60_driver $ nosetests -h | grep coverage
--with-coverage Enable plugin Coverage: Activate a coverage report
tsmppt60_driver $ nosetests -v --with-coverage
test_init (test_base_controller.TestChargeControllerStatus) ... ok
test_compute_scaler_current (test_base_management.TestMb) ... ok
test_compute_scaler_voltage (test_base_management.TestMb) ... ok
Name Stmts Miss Cover Missing
----------------------------------------------------------------------------------------
minimock.py 197 79 60% 51-57, 63-66, 108-109, 113, 229, 231-232, 237-238, 241-242, 258, 264-265, 290, 294, 297, 300, 325, 335-341, 364, 388-393, 408, 417-418, 455-465, 479-487, 493, 506, 517, 526, 528, 530-533, 537, 540-548, 551-565, 643-644
...
Die Ergebnisse der Abdeckungsmessung werden in einer .coverage-Datei unter demselben Verzeichnis aufgezeichnet.
tsmppt60_driver $ cat .coverage | head
!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/
Generieren Sie einen Abdeckungsbericht mit dem Abdeckungspaket und den Befehlen. Wenn Sie die Hilfe installieren und anzeigen, sehen Sie, dass die folgenden Unterbefehle vorbereitet sind.
$ pip install coverage
$ coverage --help
Coverage.py, version 4.0.3
Measure, collect, and report on code coverage in Python programs.
usage: coverage <command> [options] [args]
Commands:
annotate Annotate source files with execution information.
combine Combine a number of data files.
erase Erase previously collected coverage data.
help Get help on using coverage.py.
html Create an HTML report.
report Report coverage stats on modules.
run Run a Python program and measure code execution.
xml Create an XML report of coverage results.
Sie können die .coverage-Datei lesen, in der die Ergebnisse der Coverage-Messung aufgezeichnet sind, und den Bericht anzeigen.
Beachten Sie, dass, wenn Sie die Zielmodule nicht mit der Option --include eingrenzen, auch andere abhängige Module als das Testziel zusammen gemeldet werden, was kompliziert ist.
tsmppt60_driver $ coverage report --include=tsmppt60_driver/*
Name Stmts Miss Cover
-------------------------------------------------
tsmppt60_driver/__init__.py 28 16 43%
tsmppt60_driver/base.py 117 51 56%
tsmppt60_driver/status.py 60 37 38%
-------------------------------------------------
TOTAL 205 104 49%
Sie können auch einen Bericht im HTML-Format erstellen, mit dem Sie visuell sehen können, welche Pfade in Ihrem Code abgedeckt sind und welche nicht.
tsmppt60_driver $ coverage html --include=tsmppt60_driver/*
tsmppt60_driver $ open htmlcov/index.html
Es ist so.
Die Einführung ist lang geworden, aber das Hauptthema ist von hier.
Verwenden Sie Overalls, mit dem Sie problemlos mit [TravisCI, das zuletzt eingeführt wurde] arbeiten können (http://blog.rinka-blossom.com/githubnipushji-minopythonkodowocisitemita/).
Wenn .travis.yml bereits festgelegt wurde, wäre dies wie folgt gewesen:
language: python
python:
- "2.7"
# - "3.2"
# TODO:
# dest.write(u' ')
# ^
# SyntaxError: invalid syntax
- "3.3"
- "3.4"
- "3.5"
# does not have headers provided, please ask https://launchpad.net/~pypy/+archive/ppa
# maintainers to fix their pypy-dev package.
- "pypy"
# command to install dependencies
install:
- pip install .
- pip install -r requirements.txt -r test-requirements.txt
Fügen Sie Folgendes hinzu:
script:
- coverage run --source=tsmppt60_driver setup.py test
after_success:
- coveralls
Fügen Sie test-require.txt Folgendes hinzu.
nose
coverage
coveralls
Meistens folge ich einfach der README von coveralls-python.
Jedes Mal, wenn Sie in das Github-Repository wechseln, führt TravisCI den Test automatisch aus und Overalls messen automatisch die Abdeckung.
Springen Sie in Overalls REPOS nach dem Messen der Abdeckung zum Link des Ziel-Repositorys, und auf dem Bildschirm wird der Link "ABZEICHEN IHRES REPO: TSMPPT60_DRIVER" angezeigt, sodass Sie dort die URL des Abzeichens abrufen können.
Das MARKDOWN-Format und andere Formate sind verfügbar. Kopieren Sie sie daher entsprechend Ihrer Umgebung und fügen Sie sie ein.
Sie können auch die folgenden Abzeichen in die README von GitHub einfügen.
Wenn Sie ein Abzeichen wie Travis CI oder Overalls in Ihre README-Datei einfügen, möchten Sie einige andere Informationen mit einem ähnlichen Abzeichen anzeigen. richtig?
Daher gibt es einen Dienst namens Shields.io.
Wie Sie dem obigen Link entnehmen können, können Sie selbst verschiedene Abzeichen in den folgenden Formaten erstellen.
https://img.shields.io/badge/<SUBJECT>-<STATUS>-<COLOR>.svg
Zum Beispiel, wenn Sie Folgendes tun
https://img.shields.io/badge/python-3.3,3.4,3.5-blue.svg
Es wird wie folgt angezeigt.
Es macht nicht viel Sinn, aber Sie können ein solches Abzeichen machen.
Recommended Posts