salida de color unittest

Utilizo unittest (en realidad unittest2 ) para las pruebas en Python, junto con Python Mock para burlarse de los objetos y la nariz para ejecutar todas las pruebas en una sola pasada.

Echo de menos poder decir lo que funciona y lo que está mal de un vistazo desde las barras verde / roja. ¿Hay alguna manera de obtener una salida de color de unittest?

(Cambiar el conjunto de pruebas en este punto no es una opción, y en realidad me gusta unittest)

En Python 2.x puedes probar pyrg . Aunque no funciona en Python 3.

Usando un método muy similar a la respuesta de Robert , he lanzado (¡hoy!) Un paquete que habilita la salida de color en los resultados de las pruebas de la unittest prueba. Lo he llamado colour-runner .

Para instalarlo, ejecute:

 pip install colour-runner 

Luego, cuando estabas usando unittest.TextTestRunner , usa colour_runner.runner.ColourTextTestRunner en colour_runner.runner.ColourTextTestRunner lugar.

Mira cómo se ve con verbosity=1 … y verbosity=2

Estoy teniendo un buen éxito con pruebas de nariz y nariz roja . Todavía se mantiene en el momento de escribir esto.

Cree una clase que herede de unittest.TestResult (por ejemplo, MyResults ) e implemente un montón de métodos. Luego, MyRunner una clase que herede de unittest.TextTestRunner (por ejemplo, MyRunner ) y anule _makeResult() para devolver una instancia de MyResults .

Luego, cree un conjunto de pruebas (en el que probablemente ya esté trabajando) y llame a MyRunner().run(suite) .

Puede poner cualquier comportamiento que desee, incluidos los colores, en MyResults .

También he encontrado otro plugin para colorear para la nariz: YANC en https://pypi.python.org/pypi/yanc

Funciona para mí con Python 3.5 y nose 1.3.7 (no pude obtener ninguna de las otras opciones para que funcione anteriormente)

Prueba el plugin de rudolf para realizar pruebas.

Si pudiera cambiar solo la línea de sus importaciones de prueba, podría usar redgreenunittest . Es un clon que hice de unittest , pero tiene salida coloreada.

Si desea usarlo sin actualizar el código de su código, puede usarlo así:

 import redgreenunittest as unittest 

No es un clon de unittest2, por lo que no funcionaría de manera inmediata con el código de Andrea, pero su fuente está ahí, por lo que un tenedor redgreenunittest de redgreenunittest no estaría fuera de discusión.

Además, cualquier comentario “lo estás haciendo mal” es bienvenido, siempre que contenga algún razonamiento. Me encantaría hacerlo bien en su lugar.

Si está ejecutando pytest de esta manera:

 python -m unittest test_my.py 

Cambiarlo a:

 pytest test_my.py 

Y obtienes colores gratis.