web-dev-qa-db-fra.com

running nose --with-coverage pour obtenir tous les fichiers du package, mais pas les autres dépendances et bibliothèques

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

27
alonisser

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.

13
Georg

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

5
JL Peyret

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.

1
Oleksiy