web-dev-qa-db-fra.com

py.test donne un avertissement à Coverage.py: le module sample.py n'a jamais été importé

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.

16
pypabot

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

6