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
assertpara verificar quesuma(a, b)devuelve el resultado esperado. - Si cualquier
assertfalla,pytestlo reportará como una prueba fallida.
- Define una función de prueba
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.parametrizepara pasar diferentes combinaciones de valores a la funcióntest_suma_parametrica. pytestejecuta la función de prueba una vez por cada conjunto de parámetros.
- Usa el decorador
-
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_pruebaque devuelve un diccionario con datos. - La prueba
test_suma_con_fixtureusa esta fixture para obtener los datos y realizar la prueba.
- Define una fixture llamada
-
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...