En los temas anteriores preparamos estructura, configuración, nombres y un primer script de ejecución. Ahora vamos a practicar la ejecución completa de una suite automatizada desde la terminal.
El objetivo es que puedas ejecutar todas las pruebas de forma repetible, entender la salida, generar reportes y documentar los comandos principales del proyecto.
La suite completa es el conjunto de pruebas automatizadas que el proyecto reconoce como parte de su verificación habitual. En nuestro caso, pytest busca las pruebas en la carpeta tests, según la configuración de pytest.ini.
Ejecutar la suite completa significa lanzar todas esas pruebas con un único comando y revisar si el resultado general fue exitoso o fallido.
Antes de ejecutar la suite, asegúrate de estar en la raíz del proyecto:
cd automatizacion-pruebas-python
La raíz es la carpeta donde están archivos como pytest.ini, requirements.txt, run_tests.py y las carpetas app y tests.
Ejecutar desde otra carpeta puede causar errores de importación o hacer que pytest no encuentre la configuración esperada.
En Windows PowerShell:
.venv\Scripts\Activate.ps1
En Windows CMD:
.venv\Scripts\activate.bat
En Linux o macOS:
source .venv/bin/activate
Luego verifica que Python apunte al entorno del proyecto:
python -c "import sys; print(sys.executable)"
Desde la raíz del proyecto, ejecuta:
python -m pytest
Como configuramos pytest.ini, pytest sabe que debe buscar pruebas dentro de tests y aplicar las opciones definidas en addopts.
También puedes indicar explícitamente la carpeta de pruebas:
python -m pytest tests
Este comando es útil cuando quieres ser explícito o cuando estás trabajando en un proyecto sin testpaths configurado.
Si quieres ver cada prueba ejecutada, usa:
python -m pytest -v
En nuestro proyecto, -v ya puede estar incluido en pytest.ini. Aun así, es importante reconocerlo porque aparece con frecuencia en proyectos reales.
También podemos ejecutar la suite usando el script creado en temas anteriores:
python run_tests.py
El script centraliza el comando y puede agregar opciones como reportes o selección de pruebas. Esto evita que cada persona escriba comandos distintos.
Si tu script tiene la opción --reporte, ejecuta:
python run_tests.py --reporte
También puedes hacerlo directamente con pytest:
python -m pytest --html=reports/reporte.html --self-contained-html
El reporte ayuda a revisar resultados cuando la salida de consola no es suficiente.
Una ejecución exitosa muestra que todas las pruebas pasaron. La salida puede incluir una línea parecida a:
12 passed in 0.45s
El número exacto dependerá de cuántas pruebas tengas en tu proyecto. Lo importante es que no haya fallas, errores ni pruebas interrumpidas.
Si una prueba falla, pytest muestra el nombre de la prueba, el archivo y la diferencia entre el valor esperado y el valor obtenido.
Por ejemplo, una falla puede mostrar algo como:
FAILED tests/test_calculadora.py::test_sumar_devuelve_la_suma_de_dos_numeros
El nombre de la prueba debe ayudarte a entender qué comportamiento se rompió. Por eso las convenciones del tema anterior son importantes.
Cuando hay muchas pruebas, a veces conviene detenerse en la primera falla:
python -m pytest -x
Si usas el script y agregaste la opción del tema anterior:
python run_tests.py --detener
Esto es útil durante el desarrollo, cuando quieres corregir una falla antes de revisar las demás.
Para obtener una salida más compacta, puedes usar:
python -m pytest --tb=short
En nuestro proyecto esta opción puede estar configurada en pytest.ini. Sirve para reducir la cantidad de líneas cuando una prueba falla.
En algunos casos queremos guardar la salida de consola en un archivo de texto.
En Windows PowerShell:
python -m pytest *> reports/salida.txt
En Linux o macOS:
python -m pytest > reports/salida.txt 2>&1
Esto puede ser útil para adjuntar evidencias o revisar resultados después.
Después de ejecutar una suite, puedes revisar el código de salida.
En Windows PowerShell:
$LASTEXITCODE
En Linux o macOS:
echo $?
Un valor 0 indica que la ejecución terminó correctamente. Un valor distinto de 0 indica fallas o errores de ejecución.
Una rutina práctica de trabajo puede ser:
El punto central es que la ejecución sea repetible y no dependa de pasos improvisados.
Si quieres simplificar la ejecución en Windows PowerShell, puedes crear run_tests.ps1:
.venv\Scripts\Activate.ps1
python run_tests.py --reporte
Luego ejecuta:
.\run_tests.ps1
Este archivo es opcional. El script principal del curso seguirá siendo run_tests.py.
En Linux o macOS puedes crear run_tests.sh:
#!/usr/bin/env bash
source .venv/bin/activate
python run_tests.py --reporte
Dar permiso de ejecución:
chmod +x run_tests.sh
Ejecutar:
./run_tests.sh
Agrega una sección de ejecución al README.md:
## Ejecución de pruebas
Ejecutar suite completa:
python -m pytest
Ejecutar usando el script del proyecto:
python run_tests.py
Ejecutar y generar reporte HTML:
python run_tests.py --reporte
Detener en la primera falla:
python run_tests.py --detener
La documentación evita confusiones y ayuda a que todos ejecuten la suite de la misma forma.
test_.tests.reports o que el script la crea.sys.executable.Actualiza run_tests.py para agregar un argumento --salida. Cuando se use, debe guardar la salida de pytest en reports/salida.txt.
El objetivo es poder ejecutar:
python run_tests.py --salida
y obtener un archivo de texto con el resultado de la ejecución.
Agrega el argumento:
parser.add_argument("--salida", action="store_true", help="Guarda la salida en reports/salida.txt")
Luego modifica la ejecución en main:
def main():
args = leer_argumentos()
comando = construir_comando(args)
print("Ejecutando:", " ".join(comando))
if args.salida:
REPORTS_DIR.mkdir(exist_ok=True)
with open(REPORTS_DIR / "salida.txt", "w", encoding="utf-8") as archivo:
resultado = subprocess.run(
comando,
stdout=archivo,
stderr=subprocess.STDOUT,
text=True,
check=False,
)
else:
resultado = subprocess.run(comando, check=False)
return resultado.returncode
Después ejecuta:
python run_tests.py --salida
Antes de continuar con el próximo tema, verifica lo siguiente:
python -m pytest.run_tests.py ejecuta la suite completa.En este tema automatizamos la ejecución de la suite completa desde la terminal. Practicamos comandos directos con python -m pytest, ejecución mediante script, generación de reportes y revisión de códigos de salida.
Una suite automatizada tiene valor cuando se ejecuta con frecuencia y de forma consistente. En el próximo tema veremos cómo seleccionar pruebas por archivo, nombre, carpeta y expresión para trabajar con partes específicas de la suite.