En los temas anteriores creamos un proyecto base y organizamos sus carpetas. Ahora instalaremos y verificaremos herramientas que nos ayudarán a ejecutar pruebas automatizadas de forma más práctica.
Trabajaremos con pytest, python-dotenv y algunas extensiones útiles. También aprenderemos a registrar dependencias para que el entorno pueda reconstruirse en otro equipo.
Para esta etapa instalaremos estas dependencias:
.env.No usaremos todas en profundidad en este tema. Las dejaremos instaladas y verificadas para utilizarlas gradualmente en las próximas clases.
Ubícate en la raíz del proyecto automatizacion-pruebas-python y activa el entorno virtual.
En Windows PowerShell:
.venv\Scripts\Activate.ps1
En Windows CMD:
.venv\Scripts\activate.bat
En Linux o macOS:
source .venv/bin/activate
Antes de instalar paquetes, conviene confirmar que el entorno activo es el correcto.
Ejecuta:
python -c "import sys; print(sys.executable)"
La ruta debería apuntar a la carpeta .venv del proyecto. Si apunta a otra instalación, revisa la activación del entorno virtual.
Actualiza pip dentro del entorno activo:
python -m pip install --upgrade pip
Esto evita errores de instalación causados por versiones antiguas del instalador de paquetes.
Instala las herramientas principales:
python -m pip install pytest python-dotenv pytest-xdist pytest-html
Si el comando termina sin errores, las herramientas quedaron instaladas en el entorno virtual del proyecto.
Comprueba que pytest está disponible:
python -m pytest --version
También puedes ejecutar la suite actual:
python -m pytest -v
Si las pruebas de los temas anteriores pasan, el proyecto sigue funcionando después de instalar las nuevas herramientas.
pytest-xdist permite ejecutar pruebas en paralelo. Para verificar que está instalado, ejecuta:
python -m pytest -n auto
La opción -n auto indica que pytest puede usar varios procesos según la capacidad del equipo.
En este momento la suite es pequeña, así que quizá no notes diferencia. El objetivo por ahora es confirmar que la herramienta funciona.
pytest-html permite generar un reporte HTML. Ejecuta:
python -m pytest --html=reports/reporte.html --self-contained-html
Luego revisa que exista el archivo reports/reporte.html. Más adelante veremos reportes con mayor detalle.
Después de instalar herramientas, actualiza el archivo requirements.txt:
python -m pip freeze > requirements.txt
Este archivo permite reconstruir el entorno en otra computadora con:
python -m pip install -r requirements.txt
Registrar dependencias es parte de la automatización: evita que el proyecto funcione solo en la máquina de quien lo creó.
Un archivo .env permite guardar configuración local del proyecto. Crea un archivo llamado .env en la raíz:
APP_ENV=local
TEST_TIMEOUT=5
REPORTS_DIR=reports
Estos valores son simples, pero nos servirán para practicar la lectura de configuración desde Python.
Crea el archivo app/config.py:
import os
from dotenv import load_dotenv
load_dotenv()
def obtener_ambiente():
return os.getenv("APP_ENV", "local")
def obtener_timeout():
return int(os.getenv("TEST_TIMEOUT", "5"))
def obtener_carpeta_reportes():
return os.getenv("REPORTS_DIR", "reports")
La función load_dotenv() carga las variables definidas en el archivo .env.
Crea el archivo tests/test_config.py:
from app.config import obtener_ambiente, obtener_carpeta_reportes, obtener_timeout
def test_obtener_ambiente_desde_env():
assert obtener_ambiente() == "local"
def test_obtener_timeout_desde_env():
assert obtener_timeout() == 5
def test_obtener_carpeta_reportes_desde_env():
assert obtener_carpeta_reportes() == "reports"
Ejecuta:
python -m pytest tests/test_config.py -v
Aunque este curso no depende de Git, es buena práctica preparar un archivo .gitignore para excluir archivos generados o locales.
type nul > .gitignore
En Linux o macOS:
touch .gitignore
Agrega este contenido:
.venv/
__pycache__/
.pytest_cache/
reports/
.env
Esto ayuda a no mezclar archivos del entorno, cachés o configuración local con el código del proyecto.
Cuando ejecutamos pip freeze, el archivo requirements.txt incluye dependencias directas e indirectas. Por ejemplo, al instalar pytest también se instalan paquetes que pytest necesita para funcionar.
Para este curso usaremos requirements.txt como registro simple del entorno completo. En proyectos profesionales puede ser conveniente separar dependencias principales, dependencias de desarrollo y archivos de bloqueo.
Modifica run_tests.py para aceptar una ejecución normal y generar reportes en la carpeta configurada:
import subprocess
import sys
from app.config import obtener_carpeta_reportes
def main():
reporte = f"{obtener_carpeta_reportes()}/reporte.html"
comando = [
sys.executable,
"-m",
"pytest",
"-v",
f"--html={reporte}",
"--self-contained-html",
]
resultado = subprocess.run(comando, check=False)
return resultado.returncode
if __name__ == "__main__":
raise SystemExit(main())
Ahora puedes ejecutar:
python run_tests.py
El script ejecutará la suite y generará un reporte HTML.
Crea un archivo temporal llamado verificar_herramientas.py si quieres comprobar imports básicos:
import dotenv
import pytest
print("pytest:", pytest.__version__)
print("python-dotenv instalado:", dotenv is not None)
Ejecuta:
python verificar_herramientas.py
Después de verificar, puedes eliminar ese archivo porque no forma parte de la aplicación ni de la suite.
python -m pytest o revisa que el entorno virtual esté activo.python-dotenv dentro del entorno virtual.reports o créala antes de ejecutar.-n auto para comprobar si el problema está en la prueba y no en la herramienta.Agrega una nueva variable al archivo .env:
MAX_REINTENTOS=3
Luego agrega en app/config.py una función llamada obtener_max_reintentos que devuelva ese valor como número entero.
Finalmente crea una prueba en tests/test_config.py para verificar que la función devuelve 3.
Agrega esta función a app/config.py:
def obtener_max_reintentos():
return int(os.getenv("MAX_REINTENTOS", "3"))
Y esta prueba a tests/test_config.py:
from app.config import obtener_max_reintentos
def test_obtener_max_reintentos_desde_env():
assert obtener_max_reintentos() == 3
Ejecuta toda la suite:
python -m pytest -v
Antes de continuar con el próximo tema, verifica lo siguiente:
pytest, python-dotenv, pytest-xdist y pytest-html están instalados.python -m pytest -v.requirements.txt fue actualizado..env con configuración local.app/config.py.reports.En este tema instalamos las herramientas básicas que acompañarán la automatización de pruebas durante el curso. También registramos dependencias, leímos configuración desde un archivo .env y generamos un primer reporte HTML.
Con el entorno preparado, en el próximo tema crearemos un primer script de ejecución automática más enfocado en repetir la suite con comandos simples y consistentes.