Olá, colegas desenvolvedores! Hoje, vamos mergulhar no mundo dos testes unitários com o FastAPI. Seja você um profissional experiente ou um novato no FastAPI, este guia o ajudará a garantir que sua API seja o mais robusta possível. Vamos cobrir tudo, desde os fundamentos dos testes unitários até técnicas específicas para testar aplicações FastAPI. Além disso, vamos apresentar uma ferramenta útil chamada Apidog que pode agilizar seu processo de testes.
Por que os Testes Unitários São Importantes
Antes de mergulharmos nos detalhes dos testes unitários com o FastAPI, vamos falar sobre por que os testes unitários são essenciais. Em termos simples, os testes unitários permitem que você verifique se cada parte de sua aplicação funciona como deveria. Testando componentes individuais, você pode identificar bugs precocemente e garantir que sua aplicação se comporte corretamente.
Aqui estão algumas razões convincentes para adotar testes unitários:
- Identificar Bugs Precocemente: Ao testar pequenas unidades de código, você pode identificar e corrigir problemas antes que se tornem problemas significativos.
- Garantir a Qualidade do Código: Os testes unitários funcionam como uma rede de segurança, ajudando você a manter um código de alta qualidade à medida que seu projeto evolui.
- Facilitar Refatorações: Com um sólido conjunto de testes, você pode refatorar seu código com confiança, sabendo que quaisquer problemas serão detectados imediatamente.
- Melhorar a Documentação: Os testes servem como documentação adicional, mostrando como diferentes partes da sua aplicação devem funcionar.
Agora que entendemos a importância dos testes unitários, vamos mergulhar nas especificidades dos testes unitários com o FastAPI.

Configurando Seu Projeto FastAPI
Primeiro, você precisa ter um projeto FastAPI configurado. Se você ainda não o fez, pode criar um novo projeto FastAPI seguindo estas etapas:
Instale o FastAPI e o Uvicorn: FastAPI é o framework web, e o Uvicorn é o servidor ASGI.
pip install fastapi uvicorn
Crie Sua Aplicação FastAPI: Crie um arquivo chamado main.py
e adicione o seguinte código:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
Execute Sua Aplicação: Inicie o servidor usando o Uvicorn.
uvicorn main:app --reload
Sua aplicação FastAPI já está em funcionamento!
Começando com Testes Unitários
Instalando Dependências de Teste
Para começar a realizar testes unitários, você precisará de um framework de testes. Recomendamos o uso do pytest porque é fácil de usar e amplamente adotado.
Instale o pytest usando o pip:
pip install pytest
Além disso, instale httpx
para fazer requisições HTTP à sua aplicação FastAPI durante os testes:
pip install httpx
Escrevendo Seu Primeiro Teste
Vamos escrever um teste simples para verificar se nosso endpoint raiz retorna a resposta esperada. Crie um arquivo chamado test_main.py
e adicione o seguinte código:
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}
Neste teste, usamos o TestClient
do FastAPI para enviar uma solicitação GET ao endpoint raiz e afirmamos que a resposta está correta. Execute o teste usando o pytest:
pytest
Estruturando Seus Testes
Para manter seus testes organizados, considere a seguinte estrutura para seus arquivos de teste:
projeto/
├── app/
│ ├── main.py
│ └── ... (outro código da aplicação)
├── tests/
│ ├── __init__.py
│ └── test_main.py
Ao colocar seus testes em um diretório dedicado tests
, você pode manter um código limpo e organizado.
Técnicas Avançadas de Testes Unitários
Testando Endpoints com Parâmetros
FastAPI facilita o manuseio de parâmetros em seus endpoints. Vamos adicionar um endpoint que recebe um parâmetro e escrever um teste para ele.
Atualize seu main.py
com um novo endpoint:
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
Em seguida, adicione um teste para este endpoint em test_main.py
:
def test_read_item():
item_id = 42
response = client.get(f"/items/{item_id}")
assert response.status_code == 200
assert response.json() == {"item_id": item_id}
Este teste verifica se o endpoint retorna corretamente o ID do item passado na URL.
Testando Injeção de Dependência
O sistema de injeção de dependência do FastAPI é poderoso e flexível. Vamos ver como você pode testar endpoints que usam dependências.
Adicione uma dependência ao main.py
:
from fastapi import Depends
def get_query(q: str = None):
return q
@app.get("/search/")
def search(query: str = Depends(get_query)):
return {"query": query}
Escreva um teste para este endpoint em test_main.py
:
def test_search():
query = "fastapi"
response = client.get(f"/search/?q={query}")
assert response.status_code == 200
assert response.json() == {"query": query}
Aqui, testamos se a injeção de dependência lida corretamente com o parâmetro de consulta.
Apresentando Apidog para Testes Aprimorados
O que é Apidog?
Apidog é uma ferramenta fantástica que simplifica testes e documentação de APIs. Ela se integra perfeitamente com o FastAPI, permitindo automatizar e agilizar seu processo de testes.

Usando Apidog em Seus Testes
O Apidog fornece decoradores para documentar e testar seus endpoints facilmente. Aqui está como você pode usar o Apidog com sua aplicação FastAPI.
Configure Seu Ambiente de Teste: Primeiramente, configure seu ambiente de teste. Isso inclui os sistemas que você deseja testar e o Apidog. Abra o Apidog e mude para a guia de teste.

Defina Seus Casos de Teste: Em seguida, defina seus casos de teste. Pense sobre os diferentes cenários que você deseja testar e escreva-os.

Execute Seus Testes: Agora, é hora de deixar o Apidog fazer sua mágica! Execute seus testes e aguarde os resultados.

Analise Seus Resultados: Uma vez que seus testes estejam concluídos, analise seus resultados. Procure por quaisquer erros ou comportamentos inesperados.

Se você encontrar algum problema, corrja-o e execute seus testes novamente. Repita esse processo até que você esteja satisfeito com os resultados.
Com o Apidog, você pode garantir que seus testes não apenas estão corretos, mas também bem documentados.
Melhores Práticas para Testes Unitários com FastAPI
Mantenha os Testes Isolados
Certifique-se de que cada teste é independente e não depende do estado de outros testes. Esse isolamento torna os testes mais fáceis de depurar e manter.
Use Fixtures
Fixtures no pytest podem ajudar você a configurar e desmontar ambientes de teste. Aqui está um exemplo de fixture para seu aplicativo FastAPI:
import pytest
from fastapi.testclient import TestClient
from main import app
@pytest.fixture
def client():
return TestClient(app)
def test_with_fixture(client):
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"Hello": "World"}
Simule Dependências Externas
Quando seus endpoints dependem de serviços externos ou bancos de dados, use simulações para simular essas dependências durante os testes. Essa abordagem ajuda você a se concentrar em testar a lógica de sua aplicação sem ser afetado por fatores externos.
Conclusão
Testar aplicações FastAPI não precisa ser intimidador. Seguindo os passos delineados neste guia, você pode garantir que sua API seja confiável, sustentável e bem documentada. Lembre-se de usar ferramentas como o Apidog para agilizar seu processo de testes e manter seus testes organizados e isolados.
Agora, é sua vez de colocar essas dicas em prática e tornar sua aplicação FastAPI à prova de falhas. Boas testagens!