with tutorial framework español djangoproject desde con cero applications python testing virtualenv code-coverage python-coverage

tutorial - evitando que la cobertura de Python incluya paquetes de sitio de entorno virtual



tutorial django (3)

Soy nuevo en la cobertura y me encontré con un problema extraño. Mi cobertura está tomando en cuenta los paquetes de mi sitio de entorno virtual. Aquí está la salida de la carrera de cobertura:

coverage run test.py .................... ---------------------------------------------------------------------- Ran 20 tests in 0.060s OK (atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -jmfrank63@fullstack-audio-text-catalog:~/workspace (git master) [19:58:45] $ coverage report Name Stmts Miss Cover ----------------------------------------------------------------------------------------------------- /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/__init__ 18 0 100% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/_compat 38 20 47% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/app 528 255 52% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/flask/blueprints 156 118 24% . . . /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/urls 412 215 48% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/utils 242 175 28% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/wrappers 568 298 48% /home/ubuntu/Envs/atcatalog/lib/python2.7/site-packages/werkzeug/wsgi 448 352 21% atcatalog/__init__ 7 0 100% atcatalog/views/__init__ 0 0 100% atcatalog/views/publang 7 0 100% atcatalog/views/pubtext 1 0 100% atcatalog/views/userlang 13 0 100% atcatalog/views/users 5 0 100% atcatalog/views/usertext 14 0 100% test 120 0 100% ----------------------------------------------------------------------------------------------------- TOTAL 12530 8044 36% (atcatalog)- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -jmfrank63@fullstack-audio-text-catalog:~/workspace (git master) [19:58:55]

Aquí está la estructura de mi directorio de proyectos que reside en el hogar:

workspace/ ├── README.md ├── atcatalog │   ├── __init__.py │   ├── __init__.pyc │   ├── static │   ├── templates │   └── views │   ├── __init__.py │   ├── __init__.pyc │   ├── publang.py │   ├── publang.pyc │   ├── pubtext.py │   ├── pubtext.pyc │   ├── userlang.py │   ├── userlang.pyc │   ├── users.py │   ├── users.pyc │   ├── usertext.py │   └── usertext.pyc ├── requirements.txt ├── run.py └── test.py

Al principio tenía el entorno virtual dentro del directorio del proyecto y ahora lo moví a ~ / Envs con virtualenvwrapper, pero el problema persistió. run.py y test.py no son especiales de ninguna manera, ambos importan la aplicación desde atcatalog. También intenté encontrar formas de omitir el directorio del entorno virtual, pero Google no respondió (sorprendentemente). No creo que el propósito de la cobertura sea probar paquetes de sitios ya probados. Así que los excluiría de la carrera.

¿Cómo puedo lograr para evitar la cobertura al probar mis paquetes de sitio?


Gracias a tknickman lo descubrí: use cualquiera

coverage run --source <path to project dir> test.py

o cree un archivo de configuración .coveragerc que se encuentre en el directorio desde el que ejecuta la cobertura, con el siguiente contenido:

[run] source = <path to project dir>

Esto proporciona que no tenga su entorno virtual instalado en el directorio del proyecto. Si tiene el entorno virtual instalado bajo el directorio del proyecto, puede usar

coverage run --source <project path> --omit <pattern> test.py

Tenga en cuenta que omitir quiere un patrón de archivo como

~/projectdir/venv/*

en lugar de un camino.

El .coveragerc correspondiente se vería así:

[run] source= <path to project dir> omit= <path to project dir>/<name of virtual env>/*

Sigo pensando que, al igual que los paquetes de la biblioteca estándar, los paquetes instalados en los paquetes de sitio no deberían estar cubiertos por defecto.


Intente usar py.test y luego especifique sus opciones de prueba en un archivo setup.cfg . Necesitarás instalar primero pytest.

Por ejemplo:

[pytest] norecursedirs = build docs/_build *.egg .tox *.venv python_files = tests/functional* tests/integration* addopts = #--verbose --tb short # Turn on --capture to have brief, less noisy output # You will only see output if the test fails # Use --capture no if you want to see it all or have problems debugging --capture fd # --capture no # show extra test summary info as specified by chars (f)ailed, (E)error, (s)skipped, (x)failed, (X)passed. - rfEsxX --junitxml junit.xml --cov workspace --cov-report xml --cov-report term-missing

Puede leer más sobre la configuración de py.test aquí: https://pytest.org/latest/customize.html


Si usa pytest, puede especificar rutas o archivos exclusivos para probar en setup.cfg ( ver documentos ):

[pytest] # a directory testpaths = tests # exact file(s) python_files = tests/test1.py tests/test2.py

Parece que si incluyes los parámetros python_files y testpaths , solo se python_files los python_files .