tutorial modules creating create __all__ python code-coverage pytest coverage.py tox

modules - python packages tutorial



Haciendo py.test, cobertura y tox trabajo juntos:__init__.py en la carpeta de pruebas? (2)

Tengo un problema extraño con tox , py.test , coverage y pytest-cov : cuando py.test con la opción --cov se inicia desde tox , parece que se requiere un archivo __init__.py en la carpeta de tests que es No es inmediatamente obvio.

Mientras escribo esta publicación, he resuelto el problema inicial agregando las tests/__init__.py mencionadas anteriormente tests/__init__.py , pero hasta este momento no entiendo por qué funciona o no funciona exactamente, por lo que sigo pidiendo ayuda. Por favor, vea más abajo para más detalles.

He encontrado una pregunta relacionada en SO, pero solo lo hace más confuso porque la respuesta parece ser opuesta a lo que he descubierto hasta ahora: los archivos `py.test` y` __init __. Py`

Consulte también los documentos oficiales aquí: py.test - Buenas prácticas de integración (en la parte inferior de la página).

Estructura del proyecto simplificada:

setup.py tox.ini .coveragerc project/ __init__.py module1.py module2.py tests/ __init__.py (optional, an empty file) test_module1.py test_module2.py

Parte relevante de tox.ini :

[testenv:check] commands = py.test --cov=project --cov-report=term deps = pytest coverage pytest-cov [pytest] python_files = test_*.py norecursedirs = .tox

Parte relevante de .coveragerc :

[run] branch = True omit = project/tests/*

Ahora, los resultados:

  • py.test --cov=project --cov-report=term run from project root => cobertura correcta si el archivo tests/__init__.py está presente o no.
  • tox -e check sin tests/__init__.py => las pruebas se han descubierto y ejecutado, pero tests/__init__.py una advertencia "Advertencia de Coverage.py: No se recopilaron datos". y la cobertura es del 0% para todos los módulos.
  • tox -e check con las tests/__init__.py => vuelva a corregir la cobertura.

No es inmediatamente obvio para mí por qué el archivo tests/__init__.py tiene que estar allí (agregar este archivo vacío solucionó el problema inicial) para la ejecución de tox , pero no importa cuando ejecuta las pruebas / cobertura manualmente. ¿Algunas ideas?

Gracias.


Use --cov {envsitepackagesdir}/<your-package-name> en tox.ini.


Ver: Usar py.test con cobertura no incluye importaciones

Me deshice del uso de pytest-cov y ejecuté la cobertura en su lugar ...

También noté que con pytest, necesitaba el init .py en blanco en mi directorio de prueba para funcionar correctamente. Probablemente hay una razón para ello en alguna parte.

Me doy cuenta de que esto tiene un par de años, pero en caso de que alguien más encuentre esto ...