Pruebas Unitarias en FastAPI
En el capítulo anterior se creó una API RESTful con FastAPI. En este capítulo se mostrará cómo realizar pruebas unitarias a las rutas de la API.
Pruebas Unitarias
Las pruebas unitarias son una técnica de programación que consiste en verificar que una unidad de código (como una función o un método) funcione correctamente. En el caso de una API RESTful, las pruebas unitarias se utilizan para verificar que las rutas de la API devuelvan la respuesta esperada.
Pruebas Unitarias en FastAPI
FastAPI proporciona una forma sencilla de realizar pruebas unitarias a las rutas de la API. Para ello, se utiliza la biblioteca pytest y el módulo test_app.py de FastAPI.
pip install pytest httpx
A continuación se muestra un ejemplo de cómo realizar pruebas unitarias a las rutas de la API creada en el capítulo anterior:
import pytest
from fastapi.testclient import TestClient
from app.main import app
from app.models import Adoption, Animal, Person
= TestClient(app)
client
def test_create_adoption():
= client.post("/adoptions/", json={
response "id": 1,
"animal_id": 1,
"person_id": 1,
"date": "2023-07-30",
"status": "pending"
})assert response.status_code == 200
assert response.json() == {
"id": 1,
"animal_id": 1,
"person_id": 1,
"date": "2023-07-30",
"status": "pending"
}
def test_read_adoptions():
= client.get("/adoptions/")
response assert response.status_code == 200
assert isinstance(response.json(), list)
def test_read_adoption():
test_create_adoption()= client.get("/adoptions/1")
response assert response.status_code == 200
assert response.json()["id"] == 1
def test_create_animal():
= client.post("/animals/", json={
response "id": 1,
"name": "Buddy",
"species": "Dog",
"breed": "Golden Retriever"
})assert response.status_code == 200
assert response.json() == {
"id": 1,
"name": "Buddy",
"species": "Dog",
"breed": "Golden Retriever"
}
def test_read_animals():
= client.get("/animals/")
response assert response.status_code == 200
assert isinstance(response.json(), list)
def test_read_animal():
# Ensure there's at least one animal
test_create_animal() = client.get("/animals/1")
response assert response.status_code == 200
assert response.json()["id"] == 1
def test_create_person():
= client.post("/persons/", json={
response "id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"phone": "1234567890"
})assert response.status_code == 200
assert response.json() == {
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com",
"phone": "1234567890"
}
def test_read_persons():
= client.get("/persons/")
response assert response.status_code == 200
assert isinstance(response.json(), list)
def test_read_person():
# Ensure there's at least one person
test_create_person() = client.get("/persons/1")
response assert response.status_code == 200
assert response.json()["id"] == 1
En el ejemplo anterior se importa la clase TestClient de FastAPI y se crea una instancia de TestClient con la aplicación FastAPI. Luego se definen dos pruebas unitarias: una para verificar que la ruta /adoptions/ devuelva una lista vacía de adopciones y otra para verificar que la ruta /adoptions/ cree una nueva adopción con los datos proporcionados.
Para ejecutar las pruebas unitarias, se utiliza el comando pytest en la terminal:
pytest
Al ejecutar las pruebas unitarias, se mostrará el resultado de las pruebas en la terminal. Si todas las pruebas pasan, se mostrará un mensaje indicando que todas las pruebas han pasado correctamente.
En resumen, en este capítulo se mostró cómo realizar pruebas unitarias a las rutas de una API RESTful creada con FastAPI. Las pruebas unitarias son una técnica de programación que permite verificar que una unidad de código funcione correctamente y que la API devuelva la respuesta esperada.
En el siguiente capítulo se mostrará cómo mejorar la optimización y el rendimiento.