¿Qué hace pytest?
pytest: el marco de pruebas más potente de Python con fixtures, parametrización, plugins e integración con frameworks como FastAPI, Django y Flask.
Instalación
pip install pytest
Para instalar plugins adicionales:
pip install pytest-cov pytest-asyncio pytest-django
Uso básico
Crea un archivo test_sample.py:
def func(x):
return x + 1
def test_answer():
assert func(3) == 5
Ejecuta las pruebas:
pytest
Características principales
Fixtures
Los fixtures permiten configurar y limpiar recursos de pruebas de manera modular:
import pytest
@pytest.fixture
def input_value():
return 5
def test_division(input_value):
assert input_value / 2 == 2.5
Parametrización
Prueba múltiples casos con un solo test:
@pytest.mark.parametrize("input,expected", [
(1, 2),
(2, 4),
(3, 6),
])
def test_multiplication(input, expected):
assert input * 2 == expected
Marcadores
Organiza y filtra pruebas con marcadores personalizados:
@pytest.mark.slow
def test_large_computation():
...
Ejecuta solo pruebas lentas:
pytest -m slow
Integración con frameworks
FastAPI
from fastapi.testclient import TestClient
from main import app
def test_read_main():
client = TestClient(app)
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"msg": "Hello World"}
Django
Configura pytest-django en pytest.ini:
[pytest]
DJANGO_SETTINGS_MODULE = myproject.settings
Flask
from flask import Flask
from flask.testing import FlaskClient
def test_hello(client):
response = client.get("/hello")
assert response.status_code == 200
Plugins recomendados
- pytest-cov: Informes de cobertura de código
- pytest-asyncio: Soporte para pruebas asíncronas
- pytest-django: Integración con Django
- pytest-flask: Extensiones para Flask
- pytest-xdist: Ejecución paralela de pruebas
Ejecución avanzada
# Ejecutar pruebas en paralelo
pytest -n 4
# Generar informe de cobertura
pytest --cov=myproject
# Ejecutar pruebas asíncronas
pytest --asyncio-mode=auto
Recursos adicionales
- Documentación oficial: pytest.org
- Repositorio GitHub: pytest-dev/pytest
- Plugins populares: plugincompat.herokuapp.com