Curso de python nivel medio

Introducción a pytest

pytest es una herramienta poderosa y fácil de usar para realizar pruebas en Python. Es muy popular porque es más simple y flexible que unittest, y te permite escribir pruebas de manera concisa. pytest automáticamente encuentra y ejecuta tus pruebas sin necesidad de mucha configuración.

Instalación de pytest

Antes de empezar, necesitas instalar pytest. Puedes hacerlo con pip:

1pip install pytest

Creación y ejecución de pruebas con pytest

Para crear pruebas con pytest, simplemente escribe funciones de prueba en archivos cuyos nombres empiecen con test_ o terminen con _test.py. Las funciones de prueba deben empezar también con test_.

Ejemplo básico con pytest

Supongamos que tienes una función en un archivo llamado mi_codigo.py:

Archivo: mi_codigo.py

1def suma(a, b):
2    return a + b

Ahora, crea un archivo de prueba:

Archivo: test_mi_codigo.py

1def test_suma():
2    assert suma(3, 5) == 8
3    assert suma(-1, 1) == 0
4    assert suma(0, 0) == 0
  • ¿Qué hace este código?:
    • Define una función de prueba test_suma.
    • Usa assert para verificar que suma(a, b) devuelve el resultado esperado.
    • Si cualquier assert falla, pytest lo reportará como una prueba fallida.

Ejecutar pruebas con pytest

Para ejecutar las pruebas, simplemente abre la terminal o línea de comandos y escribe:

1pytest

pytest buscará automáticamente archivos que empiecen con test_ o terminen con _test.py y ejecutará todas las funciones de prueba que encuentre.

  • Resultado en pantalla si todas las pruebas pasan:
    =========================== test session starts ============================
    collected 1 item                                                               
    
    test_mi_codigo.py .                                                  [100%]  
    
    =========================== 1 passed in 0.01s =============================

Este resultado indica que todas las pruebas pasaron.

Pruebas paramétricas

Las pruebas paramétricas te permiten ejecutar una misma prueba con diferentes conjuntos de datos, lo que es muy útil para evitar la duplicación de código de prueba.

Ejemplo de pruebas paramétricas con pytest

1import pytest
2from mi_codigo import suma
3
4@pytest.mark.parametrize("a, b, resultado_esperado", [
5    (3, 5, 8),
6    (-1, 1, 0),
7    (0, 0, 0),
8    (-2, -3, -5)
9])
10def test_suma_parametrica(a, b, resultado_esperado):
11    assert suma(a, b) == resultado_esperado
  • ¿Qué hace este código?:

    • Usa el decorador @pytest.mark.parametrize para pasar diferentes combinaciones de valores a la función test_suma_parametrica.
    • pytest ejecuta la función de prueba una vez por cada conjunto de parámetros.
  • Resultado en pantalla:

    =========================== test session starts ============================
    collected 4 items                                                              
    
    test_mi_codigo.py ....                                                [100%]  
    
    =========================== 4 passed in 0.01s =============================

Esto indica que todas las combinaciones de pruebas pasaron.

Fixtures en pytest

Las fixtures en pytest son funciones que te permiten establecer un contexto común para varias pruebas. Son útiles para preparar el entorno antes de que se ejecuten las pruebas, como inicializar una base de datos o crear archivos temporales.

Ejemplo de uso de fixtures con pytest

1import pytest
2
3@pytest.fixture
4def datos_de_prueba():
5    return {"a": 3, "b": 5, "resultado_esperado": 8}
6
7def test_suma_con_fixture(datos_de_prueba):
8    a = datos_de_prueba["a"]
9    b = datos_de_prueba["b"]
10    resultado_esperado = datos_de_prueba["resultado_esperado"]
11    assert suma(a, b) == resultado_esperado
  • ¿Qué hace este código?:

    • Define una fixture llamada datos_de_prueba que devuelve un diccionario con datos.
    • La prueba test_suma_con_fixture usa esta fixture para obtener los datos y realizar la prueba.
  • Resultado en pantalla:

    =========================== test session starts ============================
    collected 1 item                                                               
    
    test_mi_codigo.py .                                                  [100%]  
    
    =========================== 1 passed in 0.01s =============================

Esto indica que la prueba con la fixture pasó correctamente.

Conclusión

pytest es una herramienta poderosa y flexible para realizar pruebas en Python. Es más simple de usar que unittest y permite escribir pruebas concisas y eficaces. Con pruebas paramétricas, puedes ejecutar una misma prueba con múltiples conjuntos de datos, y con fixtures, puedes preparar el entorno necesario para tus pruebas. ¡Practica usando pytest para mejorar la calidad y la confiabilidad de tu código Python!

  • Loading...