2012-08-07 15 views
24

Recientemente hemos cambiado a py.test para pruebas de python (que es fantástico por cierto). Sin embargo, estoy tratando de averiguar cómo controlar el resultado del registro (es decir, el módulo de registro de python incorporado). Tenemos pytest-capturelog instalado y funciona como se esperaba y cuando queremos ver los registros podemos pasar la opción --nologcapture.py.test logging control

Sin embargo, ¿cómo se controla el nivel de registro (por ejemplo, información, depuración, etc.) y también se filtra el registro (si solo está interesado en un módulo específico). ¿Existen complementos para que py.test logre esto o tenemos que rodar el nuestro?

Gracias, Jonny

+0

pytest-capturelog parece haber sido reemplazado por https://pypi.python.org/pypi/pytest-catchlog/ Esto se menciona en una serie de comentarios a continuación, pero al principio omití esta información e intenté usar pytest-capturelog. Dejo este comentario con la esperanza de que sea más visible y salve al siguiente chico de cometer mi error. – cledoux

Respuesta

9

instalar y utilizar el pytest-capturelog plugin podría satisfacer la mayor parte de sus necesidades PYtest/madereras. Si falta algo, debería poder implementarlo con relativa facilidad.

+0

Acabo de probar esto con Pytest 3.0.6. funcionó bien, pero ladra mucho: /pytest_capturelog.py:171 'pytest_runtest_makereport' el gancho usa el argumento __multicall__ obsoleto WC1 Ninguno pytest_funcarg__caplog: declarar los dispositivos que usan el prefijo "pytest_funcarg__" está en desuso y programado para eliminarse en pytest 4.0. Por favor, elimine el prefijo y use el decorador @ pytest.fixture en su lugar. ... – mark

+1

Parece que hay un fork que soluciona este problema: https://pypi.python.org/pypi/pytest-catchlog/ –

8

Como dijo Holger puede utilizar pytest-capturelog:

def test_foo(caplog): 
    caplog.setLevel(logging.INFO) 
    pass 

Si no desea utilizar PYtest-capturelog puede utilizar una salida estándar StreamHandler en la configuración del registro de modo PYtest capturará la salida del registro. Aquí hay un ejemplo basicConfig

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) 
+3

pytest-capturelog parece no haber sido mantenido y arroja advertencias. Parece que hay un fork que soluciona este problema: https://pypi.python.org/pypi/pytest-catchlog/ –

7

Un poco de una contribución tarde, pero puedo recomendar pytest-logging para instalar una sencilla solución de captura en el registro. Después de pip install pytest-logging se puede controlar el nivel de detalle de los registros de su (que se visualiza en la pantalla) con

$ py.test -s -v tests/your_test.py 
$ py.test -s -vv tests/your_test.py 
$ py.test -s -vvvv tests/your_test.py 

etc ... NB - la bandera -s es importante, sin ella py.test filtrará toda la información sys.stderr.

1

Un poco más de una contribución posterior: puede probar pytest-logger. La novedad de este complemento es iniciar sesión en el sistema de archivos: pytest proporciona nodeid para cada elemento de prueba, que se puede usar para organizar el registro de sesión de prueba (con la ayuda de la instalación de tmpdir de pytest y sus ganchos de inicio/final de prueba).

Puede configurar múltiples controladores (con niveles) para terminal y sistema de archivos por separado y proporcionar opciones propias de cmdline para filtrar registradores/niveles para que funcionen para su entorno de prueba específico, p. de forma predeterminada, puede registrar todo en el sistema de archivos y una pequeña fracción en la terminal, que se puede cambiar en cada sesión con la opción --log si es necesario. El complemento no hace nada por defecto, si el usuario no define ganchos.