Messen Sie die Testabdeckung von Push-Python-Code auf GitHub.

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.

Messen Sie die Abdeckung in der Befehlszeile

Führen Sie zuerst den Test aus

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

Messung der Testabdeckung

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/

Erstellung eines Testabdeckungsberichts

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.

Messen Sie die Abdeckung automatisch mithilfe von Webdiensten

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.

Anzeige des Abzeichens

Ergebnisabzeichen für Overalls

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.

Coverage Status

Verschiedene Abzeichen

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.

python

Es macht nicht viel Sinn, aber Sie können ein solches Abzeichen machen.

hoge hoge hoge

Recommended Posts

Messen Sie die Testabdeckung von Push-Python-Code auf GitHub.
Probieren Sie CI den Push-Python-Code auf GitHub aus.
Lassen Sie uns die Grundlagen des Python-Codes von TensorFlow aufschlüsseln
Lassen Sie uns den Code des in Python [VS Code] geschriebenen automatischen E2E-Tests statisch überprüfen und formatieren.
Fassen wir den Grad der Kopplung zwischen Modulen mit Python-Code zusammen
[Python3] Schreiben Sie das Codeobjekt der Funktion neu
[Python] Ruft den Zeichencode der Datei ab
python setup.py testet den Code mit Multiprocess
[Python] Lesen Sie den Quellcode von Flasche Teil 2
[Python] Testen Sie die Mondmatagi des relativen Deltas
[Python] Lesen Sie den Quellcode von Flasche Teil 1
Code zum Überprüfen des Betriebs von Python Matplot lib
Zum Zeitpunkt des Python-Updates mit Ubuntu
Konvertieren Sie den Zeichencode der Datei mit Python3
Automatischer Test von Pipenv + Pytest mit Github-Aktionen
Lassen Sie uns automatisch den Text des Songs anzeigen, der in Python in iTunes abgespielt wird
der Zen von Python
Holen Sie sich den Rückkehrcode eines Python-Skripts von bat
Verwenden wir die Python-Version des Confluence-API-Moduls.
Verwenden wir die offenen Daten von "Mamebus" in Python
Lassen Sie uns die medizinische Kollapshypothese des neuen Koronavirus testen
[Python] Lassen Sie uns die URL der Django-Administrator-Site ändern
Lassen Sie uns automatisch den Text des Songs anzeigen, der in iTunes in Python abgespielt wird (verbesserte Version).
Stellen Sie die neueste Version von Python in Linux (Debian) von Chromebook
Sakura Die Geschichte, wie die Python-Flasche im Internet funktioniert hat
Folgen Sie dem Geheimnis des orthografischen Pedanten, das plötzlich auf GitHub auftauchte !!
Lassen Sie uns den Befehl pünktlich mit dem Bot der Zwietracht ausführen
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Der Prozess, Python-Code objektorientiert zu machen und zu verbessern
Spielen Sie mit dem Passwortmechanismus von GitHub Webhook und Python
python3 Messen Sie die Verarbeitungsgeschwindigkeit.
Auf dem Weg zum Ruhestand von Python2
Erläutern Sie den Code von Tensorflow_in_ROS
Umgang mit Python auf Mac
2.x, 3.x Serienzeichencode von Python
Über die Funktionen von Python
Die Kraft der Pandas: Python
Zum ersten Mal veröffentlichte GitHub x Circle CI ein Textüberprüfungstool von Python
Wie ist der Fortschritt? Lassen Sie uns mit dem Boom in Python weitermachen
[Python] Ich habe die Route des Taifuns mit Folium auf die Karte geschrieben
[Python] Lassen Sie uns die Anzahl der Elemente im Ergebnis bei der Operation des Sets reduzieren
Erste Python ② Versuchen Sie, Code zu schreiben, während Sie die Funktionen von Python untersuchen
Ich habe versucht, die COTOHA-API zu verwenden (es gibt auch Code auf GitHub).
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
So aktualisieren Sie die Python-Version von Cloud Shell in GCP
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
So führen Sie den Übungscode des Buches "Profitable KI mit Python erstellen" in Google Colaboratory aus
"Cython" -Tutorial, das Python explosiv macht: Wenn C ++ - Code von der Bibliothek abhängt. Zuallererst CMake.
Werfen wir einen Blick auf den Scapy-Code. Überladung spezieller Methoden __div__, __getitem__.
Testen Sie die Version des Argparse-Moduls
[Python] Der Stolperstein des Imports
Erster Python 3 ~ Der Beginn der Wiederholung ~
AtCoder: Python: Papa der Beispieltest.
Testen Sie die Eignung der Verteilung
Existenz aus Sicht von Python
pyenv-change die Python-Version von virtualenv