python - tutorial - the django project
running nose: con cobertura para obtener todos los archivos del paquete, pero no otras dependencias y librerías (3)
Mi carpeta de proyecto (sí, sé que es la mejor práctica) es algo como:
.
├── app.py
├── otherscript.py
├── tests/
└── tools/
├── __init__.py
└── toolfile.py
Necesito nose --with-coverage
para probar los scripts .py
en la carpeta principal, la carpeta de tools
y excluir la carpeta de tests
(aunque realmente no me importa excluir eso)
Cuando corro basico
nose --with-coverage
Obtengo cobertura en todas las dependencias y librerías instaladas (matraz, solicitudes, etc.)
cuando corro
nose --with-coverage --cover-package=folder name (or . or ./)
Recibo cobertura para la carpeta de pruebas. el archivo tools/__init__.py
y app.py
pero no para el resto de los 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
Cuando corro con la --cover-inclusive flag
. Simplemente falla con:
nosetests-scripts.py: error: no such option: --with-coverage
Me alegraré por cualquier ayuda con esto
Mis pruebas / archivo nose_setup_coverage.cfg :
[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
agregar cover-package=..
(en el archivo cfg) y ejecutar desde el directorio de pruebas me permitió cubrir todos mis directorios de python, pero no django y otras cosas de terceros.
Esta es mi estructura de directorios (menos algunas cosas que no son de Python):
.
├── lib
├── non_app
├── ps_catalog
├── pssecurity
├── pssystem
├── static
├── static_src
├── staticfiles
├── templates
├── tests
└── websec
Por último, aunque no parezca documentado, la cobertura, como se ejecuta desde pruebas de detección, seleccionará y utilizará un archivo .coveragerc en el directorio actual (prueba) (no puede pasarlo a través de la línea de comandos o en el archivo cfg de la nariz, eso es para el plugin de la cubierta ).
En ese archivo, la sección omitir le permite un control más preciso sobre qué directorios excluir:
omit=/Users/jluc/kds2/env/lib/python2.7/*
*/batch/*
/Users/jluc/kds2/py/non_app/*
*/migrations/*
ejecutando las pruebas en bash:
nosetests -c nose_setup_coverage.cfg
ps añadiendo - --cover-erase
a lo anterior, reinicia la cobertura
Por defecto las pruebas no se incluirán en el informe de cobertura. Puede hacer que aparezcan (en realidad, es una muy buena idea asegurarse de que sus pruebas se ejecuten correctamente y que no se ignoren las pruebas de nombres duplicados) con --cover-tests
En cualquier caso, las nosetests --help
es tu amigo. Lo más probable --cover-inclusive
indicador de cobertura --cover-inclusive
elimine el complemento de cobertura y otras opciones (para el complemento) no estén disponibles. Puedes intentar depurarlo lanzando nose a través de pdb
.
Como alternativa, puede ejecutar la cobertura como un módulo independiente que inicia pruebas de la nariz.
Tuve un problema muy similar con el código generado. La solución fue excluir el código generado o el código de herramientas en su caso solo de los informes.
Así que ahora usamos pruebas de narices para ejecutar nuestras pruebas como
nosetests --with-coverage --cover-inclusive --cover-package=$(PACKAGE)
y luego, creamos los informes manualmente, por lo que
coverage combine
coverage report --omit ''tools/*''
Por lo tanto, cobertura.py cubrirá su paquete de herramientas, pero no aparecerán en los informes.