unittest unit tests testcases test real examples assertis assertequals python logging python-unittest

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'')