En Python, las herramientas de testing se instalan como dependencias del proyecto. Por eso necesitamos entender bien cómo crear un entorno virtual, activarlo, instalar paquetes, registrar esas dependencias y reconstruir el entorno cuando sea necesario.
En este tema trabajaremos con venv, pip, requirements.txt, pytest y pytest-cov. El objetivo es que puedas preparar un proyecto de testing de forma repetible y sin depender de configuraciones globales del equipo.
Un entorno virtual es una instalación aislada de Python asociada a una carpeta de proyecto. Permite instalar paquetes sin modificar el Python global del sistema.
Esto es importante en testing porque distintos proyectos pueden necesitar versiones diferentes de una herramienta. Un proyecto puede usar una versión de pytest y otro proyecto puede usar otra, sin conflictos.
Crea una carpeta nueva para este tema:
mkdir dependencias-demo
cd dependencias-demo
Trabajaremos dentro de esta carpeta para no modificar los proyectos de los temas anteriores.
Desde la raíz del proyecto, ejecuta:
python -m venv .venv
La carpeta .venv contiene el Python aislado del proyecto. No escribiremos código propio dentro de esa carpeta.
En Windows PowerShell:
.venv\Scripts\Activate.ps1
En Windows CMD:
.venv\Scripts\activate.bat
En Linux o macOS:
source .venv/bin/activate
Después de activar el entorno, la terminal suele mostrar (.venv). Ese indicador nos recuerda que las instalaciones se harán dentro del proyecto.
Para verificar que estamos usando el Python del entorno virtual:
python -c "import sys; print(sys.executable)"
La ruta debe incluir la carpeta .venv. Si no aparece, el entorno virtual no está activo o el editor está usando otro intérprete.
Actualiza pip dentro del entorno virtual:
python -m pip install --upgrade pip
Este paso evita errores por usar una versión antigua del instalador de paquetes.
Instalamos pytest con:
python -m pip install pytest
Verificamos la instalación:
python -m pytest --version
Usar python -m pytest garantiza que se ejecute el pytest instalado en el entorno virtual activo.
pytest-cov es una extensión que permite medir cobertura de código usando pytest. La veremos en profundidad en otro tema, pero podemos instalarla ahora como ejemplo de dependencia de testing:
python -m pip install pytest-cov
Luego comprobamos que pytest reconoce la opción de cobertura:
python -m pytest --help
En la ayuda debería aparecer la opción --cov.
Para ver las dependencias instaladas en el entorno:
python -m pip list
La salida incluirá paquetes como pytest, pytest-cov y sus dependencias internas.
Para guardar el estado exacto de las dependencias instaladas:
python -m pip freeze > requirements.txt
Esto crea un archivo requirements.txt con versiones concretas. Un ejemplo posible:
coverage==7.8.0
iniconfig==2.1.0
packaging==25.0
pluggy==1.5.0
pytest==8.3.5
pytest-cov==6.1.1
Las versiones pueden variar según el momento en que instales los paquetes.
Hay dos estilos frecuentes para requirements.txt:
| Estilo | Ejemplo | Uso |
|---|---|---|
| Simple | pytest |
Indica qué paquete se necesita, sin fijar versión exacta. |
| Congelado | pytest==8.3.5 |
Reproduce versiones exactas para mayor estabilidad. |
Para prácticas del curso, un archivo simple suele alcanzar. Para proyectos reales, fijar versiones ayuda a evitar cambios inesperados.
Si recibes un proyecto con requirements.txt, el proceso habitual es:
python -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
En Linux o macOS:
python -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
Crea un archivo llamado operaciones.py:
def multiplicar(a, b):
return a * b
def es_par(numero):
return numero % 2 == 0
Luego crea test_operaciones.py:
from operaciones import es_par, multiplicar
def test_multiplicar_dos_numeros():
assert multiplicar(4, 5) == 20
def test_detectar_numero_par():
assert es_par(8) is True
Ejecuta:
python -m pytest
Si todo está correcto, verás una salida similar a:
collected 2 items
test_operaciones.py .. [100%]
2 passed in 0.02s
Como instalamos pytest-cov, también podemos ejecutar:
python -m pytest --cov=operaciones
La salida mostrará una tabla de cobertura. Todavía no analizaremos ese resultado en detalle; por ahora solo queremos confirmar que la dependencia funciona.
Para salir del entorno virtual:
deactivate
Cuando vuelvas al proyecto otro día, deberás activar nuevamente el entorno antes de ejecutar pruebas o instalar dependencias.
.venv; esa carpeta es generada por Python..venv entre computadoras; reconstruye el entorno con requirements.txt.pytest no se instaló en ese entorno.python -m pip en lugar de ejecutar pip directamente..venv.pip freeze.mkdir dependencias-demo
cd dependencias-demo
python -m venv .venv
.venv\Scripts\Activate.ps1
python -c "import sys; print(sys.executable)"
python -m pip install --upgrade pip
python -m pip install pytest
python -m pip install pytest-cov
python -m pip list
python -m pip freeze > requirements.txt
python -m pip install -r requirements.txt
python -m pytest
python -m pytest --cov=operaciones
deactivate
venv crea un entorno aislado por proyecto.python -m pip ayuda a instalar paquetes en el Python correcto.requirements.txt permite reconstruir el entorno en otra computadora.python -m pytest evita confusiones con varias instalaciones de Python..venv no se modifica manualmente ni se copia como parte del código del proyecto.En este tema profundizamos en el manejo de entornos virtuales y dependencias. Este conocimiento es básico para trabajar con pruebas en Python, porque las herramientas como pytest, pytest-cov y otras extensiones deben instalarse y ejecutarse en un entorno controlado.
En el próximo tema comenzaremos con las primeras pruebas usando unittest, la biblioteca de testing incluida en Python.