2011-01-12 18 views
29

Me gustaría poner algunas declaraciones de registro dentro de la función de prueba para examinar algunas variables de estado.Registrando dentro de las pruebas de py.test

Tengo el siguiente fragmento de código:

import pytest,os 
import logging 

logging.basicConfig(level=logging.DEBUG) 
mylogger = logging.getLogger() 

############################################################################# 

def setup_module(module): 
    ''' Setup for the entire module ''' 
    mylogger.info('Inside Setup') 
    # Do the actual setup stuff here 
    pass 

def setup_function(func): 
    ''' Setup for test functions ''' 
    if func == test_one: 
     mylogger.info(' Hurray !!') 

def test_one(): 
    ''' Test One ''' 
    mylogger.info('Inside Test 1') 
    #assert 0 == 1 
    pass 

def test_two(): 
    ''' Test Two ''' 
    mylogger.info('Inside Test 2') 
    pass 

if __name__ == '__main__': 
    mylogger.info(' About to start the tests ') 

    pytest.main(args=[os.path.abspath(__file__)]) 

    mylogger.info(' Done executing the tests ') 

me sale el siguiente resultado:

[bmaryada-mbp:/Users/bmaryada/dev/platform/main/proto/tests/tpch $]python minitest.py 
INFO:root: About to start the tests 
======================================================== test session starts ========================================================= 
platform darwin -- Python 2.6.2 -- pytest-2.0.0 
collected 2 items 

minitest.py .. 

====================================================== 2 passed in 0.01 seconds ====================================================== 
INFO:root: Done executing the tests 

en cuenta que sólo los mensajes de registro desde el bloque '__name__ == __main__' son transmitidos a la consola.

¿Hay alguna manera de forzar a Pytest a que emita el registro en la consola desde los métodos de prueba también?

+2

Puede echar un vistazo a [esta respuesta] (http://stackoverflow.com/a/11877951/148680), publicada por el creador de py.test. Él sugiere un plugin pytest que proporciona un alto grado de versatilidad. – chb

Respuesta

17

funciona para mí, aquí está la salida me sale: [snip -> ejemplo era incorrecto]

Editar: Parece que usted tiene que pasar la opción -s a py.test por lo que no capturará la salida estándar. Aquí (py.test no instalado), fue suficiente usar python pytest.py -s pyt.py.

Para su código, todo lo que necesita es pasar -s en args a main:

pytest.main(args=['-s', os.path.abspath(__file__)]) 

Consulte la documentación py.test en capturing output.

+0

Lo siento. Pegué el código a toda prisa. Elimine el 'assert 0 == 1' de la función 'test_one' para observar el 'problema'. Solo cuando hay alguna falla (que forcé al tener una afirmación falsa), py.test parece imprimir la información de registro. – superselector

+0

No hay problema, descubrí cómo solucionarlo en la línea de comandos, buscando una forma programática. – TryPyPy

+1

también podría redirigir la salida de registro a algún archivo en lugar de la stderr implícita predeterminada. – hpk42

Cuestiones relacionadas