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,
unittest2
ypytest
). - 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!