tests - unit test python pytest
Cambiar el nivel de registro en unittest (2)
Tengo la impresión (pero no encuentro la documentación) de que unittest establece el nivel de registro en WARNING
para todos los registradores . Me gustaría:
- poder especificar el nivel de registro para todos los registradores, desde la línea de comandos (cuando se ejecutan las pruebas) o desde el propio módulo de prueba
- Evite que Unittest intente con el nivel de registro de la aplicación: al ejecutar las pruebas, quiero tener el mismo resultado de registro (los mismos niveles) que cuando se ejecuta la aplicación.
¿Cómo puedo conseguir esto?
No creo que unittest
haga nada para el registro, a menos que use la clase _CapturingHandler
que define. Este sencillo programa demuestra:
import logging
import unittest
logger = logging.getLogger(__name__)
class MyTestCase(unittest.TestCase):
def test_something(self):
logger.debug(''logged from test_something'')
if __name__ == ''__main__'':
# DEBUG for demonstration purposes, but you could set the level from
# cmdline args to whatever you like
logging.basicConfig(level=logging.DEBUG, format=''%(name)s %(levelname)s %(message)s'')
unittest.main()
Cuando se ejecuta, se imprime.
__main__ DEBUG logged from test_something
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
mostrando que está registrando eventos a nivel DEBUG
, como se esperaba. Por lo tanto, es probable que el problema esté relacionado con otra cosa, por ejemplo, el código bajo prueba, o algún otro corredor de prueba que cambie la configuración de registro o redirija sys.stdout
y sys.stderr
. Probablemente deba proporcionar más información sobre su entorno de prueba, o mejor aún, un programa mínimo que demuestre el problema (como mi ejemplo anterior muestra que unittest
por sí solo no causa el problema que está describiendo).
Vea el siguiente ejemplo para iniciar sesión en Python. También puedes cambiar LOG_LEVEL usando el método ''setLevel''.
import os
import logging
logging.basicConfig()
logger = logging.getLogger(__name__)
# Change logging level here.
logger.setLevel(os.environ.get(''LOG_LEVEL'', logging.INFO))
logger.info(''For INFO message'')
logger.debug(''For DEBUG message'')
logger.warn(''For WARNING message'')
logger.error(''For ERROR message'')
logger.fatal(''For CRITICAL message'')