Automatizando con Tox
Hace unos días me encontré con Tox y realmente me llamó la atención, pero...
¿Qué es Tox?
Tox es un gestor de virtualenvs y una herramienta para realizar tests en linea de comandos. Según su documentación se puede utilizar para:- Probar que tu paquete se instala correctamente con diferentes versiones de Python.
- Ejecutar los tests de tu proyecto en cada uno de los entornos.
- Integración Continua (CI = Continuous Integration).
No me ha quedado claro, ¿Cual es el objetivo?
El objetivo detox es automatizar el arte de empaquetado, testeo e instalación de software Python ya sea desde tu consola o desde tu servidor de CI (Integración Continua).
Lo quiero probar, ¿cómo lo instalo?
Es muy fácil, solamente se necesita ejecutar la siguiente instrucción:pip install tox
Instalado, pero ¿cómo hago una primera prueba?
Se necesita crear un fichero llamadotox.ini que debe estar en el mismo directorio quesetup.py cuyo contenido puede ser algo como:
[tox]
envlist = py26,py27
[testenv]
deps =
unittest2
pytest
commands=python bin/test
¿Y ahora qué hago?
Una vez creado el ficherotox.ini solamente será necesario ejecutar:
tox
Será entonces cuando tox comienze a:
- empaquetar las fuentes del proyecto en un fichero zip
- creará un virtualenv por cada uno de los interpretes especificados, en este caso un virtualenv para Python-2.6 y otro para Python-2.7, cuyos nombres serán py26 y py27 respectivamente.
- instalará las dependencias especificadas (en este caso de ejemplo,
unittest2ypytest). - por último se ejecutarán los comandos especificados, en nuestro ejemplo solamente uno,
python bin/test.
tox no instala ningún intérprete de Python y en caso de no encontrar alguno de los especificados, informará de ello mostrando un error en linea de comandos.
Si ejecutamos tox por segunda vez podremos comprobar que la ejecución durará mucho menos puesto que no necesita resolver de nuevo las dependencias.
¿Y si sólo quiero ejecutar los tests en uno de los intérpretes?
Bastaría con ejecutar la siguiente instrucción:tox -e py27
¿Dónde se almacena el resultado de la ejecución de tox?
tox crea un directorio oculto llamado .tox que tiene la siguiente estructura:
.tox
├── dist
├── _download
├── log
└── py27
├── bin
├── include
├── lib
└── log
- dist: directorio donde se almacenan las fuentes del proyecto comprimidas en formato zip.
- _download: directorio de descarga de todas las dependencias de Python.
- log: directorio donde se almacenan los ficheros de log de la ejecución.
- py27: directorio del virtualenv creado para instalar el proyecto utilizando python2.7.
... y eso es todo amig@s! Podéis aprender más acerca de tox consultando la documentación oficial en http://tox.readthedocs.org
Un saludo!