Tox: pruebas en múltiples versiones de Python

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción

Cuando desarrollas librerías o aplicaciones en Python, es fundamental asegurarte de que sean compatibles con diferentes versiones del intérprete. Esto es especialmente importante al publicar paquetes en PyPI, donde los usuarios pueden estar usando versiones variadas de Python. Instalar manualmente Python 3.7, 3.8, 3.9, 3.10 y probar cada versión consume mucho tiempo y esfuerzo.

Aquí es donde entra tox — una potente herramienta de automatización de pruebas que te permite ejecutar tests en entornos virtuales aislados con distintas versiones de Python. Tox se encarga de instalar dependencias automáticamente, crear entornos limpios y garantizar la reproducibilidad de los resultados.

¿Qué es tox y para qué sirve?

Tox (abreviatura de "testing out of the box") es una herramienta de línea de comandos escrita en Python que automatiza el proceso de prueba de proyectos Python en diferentes entornos. Crea entornos virtuales aislados, instala las dependencias necesarias y ejecuta las pruebas, permitiéndote verificar la compatibilidad de tu código con varias versiones de Python y distintos conjuntos de dependencias.

Principales ventajas de tox:

Aislamiento de entornos — cada prueba se ejecuta en un entorno virtual separado, eliminando conflictos de dependencias.

Automatización — el proceso de crear entornos, instalar dependencias y ejecutar pruebas es completamente automático.

Soporte multi-versión — posibilidad de probar simultáneamente en diferentes versiones de Python.

Reproducibilidad — garantiza resultados consistentes en distintos entornos.

Integración con CI/CD — configuración sencilla para pruebas automáticas en sistemas de integración continua.

Instalación y configuración inicial

Instalación de tox

Puedes instalar tox de varias maneras:

# Con pip
pip install tox

# Con conda
conda install -c conda-forge tox

# Con pipx (método recomendado)
pipx install tox

Creación del archivo de configuración básico

El archivo principal de configuración de tox es tox.ini, que debe estar en la raíz del proyecto:

[tox]
envlist = py38, py39, py310, py311

[testenv]
deps = 
    pytest
    pytest-cov
commands = 
    pytest tests/ --cov=src/

Estructura del proyecto

Para que tox funcione correctamente, se recomienda la siguiente estructura de proyecto:

my_project/
├── src/
│   └── my_package/
│       ├── __init__.py
│       └── module.py
├── tests/
│   ├── __init__.py
│   └── test_module.py
├── tox.ini
├── setup.py (o pyproject.toml)
└── requirements.txt

Conceptos básicos de tox

Comandos esenciales

Tox ofrece una interfaz de línea de comandos simple:

# Ejecutar todos los entornos de envlist
tox

# Ejecutar un entorno específico
tox -e py39

# Ejecutar varios entornos
tox -e py38,py39,lint

# Forzar la recreación de entornos
tox -r

# Ejecutar con salida detallada
tox -v

# Salida muy detallada (para depuración)
tox -vv

Cómo funciona tox

El proceso de trabajo de tox consta de las siguientes etapas:

  1. Análisis de configuración — lectura del archivo tox.ini y determinación de la lista de entornos
  2. Creación de entornos virtuales — para cada intérprete de Python especificado
  3. Instalación del paquete — instalación del paquete a probar en cada entorno
  4. Instalación de dependencias — instalación de las dependencias indicadas en la sección deps
  5. Ejecución de comandos — ejecución de los comandos definidos en la sección commands

Recommendations