Mesurez la couverture de test du code python poussé sur GitHub.

Ceci est une suite de Article CI CI for Python driver for monitoring DIY solar power generation system, cette fois la couverture du code python (couverture de test) Taux) est mesuré.

Mesurer la couverture sur la ligne de commande

Exécutez d'abord le test

Il est fastidieux d'écrire le code de testeur suivant à chaque fois, donc pip installe le package nose et utilise la commande nosetests.

import unittest

if __name__ == "__main__":
    all_tests = unittest.TestLoader().discover("./", "test_*.py")
    unittest.TextTestRunner(verbosity=1).run(all_tests)

nosetests est une commande qui peut être utilisée par pip installant le package nose.

Comme vous pouvez le voir dans Comment trouver des cas de test pour nosetests, il semble qu'il collecte et exécute des sous-classes de unittest.TestCase pour le moment. ..

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

Écrivez ce qui suit dans la suite de test de setup.py, demandez au nez de collecter la suite de tests et de tester via setup.py Il est également possible d'exécuter.

setup (
    # ...
    test_suite='nose.collector'
)
$ python setup.py test

Mesure de la couverture de test

Pour mesurer la couverture, ajoutez l'option --with-coverage suivante.

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

Les résultats de la mesure de la couverture sont enregistrés dans un fichier .coverage sous le même répertoire.

tsmppt60_driver $ cat .coverage | head
!coverage.py: This is a private format, don't read it directly!{"lines": {"/Users/

Création d'un rapport de couverture de test

Générez un rapport de couverture à l'aide du package de couverture et des commandes. Si vous installez et affichez l'aide, vous pouvez voir que les sous-commandes suivantes sont préparées.

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

Vous pouvez lire le fichier .coverage qui enregistre les résultats de la mesure de la couverture et afficher le rapport.

Veuillez noter que si vous ne restreignez pas les modules cibles avec l'option --include, les modules dépendants autres que la cible de test seront également signalés ensemble, ce qui sera compliqué.

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%

Vous pouvez également générer un rapport au format HTML qui vous permet de voir visuellement quels chemins de votre code sont couverts et lesquels ne le sont pas.

