dialelo

Archivo Sobre mí Quotes Feed

Automatiza la ejecución de tus tests en Python con tdaemon

El desarrollo guiado por pruebas o Test-Driven Development (en adelante TDD) es un ciclo de desarrollo que consiste en aplicar el siguiente algoritmo:

  • Escribir un test automático que verifique una funcionalidad.
  • Ejecutar la prueba y verla fallar.
  • Escribir el mínimo código que haga a la prueba pasar.
  • Refactorizar para eliminar duplicidad y conseguir un código limpio.

Los beneficios de utilizar esta práctica son numerosos, desde mantenerte concentrado en una sola tarea cada vez hasta generar una documentación viva (en código) de la especificación del sistema que estamos desarrollando.

Para una muy buena introducción al TDD en español recomiendo el libro Diseño Ágil con TDD de Carlos Ble.

tdaemon

tdaemon vigila un directorio y ejecuta los tests automáticamente cada vez que detecta un cambio.

Esto nos permite un flujo de trabajo TDD sin necesidad de ejecutar las pruebas manualmente. tdaemon está disponible en PyPI para su descarga, por lo que podemos instalarlo con pip fácilmente.

tdaemon utiliza un programa adicional para ejecutar los tests, que por defecto es nose. nose descubre los tests de forma automática y es extensible mediante plugins.

Vamos a instalar ambos programas para probar su funcionamiento:

$ pip install nose tdaemon

Una buena forma para tener feedback de los tests a medida que cambiamos el código es utilizar dos paneles en una ventana de tmux, una para el editor y otra para ejecutar tdaemon. Si te interesa saber más sobre tmux mi artículo sobre productividad con VIM y tmux merece unos minutos de tu tiempo.

Para empezar a utilizar tdaemon no tenemos más que ejecutarlo en el directorio que queremos monitorizar. Opcionalmente podemos pasarle como argumento la ruta hasta el directorio que queremos que vigile. Aquí vemos como detecta un cambio y ejecuta los tests automáticamente:

$ tdaemon
Ready to watch file changes...
2012-08-12 18:06:46.964502
..................EE.....
======================================================================
ERROR: Failure: ImportError (cannot import name create_status)
----------------------------------------------------------------------
# ...

Integración con Django

tdaemon soporta otros programas para ejecutar los tests, entre los que están py.test y el test runner de Django.

Para utilizar tdaemon en un proyecto Django, no tenemos más que invocarlo de la siguiente forma (en el directorio donde vive nuestro manage.py):

$ tdaemon --test-program=django --custom-args="mi_app"
# que ejecutará: 
#   $ ./manage.py test mi_app
# cada vez que detecte un cambio

Esto es todo por hoy, espero que os sea útil. Y vosotros ¿cómo hacéis TDD en Python?

Redes

Proyectos

turses

Un cliente de Twitter con interfaz curses escrito en Python.

shipit

Una interfaz de GitHub Issues en la consola escrita en Python 3.

Experimentos

Buscaminas

El clásico buscaminas en JavaScript utilizando <canvas>.

Juego de la Vida

El juego de la vida de Gonway en JavaScript, renderizado en <canvas>.

Blogroll

Recomiendo