Pytest: Guía de testing en Python para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Pytest: Guía completa de testing en Python

Introducción a Pytest

El testing es una parte fundamental del desarrollo de software. Sin pruebas de calidad, es difícil garantizar la fiabilidad del código y su funcionamiento estable al realizar cambios. Pytest es un framework moderno, potente y fácil de usar para pruebas automatizadas en Python, que simplifica enormemente el proceso de escribir y ejecutar tests.

Pytest ha ganado popularidad en la comunidad de desarrolladores gracias a su sintaxis concisa, sus amplias capacidades de extensión y su potente sistema de fixtures. Supera significativamente al módulo estándar unittest en facilidad de uso y velocidad de desarrollo de pruebas.

Instalación y configuración de Pytest

Instalación mediante pip

pip install pytest

Verificación de la instalación

pytest --version

Primer test sencillo

Crea un archivo test_example.py:

def test_addition():
    assert 2 + 2 == 4

def test_string_operations():
    text = "Hello, World!"
    assert "Hello" in text
    assert len(text) == 13

Ejecución de los tests

pytest

Pytest detectará automáticamente todos los archivos y funciones de prueba que sigan las convenciones de nomenclatura.

Estructura y organización de los tests

Convenciones de nomenclatura

Pytest utiliza las siguientes convenciones para la detección automática de pruebas:

  • Archivos de test: test_*.py o *_test.py
  • Funciones de test: def test_...()
  • Clases de test: class Test... (sin método __init__)
  • Métodos de test en clases: def test_...()

Organización de la estructura de tests

project/
├── src/
│   ├── calculator.py
│   └── utils.py
├── tests/
│   ├── test_calculator.py
│   ├── test_utils.py
│   └── conftest.py
└── pytest.ini

Ejecución de tests con diferentes parámetros

# Ejecutar todos los tests
pytest

# Ejecutar tests en un directorio específico
pytest tests/

# Ejecutar un archivo específico
pytest test_calculator.py

# Ejecutar un test concreto
pytest test_calculator.py::test_add

# Ejecutar tests de una clase
pytest test_calculator.py::TestCalculator

# Ejecutar un método específico de una clase
pytest test_calculator.py::TestCalculator::test_multiply

Fundamentos para escribir tests

Uso de assert para verificaciones

Pytest utiliza el operador estándar assert de Python para comprobar condiciones:

def test_basic_assertions():
    # Verificar igualdad
    assert 2 + 2 == 4
    
    # Verificar desigualdad
    assert 3 * 3 != 8
    
    # Verificar pertenencia
    assert "Python" in "Python testing"
    
    # Verificar tipos
    assert isinstance(42, int)
    
    # Verificar verdadero
    assert bool([1, 2, 3])
    
    # Verificar falso
    assert not bool([])

Testing de excepciones

import pytest

def divide(a, b):
    if b == 0:
        raise ValueError("No se permite la división por cero")
    return a / b

def test_division_by_zero():
    with pytest.raises(ValueError):
        divide(10, 0)

def test_exception_message():
    with pytest.raises(ValueError, match="división por cero"):
        divide(10, 0)

def test_exception_type():
    with pytest.raises(ZeroDivisionError):
        1 / 0

Organización de tests en clases

class TestCalculator:
    def test_addition(self):
        assert 2 + 3 == 5
    
    def test_subtraction(self):
        assert 10 - 4 == 6

Recommendations