0Pricing
Python Academy · Lección

Escritura de sus primeras pruebas con pytest

Comprenda el descubrimiento de pruebas, las sentencias assert y la estructura de las pruebas.

Escritura de sus primeras pruebas con pytest es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 1 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.

Instalar pytest

Instale pytest con pip. No requiere ninguna configuración obligatoria: detecta las pruebas automáticamente.

# pip install pytest

# Run all tests
# pytest

# Run a specific file
# pytest test_math.py

Una función de prueba sencilla

pytest recopila cualquier función cuyo nombre comience por test_. Utilice sentencias assert normales; pytest las reescribe para mostrar resultados detallados.

# test_math.py
def add(a, b):
    return a + b

def test_add():
    assert add(2, 3) == 5

def test_add_negative():
    assert add(-1, 1) == 0

Archivos y detección de pruebas

pytest detecta los archivos de prueba llamados test_*.py o *_test.py y recopila las funciones llamadas test_* o las clases llamadas Test*.

tests/
    test_utils.py
    test_models.py
    conftest.py   # shared fixtures

Agrupar pruebas en clases

Agrupe las pruebas relacionadas en una clase cuyo nombre comience por Test. No se necesita unittest.TestCase.

class TestCalculator:
    def test_add(self):
        assert 1 + 1 == 2

    def test_multiply(self):
        assert 3 * 4 == 12

Probar excepciones

Utilice pytest.raises como gestor de contexto para comprobar que se generan excepciones específicas.

import pytest

def divide(a, b):
    if b == 0:
        raise ZeroDivisionError("cannot divide by zero")
    return a / b

def test_divide_by_zero():
    with pytest.raises(ZeroDivisionError, match="cannot divide"):
        divide(10, 0)

La opción -v

Ejecute pytest con -v (modo detallado) para ver el nombre de cada prueba y su estado de aprobación o fallo.

# pytest -v
# test_math.py::test_add PASSED
# test_math.py::test_add_negative PASSED

# Show print output too:
# pytest -v -s

Omitir pruebas

Utilice @pytest.mark.skip o @pytest.mark.skipif para omitir pruebas de forma condicional.

import pytest, sys

@pytest.mark.skip(reason="not implemented yet")
def test_future_feature():
    assert False

@pytest.mark.skipif(sys.platform == "win32", reason="Unix only")
def test_unix_only():
    assert True

Marcar pruebas como fallos esperados

@pytest.mark.xfail marca una prueba que espera que falle. La prueba se considera correcta si falla y muestra una advertencia si se aprueba inesperadamente.

import pytest

@pytest.mark.xfail(reason="known bug #42")
def test_buggy():
    assert 1 == 2  # will fail, but that's expected

Reescritura de assert

pytest reescribe las sentencias assert para mostrar los valores que provocaron un fallo, lo que resulta mucho más útil que un simple AssertionError.

def test_list_equal():
    result = [1, 2, 4]
    expected = [1, 2, 3]
    assert result == expected
# AssertionError:
#   assert [1, 2, 4] == [1, 2, 3]
#   At index 2 diff: 4 != 3

conftest.py

pytest carga conftest.py automáticamente. Coloque aquí los fixtures y plugins compartidos sin importarlos explícitamente.

# conftest.py
import pytest

@pytest.fixture
def sample_data():
    return {"key": "value"}

# Any test file in the same dir can use sample_data as a parameter

Ejecutar subconjuntos de pruebas

Utilice -k para ejecutar las pruebas que coincidan con una expresión de palabras clave.

# Run tests containing "add"
# pytest -k "add"

# Run tests NOT containing "slow"
# pytest -k "not slow"

# Run a specific test
# pytest test_math.py::test_add

Comprobación rápida

¿Con qué prefijo debe comenzar el nombre de una función de prueba de pytest para que se detecte automáticamente?

Resumen

pytest no requiere código repetitivo: asigne a los archivos el nombre test_*.py, a las funciones el nombre test_* y utilice assert normal. Use pytest.raises para las excepciones, -v para el modo detallado y conftest.py para los fixtures compartidos.

Preguntas frecuentes

¿La lección «Escritura de sus primeras pruebas con pytest» es gratis?

Sí — el texto completo de «Escritura de sus primeras pruebas con pytest» 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 «Escritura de sus primeras pruebas con pytest»?

Comprenda el descubrimiento de pruebas, las sentencias assert y la estructura de las pruebas. 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 1 de 4.

¿Cuánto tiempo toma la lección «Escritura de sus primeras pruebas con pytest»?

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