Pruebas Parametrizadas con PyTest: Instalación y Ejecución

Clase 19 de 20Curso de Unit Testing en Python

Resumen

Python ofrece una gran variedad de herramientas, y una de las más útiles para pruebas automatizadas es PyTest. PyTest mejora considerablemente la experiencia del desarrollador al permitir escribir y ejecutar pruebas de manera más eficiente. En esta guía veremos cómo instalar PyTest, crear pruebas parametrizadas y ejecutar un ejemplo básico.

¿Cómo instalar y configurar PyTest?

  • Abre la terminal y ejecuta el siguiente comando para instalar PyTest:
    pip install pytest
    
  • Recuerda agregarlo a tu archivo requirements.txt con:
    pip freeze | grep pytest > requirements.txt
    

¿Cómo crear una prueba con PyTest?

  1. En la carpeta de pruebas, crea un archivo llamado test_pytest.py.
  2. Importa PyTest en tu archivo:
    import pytest
    
  3. Crea una función de prueba simple como esta:
    def test_suma():
        a = 4
        b = 4
        assert a + b == 8
    
  4. Ejecuta la prueba con el siguiente comando:
    pytest test_pytest.py
    

PyTest no requiere la creación de clases para agrupar pruebas, lo cual simplifica el código. En este caso, las pruebas se agrupan por archivo.

¿Cómo parametrizar una prueba en PyTest?

  1. Utiliza decoradores de PyTest para parametrizar la prueba:
    @pytest.mark.parametrize("amount, expected", [
        (100, 5000),
        (200, 5500),
        (300, 6000)
    ])
    def test_balance(amount, expected):
        assert calcular_balance(amount) == expected
    
  2. En este ejemplo, la función de prueba recibe varios casos con valores diferentes de amount y expected.
  3. Ejecuta las pruebas:
    pytest -v
    

¿Qué ventajas ofrece PyTest al ejecutar pruebas?

  • PyTest ofrece mensajes de error detallados y fáciles de leer, resaltados con colores.
  • Los errores incluyen los valores específicos que causaron la falla.
  • Con la opción -v, PyTest detalla qué pruebas se ejecutaron y sus resultados.

¿Qué ocurre si una prueba falla?

Si una prueba falla, PyTest te indicará exactamente qué valores no coincidieron. Por ejemplo, si uno de los valores esperados es incorrecto:

def test_balance():
    assert calcular_balance(100) == 5400  # Este valor está incorrecto

Al ejecutar nuevamente la prueba, PyTest te mostrará la diferencia entre el valor esperado y el real.

Reto

Refactoriza todas las pruebas de tu proyecto para que utilicen PyTest, aplicando lo que hemos visto sobre parametrización y el uso de asserts más sencillos.