Generar pruebas automatizadas utilizando PyTest para rutas FastAPI permite identificar rápidamente errores al hacer cambios en aplicaciones. Asegurar un correcto funcionamiento en operaciones críticas como creación, lectura, edición y eliminación de un recurso, como el Customer, reduce considerablemente el riesgo de dañar módulos relacionados.
¿Por qué son importantes las pruebas automáticas en el desarrollo?
Las pruebas automáticas son fundamentales al realizar modificaciones, dado que permiten detectar de inmediato efectos no deseados de cualquier cambio en nuestro código. Con ellas podemos:
Validar rápidamente distintas funcionalidades, como creación y edición.
Identificar errores provocados indirectamente al modificar dependencias compartidas.
Realizar chequeos continuos y constantes sin verificaciones manuales exhaustivas.
Al implementar estas pruebas en las rutas específicas, como en nuestro módulo Customers, aseguramos una cobertura completa para escenarios críticos.
¿Cómo crear pruebas automatizadas para rutas con PyTest y FastAPI?
Utilizaremos PyTest junto con FastAPI para escribir y ejecutar pruebas en nuestro módulo Customers.
¿Cómo organizamos las pruebas en un proyecto de FastAPI?
La organización clara de pruebas es esencial para proyectos escalables:
Crea una carpeta específica para pruebas dentro del proyecto (App).
Añade un archivo __init__.py para convertirla en módulo Python.
Agrupa prueba previamente creada aquí, usando claros nombres como test-customers.py para pruebas específicas.
¿Qué pasos seguir al escribir una prueba en PyTest para FastAPI?
Para escribir pruebas claras y efectivas:
Utiliza un cliente test client que realiza peticiones HTTP a rutas FastAPI.
Realiza la petición POST a la ruta con Json válido:
Invitamos a que continúes creando pruebas para otros recursos disponibles como invoice o transactions para fortalecer tu aplicación y mantener la integridad del código ante cambios constantes.
Pruebas Unitarias para CRUD de Clientes en FastAPI
Pruebas Unitarias para CRUD de Clientes en FastAPI
Recursos
Resumen
Generar pruebas automatizadas utilizando PyTest para rutas FastAPI permite identificar rápidamente errores al hacer cambios en aplicaciones. Asegurar un correcto funcionamiento en operaciones críticas como creación, lectura, edición y eliminación de un recurso, como el Customer, reduce considerablemente el riesgo de dañar módulos relacionados.
¿Por qué son importantes las pruebas automáticas en el desarrollo?
Las pruebas automáticas son fundamentales al realizar modificaciones, dado que permiten detectar de inmediato efectos no deseados de cualquier cambio en nuestro código. Con ellas podemos:
Validar rápidamente distintas funcionalidades, como creación y edición.
Identificar errores provocados indirectamente al modificar dependencias compartidas.
Realizar chequeos continuos y constantes sin verificaciones manuales exhaustivas.
Al implementar estas pruebas en las rutas específicas, como en nuestro módulo Customers, aseguramos una cobertura completa para escenarios críticos.
¿Cómo crear pruebas automatizadas para rutas con PyTest y FastAPI?
Utilizaremos PyTest junto con FastAPI para escribir y ejecutar pruebas en nuestro módulo Customers.
¿Cómo organizamos las pruebas en un proyecto de FastAPI?
La organización clara de pruebas es esencial para proyectos escalables:
Crea una carpeta específica para pruebas dentro del proyecto (App).
Añade un archivo __init__.py para convertirla en módulo Python.
Agrupa prueba previamente creada aquí, usando claros nombres como test-customers.py para pruebas específicas.
¿Qué pasos seguir al escribir una prueba en PyTest para FastAPI?
Para escribir pruebas claras y efectivas:
Utiliza un cliente test client que realiza peticiones HTTP a rutas FastAPI.
Realiza la petición POST a la ruta con Json válido:
Invitamos a que continúes creando pruebas para otros recursos disponibles como invoice o transactions para fortalecer tu aplicación y mantener la integridad del código ante cambios constantes.
Para realizar pruebas apuntando a una base de datos específica llamada db_test, he implementado una solución basada en una variable de entorno llamada IS_TEST, que acepta valores "True" o "False". Si IS_TEST es "True", mi aplicación utiliza la base de datos creada exclusivamente para las pruebas (db_test), permitiéndome validar datos previamente ingresados o comportamientos específicos. En su estado normal, las aplicaciones están configuradas para conectarse a la base de datos principal definida en db.py.
¿Existen otras prácticas recomendadas o estrategias más eficientes para apuntar a una base de datos de pruebas y garantizar una validación robusta de las condiciones de ingreso de datos?
La clase se centra en la implementación de pruebas automáticas en endpoints de FastAPI. A continuación se presenta un resumen paso a paso con anotaciones importantes:
Importancia de las pruebas: Las pruebas permiten validar que las operaciones de creación, edición y eliminación funcionan correctamente, evitando errores en otras partes del código.
Estructura de pruebas: Se crea una carpeta para las pruebas, incluyendo un archivo __init__.py para agrupar módulos.
Ejemplo de prueba: Se crea una prueba llamada test_create_customer, utilizando el cliente previamente definido para hacer un POST al endpoint de customers con un JSON con los datos necesarios.
Validación de respuesta: Se verifica que el status code devuelto sea 201 (created). Es crucial hacer un assert para comprobar que la prueba se ejecute correctamente.
Errores comunes: Si el status code no es el esperado, se revisa el código del endpoint para asegurarse de que se retorne el código correcto.
Adición de más pruebas: Se sugiere crear pruebas adicionales para otros métodos como read, update y delete, asegurando el correcto funcionamiento de todos los recursos del API.
Este proceso ayuda a garantizar que las modificaciones en el código no afecten negativamente a otros módulos de la aplicación.
Bueno aporto mi granito de arena para el que como ami no le gustaba ver el warning al ejecutar los tests. @asynccontextmanagerasync def create_all_tables(app: FastAPI): SQLModel.metadata.create_all(engine) yield
Lo que hice fue ponerle este decorador y hacer asincrona la funcion que genera las tablas de la base