tsmppt60_driver $ coverage html --include=tsmppt60_driver/*
tsmppt60_driver $ open htmlcov/index.html

C'est comme ça.

Mesurer automatiquement la couverture à l'aide des services Web

L'introduction est devenue longue, mais le sujet principal est d'ici.

Utilisez Coveralls, qui est facile à utiliser avec TravisCI introduit la dernière fois.

Si .travis.yml a déjà été défini, cela aurait été comme suit,

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

Ajoutez ce qui suit à ceci,

script:
  - coverage run --source=tsmppt60_driver setup.py test
after_success:
  - coveralls

Ajoutez ce qui suit à test-requirements.txt.

nose
coverage
coveralls

La plupart du temps, je suis juste le README de coveralls-python.

Désormais, chaque fois que vous poussez vers le référentiel github, TravisCI exécutera automatiquement le test et Combinaisons mesurera automatiquement la couverture.

Affichage du badge

Badge de résultat de mesure de couverture de combinaison

Dans les combinaisons REPOS, après avoir mesuré la couverture, passez au lien du référentiel cible, et il y a un lien "BADGE YOUR REPO: TSMPPT60_DRIVER" sur l'écran, vous pouvez donc y obtenir l'URL du badge.

Le format MARKDOWN et d'autres formats sont disponibles, veuillez donc copier et coller en fonction de votre environnement.

Vous pouvez également mettre les badges suivants sur le README de GitHub.

Coverage Status

Divers badges

Si vous mettez un badge comme Travis CI ou Combinaisons sur votre README, vous voudrez voir d'autres informations avec un badge similaire. droite?

Par conséquent, il existe un service appelé shields.io.

Comme vous pouvez le voir sur le lien ci-dessus, vous pouvez créer vous-même divers badges dans les formats suivants.

https://img.shields.io/badge/<SUBJECT>-<STATUS>-<COLOR>.svg

Par exemple, si vous procédez comme suit

https://img.shields.io/badge/python-3.3,3.4,3.5-blue.svg

Il sera affiché comme suit.

python

Cela n'a pas beaucoup de sens, mais vous pouvez créer un badge comme celui-ci.

hoge hoge hoge

Recommended Posts

Mesurez la couverture de test du code python poussé sur GitHub.
Essayez CI le code python poussé sur GitHub.
Décomposons les bases du code Python de TensorFlow
Vérifions et formons statiquement le code du test automatique E2E écrit en Python [VS Code]
Résumons le degré de couplage entre les modules avec du code Python
[Python3] Réécrire l'objet code de la fonction
[Python] Récupère le code de caractère du fichier
python setup.py tester le code en utilisant le multiprocessus
[Python] Lire le code source de Bottle Part 2
[Python] Teste le matagi lunaire du delta relatif
[Python] Lire le code source de Bottle Part 1
Code pour vérifier le fonctionnement de Python Matplot lib
Au moment de la mise à jour de python avec ubuntu
Convertir le code de caractère du fichier avec Python3
Test automatique de Pipenv + Pytest avec actions Github
Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python
le zen de Python
Récupérer le code retour d'un script Python depuis bat
Utilisons la version Python du module API Confluence.
Utilisons les données ouvertes de "Mamebus" en Python
Testons l'hypothèse d'effondrement médical du nouveau virus corona
[Python] Changeons l'URL du site administrateur de Django
Affiche automatiquement les paroles de la chanson en cours de lecture sur iTunes en Python (version améliorée)
Mettez la dernière version de Python dans Linux (Debian) du Chromebook
Sakura L'histoire du fonctionnement de la bouteille Python sur Internet
Suivez le mystère du pédant orthographique apparu soudainement sur GitHub !!
Exécutons la commande à temps avec le bot discord
Touchons l'API de Netatmo Weather Station avec Python. #Python #Netatmo
Le processus de création et d'amélioration du code Python orienté objet
Jouez avec le mécanisme de mot de passe de GitHub Webhook et Python
python3 Mesurez la vitesse de traitement.
Vers la retraite de Python2
Expliquez le code de Tensorflow_in_ROS
Manipulation de python sur mac
2.x, 3.x code de caractères des séries python
À propos des fonctionnalités de Python
Le pouvoir des pandas: Python
L'histoire de la sortie d'un outil de vérification de texte créé par Python sur GitHub x CircleCI pour la première fois
Obtenez des images de sites intéressants / 47 à l'aide de Python (Partie 2/2: liste des cibles publiées par github)
Comment est le progrès? Continuons le boom ?? en Python
[Python] J'ai écrit la route du typhon sur la carte en utilisant le folium
[Python] Réduisons le nombre d'éléments dans le résultat dans le fonctionnement de l'ensemble
Premier python ② Essayez d'écrire du code tout en examinant les fonctionnalités de python
J'ai essayé d'utiliser l'API COTOHA (il y a aussi du code sur GitHub)
J'ai écrit le code pour écrire le code Brainf * ck en python
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
Comment mettre à jour la version Python de Cloud Shell dans GCP
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
Comment exécuter le code pratique du livre "Making Profitable AI with Python" sur Google Colaboratory
Tutoriel "Cython" qui rend Python explosif: lorsque le code C ++ dépend de la bibliothèque. Tout d'abord, CMake.
Jetons un coup d'œil au code Scapy. Surcharge des méthodes spéciales __div__, __getitem__.
Tester la version du module argparse
[Python] La pierre d'achoppement de l'importation
First Python 3 ~ Le début de la répétition ~
AtCoder: Python: Papa, l'exemple de test.
Tester l'adéquation de la distribution
Existence du point de vue de Python
pyenv-changer la version python de virtualenv