Pruebas unitarias en Python con pytest: una guía completa

Domine las pruebas unitarias y TDD con pytest

Aprende a realizar pruebas unitarias de forma eficaz en Python con pytest. Esta guía completa cubre los conceptos básicos de pytest, ejemplos del mundo real y prácticas de desarrollo basado en pruebas (TDD) para ayudarte a escribir código robusto y fácil de mantener.

Programación
Autor/a
Afiliación
Fecha de publicación

8 de febrero de 2024

Fecha de modificación

9 de mayo de 2025

Palabras clave

Tutorial de pytest, Pruebas unitarias en Python, TDD en Python, Ejemplos de pytest, Desarrollo basado en pruebas Python

Introducción

Las pruebas unitarias son una parte esencial de la creación de software robusto y fácil de mantener. Al escribir pruebas para unidades individuales de código, te aseguras de que tus funciones se comportan como se espera y puedes detectar errores en una fase temprana del proceso de desarrollo. En esta guía, le presentaremos pytest, un potente marco de pruebas para Python, y le mostraremos cómo escribir pruebas, adoptar prácticas de desarrollo basado en pruebas (TDD) e incorporar ejemplos del mundo real a su flujo de trabajo.



¿Por qué las pruebas unitarias y el TDD?

Las pruebas le ayudan a detectar errores de forma temprana y le dan la confianza necesaria para refactorizar el código sin romper la funcionalidad. El desarrollo basado en pruebas (TDD) va más allá y escribe las pruebas antes que el código, lo que guía el diseño y garantiza una base de código robusta.

Primeros pasos con pytest

Instalación de pytest

Para empezar, instale pytest con pip:

pip install pytest

Escribir tu primera prueba

Creemos una función sencilla y escribamos una prueba para ella. Supongamos que tenemos una función add:

def add(a, b):
    return a + b

Ahora, cree una prueba para esta función:

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

Para ejecutar la prueba, ejecute pytest en su terminal.

Desarrollo basado en pruebas (TDD) con pytest

El TDD consiste en escribir pruebas antes de escribir el código. He aquí un flujo de trabajo sencillo:

  1. Escribe una prueba que defina el comportamiento deseado de una función.
  2. Ejecuta la prueba para ver si falla.
  3. Escriba el código mínimo necesario para pasar la prueba.
  4. Refactoriza el código si es necesario y repite.

Ejemplo: flujo de trabajo TDD

Supongamos que necesitamos una función multiply que multiplique dos números. Empezamos escribiendo una prueba:

def test_multiply():
    assert multiply(3, 4) == 12
    assert multiply(-2, 5) == -10

Ejecuta pytest y verás que la prueba falla porque multiply no está definido. Ahora, implementa la función:

def multiply(a, b):
    return a * b

Vuelva a ejecutar pytest para asegurarse de que la prueba se supera.

Funciones avanzadas de pytest

Pruebas parametrizadas

pytest le permite ejecutar una función de prueba con diferentes conjuntos de entradas utilizando el decorador @pytest.mark.parametrize.

#| label: parameterized-tests, code-fold: true
import pytest

@pytest.mark.parametrize("a,b,expected", [
    (2, 3, 6),
    (5, 5, 25),
    (-1, 8, -8),
])
def test_multiply_param(a, b, expected):
    assert multiply(a, b) == expected

Fixtures en pytest

Los accesorios de pytest te permiten configurar los datos o el estado antes de ejecutar las pruebas y limpiarlos después.

import pytest

@pytest.fixture
def sample_data():
    return [1, 2, 3, 4, 5]

def test_sum(sample_data):
    assert sum(sample_data) == 15

Prácticas recomendadas para pruebas unitarias

  • Escribir pruebas para cada función:
    Asegúrese de que cada unidad de su código tenga las pruebas correspondientes.
  • Mantener las pruebas independientes:
    Las pruebas no deben depender unas de otras; cada prueba debe configurar su propio contexto.
  • Usa nombres de prueba descriptivos:
    Asigne nombres claros a las funciones de prueba para que sea fácil diagnosticar los fallos.
  • Aproveche los accesorios y la parametrización:
    Utilice estas funciones para escribir pruebas más limpias y eficientes.
  • Ejecutar pruebas con frecuencia:
    Integra las pruebas en tu proceso de desarrollo para detectar problemas de forma temprana.

Conclusión

Al adoptar pytest y las prácticas de TDD, puede crear un conjunto de pruebas robusto que mejora la calidad y la fiabilidad del código. Esta guía le ha presentado los conceptos básicos para escribir pruebas, crear fixtures, parametrizar pruebas y seguir flujos de trabajo TDD en Python. Con estas herramientas, estarás mejor equipado para mantener y escalar tus proyectos.

Lecturas adicionales

Disfruta de las pruebas y de la creación de aplicaciones Python fiables con pytest!

Explorar más artículos

Nota

Aquí hay más artículos de la misma categoría para ayudarte a profundizar en el tema.

placeholder

placeholder
No hay resultados
Volver arriba

Reutilización

Cómo citar

BibTeX
@online{kassambara2024,
  author = {Kassambara, Alboukadel},
  title = {Pruebas unitarias en Python con pytest: una guía completa},
  date = {2024-02-08},
  url = {https://www.datanovia.com/es/learn/programming/python/tools/pytest-unit-testing.html},
  langid = {es}
}
Por favor, cita este trabajo como:
Kassambara, Alboukadel. 2024. “Pruebas unitarias en Python con pytest: una guía completa.” February 8, 2024. https://www.datanovia.com/es/learn/programming/python/tools/pytest-unit-testing.html.