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é.
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
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/
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.
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.
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.
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.
Cela n'a pas beaucoup de sens, mais vous pouvez créer un badge comme celui-ci.
Recommended Posts