0Pricing
Python Academy · Lección

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 == expected

Un 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 > 0

Identificadores 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) == result

Acumulació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=html

Lectura 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, 88

Cobertura 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: False

Fallar 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 False

Combinar 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) == expected

Comprobació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

  1. Escritura de sus primeras pruebas con pytest
  2. Fixtures y configuración/desmontaje
  3. Parametrización y cobertura de pruebas
  4. Simulación con unittest.mock
← Volver a Python Academy