Cuando ejecutamos una suite automatizada, la consola es el primer reporte que vemos. Una buena lectura de esa salida permite detectar fallas, ubicar pruebas lentas y entender qué ocurrió.
En este tema practicaremos opciones de pytest para controlar la salida: modo corto, detallado, trazas de error, resumen de fallas y tiempos de ejecución.
El comando base sigue siendo:
python -m pytest
Según la configuración de pytest.ini, este comando puede aplicar opciones por defecto como -v o --tb=short.
La opción -v muestra cada prueba ejecutada:
python -m pytest -v
Es útil cuando quieres ver qué pruebas se ejecutan y cuáles pasan o fallan.
Una salida detallada puede mostrar líneas como:
tests/test_carrito.py::test_calcular_total_con_varios_productos_devuelve_suma_total PASSED
La opción -q reduce la cantidad de información:
python -m pytest -q
Es útil cuando quieres una salida más compacta y ya conoces la suite.
Usa -v cuando estás diagnosticando, revisando selección de pruebas o trabajando en una falla. Usa -q cuando solo necesitas saber si la suite pasó o falló.
-v: más información.-q: menos ruido.Cuando una prueba falla, pytest muestra una traza. La opción --tb controla cuánto detalle se muestra.
python -m pytest --tb=short
Otras variantes útiles:
python -m pytest --tb=long
python -m pytest --tb=line
python -m pytest --tb=no
Crea temporalmente tests/test_reporte_consola.py:
def test_falla_de_ejemplo():
assert 2 + 2 == 5
Ejecuta:
python -m pytest tests/test_reporte_consola.py --tb=short
Luego prueba con --tb=line y --tb=long para comparar la salida.
La opción -ra muestra un resumen adicional de pruebas no exitosas o con estados especiales:
python -m pytest -ra
Es útil cuando hay pruebas omitidas, esperadas como falla o con advertencias.
Para detener la ejecución en la primera falla:
python -m pytest -x
Es útil durante diagnóstico. Cuando ya corregiste el problema, vuelve a ejecutar toda la suite.
La opción --durations muestra las pruebas que más tardaron:
python -m pytest --durations=5
Esto lista las cinco pruebas más lentas. Si quieres ver más, aumenta el número.
Para ver la duración de todas las pruebas:
python -m pytest --durations=0
Puede ser útil para investigar una suite pequeña, pero en una suite grande genera mucha salida.
Crea una prueba temporal para practicar tiempos:
import time
import pytest
@pytest.mark.lento
def test_lento_de_ejemplo():
time.sleep(0.2)
assert True
Ejecuta:
python -m pytest --durations=3
pytest captura por defecto lo que imprimen las pruebas. Si quieres ver la salida en tiempo real, puedes usar -s:
python -m pytest -s
Esto puede ayudar durante diagnóstico, pero no conviene dejar impresiones innecesarias en pruebas definitivas.
Para mostrar logs durante la ejecución:
python -m pytest -o log_cli=true --log-cli-level=INFO
Esto puede ser útil para diagnosticar pruebas que usan logging.
Podemos definir opciones por defecto en pytest.ini:
[pytest]
testpaths = tests
python_files = test_*.py
python_functions = test_*
addopts = -v --strict-markers --tb=short -ra
markers =
lento: pruebas que tardan más tiempo en ejecutarse
regresion: pruebas importantes para detectar regresiones
critica: pruebas indispensables para validar el comportamiento principal
Así no repetimos opciones comunes en cada comando.
No conviene poner todas las opciones posibles en addopts. Algunas opciones son para diagnóstico puntual, no para ejecución cotidiana.
Buenas candidatas para addopts:
-v si quieres salida detallada por defecto.--tb=short para trazas compactas.-ra para resumen adicional.--strict-markers para validar marcadores.Opciones como -s o --durations=0 suelen ser mejores para uso puntual.
En Windows PowerShell:
python -m pytest *> reports/salida.txt
En Linux o macOS:
python -m pytest > reports/salida.txt 2>&1
Esto puede servir para guardar evidencia de una ejecución o revisar un fallo después.
Podemos agregar un argumento al script:
parser.add_argument("--durations", help="Muestra las pruebas más lentas")
Y en construir_comando:
if args.durations:
comando.append(f"--durations={args.durations}")
Uso:
python run_tests.py --durations 5
También podemos permitir elegir el tipo de traza:
parser.add_argument("--tb", choices=["auto", "long", "short", "line", "no"], help="Formato de traceback")
Y en construir_comando:
if args.tb:
comando.append(f"--tb={args.tb}")
Uso:
python run_tests.py --tb line
Cuando una prueba falla, revisa en orden:
La consola debe guiarte hacia la causa probable del problema.
--tb=short o --tb=line.-s solo para diagnóstico.--durations=5.Ejecuta estos comandos y compara la salida:
python -m pytest -q
python -m pytest -v
python -m pytest --tb=line
python -m pytest --durations=5
python -m pytest -ra
Luego agrega a run_tests.py las opciones --durations y --tb.
En leer_argumentos:
parser.add_argument("--durations", help="Muestra las pruebas más lentas")
parser.add_argument("--tb", choices=["auto", "long", "short", "line", "no"], help="Formato de traceback")
En construir_comando:
if args.durations:
comando.append(f"--durations={args.durations}")
if args.tb:
comando.append(f"--tb={args.tb}")
Ejecuta:
python run_tests.py --durations 5 --tb short
Antes de continuar con el próximo tema, verifica lo siguiente:
-v para salida detallada.-q para salida corta.--tb.--durations.-s.pytest.ini tiene opciones útiles sin sobrecargarse.En este tema usamos reportes en consola para diagnosticar ejecuciones de pytest. La salida correcta permite entender fallas, revisar trazas y detectar pruebas lentas sin herramientas adicionales.
En el próximo tema generaremos reportes HTML y JUnit XML para conservar evidencia y compartir resultados con otras herramientas.