Cómo suprimir las advertencias internas de desuso de py.test
¿Hay alguna manera de suprimir las advertencias internas de desaprobación de pytest?
Contexto: estoy buscando evaluar la dificultad de migrar un conjunto de pruebas de nose
a pytest
. La suite es bastante grande y utiliza mucho generadores de pruebas basados nose
en estilos .yield
Primero me gustaría asegurarme de que las pruebas existentes pasen con pytest y luego tal vez cambiar los generadores de pruebas a parameterized
.
Simplemente ejecutar $ pytest path-to-test-folder
pytest 3.0.4 está completamente dominado por páginas y páginas de
WC1 ~repos/numpy/numpy/lib/tests/test_twodim_base.py yield tests are deprecated, and scheduled to be removed in pytest 4.0
¿Hay alguna forma de desactivar estas advertencias?
Creo que no desea ocultar todas las advertencias, sino sólo las que no son relevantes. Y en este caso, advertencias de desaprobación de módulos de Python importados.
Leer la documentación de pytest sobre la captura de advertencias :
Tanto la opción de línea de comandos -W como la opción ini filterwarnings se basan en la opción -W y en los avisos.simplefilter de Python , así que consulte esas secciones en la documentación de Python para ver otros ejemplos y uso avanzado.
¡Así que puedes filtrar advertencias con -W
la opción de Python!
Parece que pytest
elimina completamente los filtros, porque los muestra todos DeprecationWarning
cuando se ejecutan, y la documentación de Python sobre los filtros de advertencia predeterminados dice claramente:
En las versiones de lanzamiento habituales, el filtro de advertencia predeterminado tiene las siguientes entradas (en orden de prioridad):
default::DeprecationWarning:__main__ ignore::DeprecationWarning ignore::PendingDeprecationWarning ignore::ImportWarning ignore::ResourceWarning
Entonces, en su caso, si desea filtrar los tipos de advertencias que desea ignorar, como esas DeprecationWarning
, simplemente ejecute el comando pytest con -W
la opción:
$ pytest path-to-test-folder -W ignore::DeprecationWarning
EDITAR : A partir del comentario de colini , es posible filtrar por módulo. Ejemplo para ignorar las advertencias de obsolescencia de todo sqlalchemy:
ignore::DeprecationWarning:sqlalchemy.*:
Luego puede enumerar los módulos instalados que crean demasiado ruido en la salida depytest
EDITAR2 : Para un control más preciso, la documentación de Python sobre la descripción de filtros de advertencia establece que la forma general de escribir dichos filtros de advertencia es:
action:message:category:module:line
Úselo con un archivo en lugar de en la línea de comando:
Es posible que prefiera enumerar esos filtros en el archivo pytest.ini:
[pytest]
filterwarnings =
ignore::DeprecationWarning
De pytest --help
:
--disable-pytest-warnings
disable warnings summary, overrides -r w flag
pytest -p no:warnings
, o agregue lo siguiente a su pytest.ini o tox.ini:
[pytest]
addopts = -p no:warnings
El resultado será verde sin ninguna indicación de advertencias. Consulte la documentación en https://docs.pytest.org/en/latest/warnings.html#disabling-warnings-summary .
Este puede ser un caso de uso válido para un conjunto de pruebas en el que desea obtener resultados limpios.
Tenga en cuenta que ocultar siempre todas las advertencias puede hacer que se pierda advertencias importantes. Si desea ocultar solo advertencias específicas, consulte la respuesta de Cloc .