Cómo suprimir las advertencias internas de desuso de py.test

Resuelto ev-br asked hace 7 años • 11 respuestas

¿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 nosea 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-folderpytest 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?

ev-br avatar Nov 21 '16 05:11 ev-br
Aceptado

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 -Wla opción de Python!

Parece que pytestelimina completamente los filtros, porque los muestra todos DeprecationWarningcuando 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 -Wla 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
SivolcC avatar Nov 09 '2018 01:11 SivolcC

De pytest --help:

--disable-pytest-warnings
                      disable warnings summary, overrides -r w flag
The Compiler avatar Nov 21 '2016 16:11 The Compiler

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 .

Blaise avatar Jun 12 '2018 15:06 Blaise