J'ai exécuté un exemple de code à partir de ce fil. Comment utiliser correctement coverage.py en Python?
Cependant, lorsque j'ai exécuté cette commande py.test test.py --cov=sample.py
il m'a donné un avertissement, par conséquent, aucun rapport n'a été créé.
platform linux2 -- Python 2.7.12, pytest-3.2.3, py-1.4.34, pluggy-0.4.0
rootdir: /media/sf_Virtual_Drive/ASU/CSE565_testand
validation/Assignments/temp, inifile:
plugins: cov-2.5.1
collected 3 items
test.py ...Coverage.py warning: Module sample.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)
Tout le monde sait pourquoi coverage.py
ne marche pas?
par conséquent, si je lance coverage run -m py.test test.py
séparément, il n'affiche aucun avertissement.
Réponse courte: vous devez exécuter avec le nom du module, pas le nom du fichier: pytest --cov sample test.py
Un commentaire dans la réponse que vous avez liée ( Comment utiliser correctement coverage.py en Python? ) explique que cela ne semble pas fonctionner si le fichier dont vous essayez d'obtenir la couverture est un module importé par le test. J'ai pu reproduire cela:
./sample.py
def add(*args):
return sum(args)
./test.py
from sample import add
def test_add():
assert add(1, 2) == 3
Et je reçois la même erreur:
$ pytest --cov sample.py test.py
========================================================================================== test session starts ===========================================================================================
platform darwin -- Python 3.7.2, pytest-4.3.1, py-1.8.0, pluggy-0.9.0
rootdir: /path/to/directory, inifile:
plugins: cov-2.6.1
collected 1 item
test.py . [100%]Coverage.py warning: Module sample.py was never imported. (module-not-imported)
Coverage.py warning: No data was collected. (no-data-collected)
/path/to/directory/.venv/lib/python3.7/site-packages/pytest_cov/plugin.py:229: PytestWarning: Failed to generate report: No data to report.
self.cov_controller.finish()
WARNING: Failed to generate report: No data to report.
Cependant, lorsque vous utilisez le nom du module à la place:
pytest --cov sample test.py
========================================================================================== test session starts ===========================================================================================
platform darwin -- Python 3.7.2, pytest-4.3.1, py-1.8.0, pluggy-0.9.0
rootdir: /path/to/directory, inifile:
plugins: cov-2.6.1
collected 1 item
test.py . [100%]
---------- coverage: platform darwin, python 3.7.2-final-0 -----------
Name Stmts Miss Cover
-------------------------------
sample.py 2 0 100%
La documentation pytest-cov semble indiquer que vous pouvez utiliser un PATH
, mais cela pourrait ne pas fonctionner dans tous les cas ...