Mon dossier de projet (ouais - je sais que c'est la meilleure pratique) est quelque chose comme:
.
├── app.py
├── otherscript.py
├── tests/
└── tools/
├── __init__.py
└── toolfile.py
J'ai besoin nose --with-coverage
pour tester le .py
scripts dans le dossier principal, dossier tools
et exclure le dossier tests
(bien que je ne me soucie pas vraiment d'exclure cela)
Quand je cours basique
nose --with-coverage
Je reçois une couverture sur toutes les dépendances et bibliothèques installées (flacon, requêtes, etc.)
quand je cours
nose --with-coverage --cover-package=folder name (or . or ./)
J'obtiens une couverture pour le dossier des tests. les tools/__init__.py
fichier et app.py
mais pas pour le reste des scripts:
> (opentaba-server) D:\username\pathto\opentaba-server>nosetests --with-coverage -- cover-package=./ ... Name
> Stmts Miss Cover Missing
> ----------------------------------------------------------------------- Tests\functional_tests\test_return_json 26 0 100%
> Tests\unit_test\test_createdb 0 0 100%
> Tests\unit_test\test_scrape 0 0 100% app
> 63 15 76% 22, 24, 72-81, 8 8-106, 133 tools\__init__
> 0 0 100%
> ----------------------------------------------------------------------- TOTAL 89 15 83%
> ---------------------------------------------------------------------- Ran 3 tests in 5.182s OK
Quand je cours avec le --cover-inclusive flag
. Il échoue simplement avec:
nosetests-scripts.py: error: no such option: --with-coverage
Je serai heureux de toute aide à ce sujet
J'ai eu un problème très similaire avec le code généré. La solution était d'exclure le code généré ou le code d'outils dans votre cas uniquement des rapports.
Donc, nous utilisons maintenant nosestests pour exécuter nos tests comme
nosetests --with-coverage --cover-inclusive --cover-package=$(PACKAGE)
et ensuite, nous créons les rapports manuellement, donc
coverage combine
coverage report --omit 'tools/*'
Ainsi, coverage.py couvrira votre ensemble d'outils, mais ils n'apparaîtront pas dans les rapports.
mon tests/nose_setup_coverage.cfg fichier:
[nosetests]
verbosity=1
detailed-errors=1
with-coverage=1
cover-html=1
cover-html-dir=../../out/cover
#this is the line that fixed my equivalent of your issue
#by "climbing up" from tests/ but skipping python's **site-packages**
cover-package=..
where=/Users/jluc/kds2/py/tests
ajouter cover-package=..
(dans le fichier cfg) et l'exécution à partir du répertoire tests m'ont permis de couvrir tous mes répertoires python, mais pas Django et autres trucs tiers) .
Voici ma structure de répertoires (moins quelques trucs non-Python):
.
├── lib
├── non_app
├── ps_catalog
├── pssecurity
├── pssystem
├── static
├── static_src
├── staticfiles
├── templates
├── tests
└── websec
enfin, même si cela ne semble pas documenté, la couverture, exécutée à partir de nosetests, sélectionnera et utilisera un fichier . coveragerc dans le répertoire courant (test) (vous ne pouvez pas le passer via la ligne de commande ou dans le fichier cfg nez, c'est pour le plugin cover).
Dans ce fichier, la section omit vous permet un contrôle plus fin sur les répertoires à exclure:
omit=/Users/jluc/kds2/env/lib/python2.7/*
*/batch/*
/Users/jluc/kds2/py/non_app/*
*/migrations/*
exécuter les tests en bash:
nosetests -c nose_setup_coverage.cfg
p.s. ajouter --cover-erase
à ce qui précède, réinitialise la couverture
Par défaut, les tests ne seront pas inclus dans le rapport de couverture. Vous pouvez les faire apparaître (en fait une très bonne idée pour vous assurer que vos tests sont correctement exécutés et qu'aucun test de nom en double n'est ignoré) avec --cover-tests
Dans tout les cas, nosetests --help
est votre ami. Probablement --cover-inclusive
flag tue le plugin de couverture et les autres options (pour le plugin) deviennent indisponibles. Vous pouvez essayer de le déboguer en lançant nose via pdb
.
Comme alternative, vous pouvez exécuter la couverture en tant que module autonome pour lancer des tests de nez.