Parametrización y cobertura de pruebas
Ejecute pruebas con múltiples entradas mediante @pytest.mark.parametrize.
Parametrización y cobertura de pruebas es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.
@pytest.mark.parametrize
Ejecute la misma prueba con varias entradas mediante @pytest.mark.parametrize. Cada tupla es un caso de prueba independiente.
import pytest
@pytest.mark.parametrize("a,b,expected", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
(10, -5, 5),
])
def test_add(a, b, expected):
assert a + b == expectedUn solo parámetro
Para un solo argumento, pase directamente una lista de valores.
import pytest
@pytest.mark.parametrize("n", [1, 2, 3, 4, 5])
def test_positive(n):
assert n > 0Identificadores de prueba con nombre
Proporcione una lista ids para etiquetar cada conjunto de parámetros y obtener una salida más clara.
import pytest
@pytest.mark.parametrize("value,result", [
(2, True),
(3, False),
], ids=["even", "odd"])
def test_is_even(value, result):
assert (value % 2 == 0) == resultAcumulación de decoradores parametrize
Acumule dos decoradores parametrize para obtener el producto cartesiano de las entradas.
import pytest
@pytest.mark.parametrize("x", [1, 2])
@pytest.mark.parametrize("y", [10, 20])
def test_product(x, y):
assert x * y > 0 # 4 test cases: (1,10),(1,20),(2,10),(2,20)pytest-cov: instalación
Instale pytest-cov para medir qué líneas del código se ejercitan mediante las pruebas.
# pip install pytest-cov
# Basic usage:
# pytest --cov=mypackage
# HTML report:
# pytest --cov=mypackage --cov-report=htmlLectura de la salida de cobertura
La cobertura muestra qué líneas, ramas o instrucciones no se alcanzaron durante las pruebas.
# Name Stmts Miss Cover
# ------- ----- ---- -----
# mypackage/utils.py 20 3 85%
#
# Missing: lines 45, 67, 88Cobertura de ramas
Use --cov-branch para comprobar si se han probado ambas ramas de las condicionales.
# pytest --cov=mypackage --cov-branch
def is_positive(n):
if n > 0: # branch 1: True
return True
return False # branch 2: FalseFallar con una cobertura baja
Use --cov-fail-under=N para que la compilación falle si la cobertura baja de N por ciento.
# pytest --cov=mypackage --cov-fail-under=80
# FAIL Required test coverage of 80% not reached. Total: 72%Configuración de .coveragerc
Configure las exclusiones de cobertura en .coveragerc para omitir el código repetitivo.
# .coveragerc
[run]
omit =
*/migrations/*
*/tests/*
setup.py
[report]
exclude_lines =
pragma: no cover
if TYPE_CHECKING:Qué significa una buena cobertura
Una cobertura alta no garantiza que las pruebas sean correctas. Procure incluir aserciones significativas, no solo alcanzar líneas. Entre un 80 y un 90 % es un objetivo práctico para la mayoría de los proyectos.
# A covered but useless test:
def test_nothing():
is_positive(5) # no assert — 100% coverage, zero confidence
# A meaningful test:
def test_positive():
assert is_positive(5) is True
assert is_positive(-1) is FalseCombinar parametrize y cobertura
Las pruebas parametrizadas mejoran la cobertura de forma natural al recorrer varias rutas del código con una sola definición de prueba.
import pytest
@pytest.mark.parametrize("n,expected", [
(5, True), (-1, False), (0, False)
])
def test_is_positive(n, expected):
assert is_positive(n) == expectedComprobación rápida
¿Qué hace --cov-fail-under=90 en una ejecución de pytest?
Resumen
Use @pytest.mark.parametrize para probar varias entradas de forma clara. Mida la cobertura del código con pytest-cov, supervise las ramas con --cov-branch y exija mínimos con --cov-fail-under.
Preguntas frecuentes
¿La lección «Parametrización y cobertura de pruebas» es gratis?
Sí — el texto completo de «Parametrización y cobertura de pruebas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Parametrización y cobertura de pruebas»?
Ejecute pruebas con múltiples entradas mediante @pytest.mark.parametrize. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Python Academy?
No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Parametrización y cobertura de pruebas»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Python Academy?
Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Escritura de sus primeras pruebas con pytest
- Fixtures y configuración/desmontaje
- Parametrización y cobertura de pruebas
- Simulación con unittest.mock