Testando Flask
Use o cliente de teste e o contexto da aplicação no pytest.
Receita
Cartão de referência rápida - pronto para copiar e colar.
def test_health(client):
assert client.get("/health").status_code == 200Quando usar isso:
- Testes de regressão de rotas
- Fluxos de autenticação/sessão
- Fixtures de rollback de banco de dados
Exemplo de Trabalho
import pytest
@pytest.fixture
def app():
app = create_app("testing")
yield app
@pytest.fixture
def client(app):
return app.test_client()O que isso demonstra:
- Fixture de app do pytest
- Cliente de teste
- Configuração de teste
Mergulho Profundo
Como Funciona
test_clientsimula requisições em processo.- Empurra o contexto da aplicação para acesso a
current_app. - Usa transações para isolamento de testes de banco de dados.
Armadilhas
- Validação de limites ignorada - Dados inválidos chegam às camadas de persistência. Correção: Valide com Pydantic ou formulários do framework na borda.
- Vazamento de rastros de pilha - Clientes veem erros internos. Correção: Mapeie exceções para respostas HTTP estáveis.
- Bloqueio de loops de eventos assíncronos - Workers travam sob carga concorrente. Correção: Use drivers assíncronos ou wrappers de threadpool.
- Segredos em controle de versão - Credenciais vazam via histórico do git. Correção: Carregue segredos de variáveis de ambiente ou um cofre em tempo de execução.
- Falta de observabilidade - Incidentes são difíceis de depurar. Correção: Adicione logs estruturados, métricas e IDs de requisição.
Alternativas
| Alternativa | Use Quando | Não Use Quando |
|---|---|---|
| Framework Alternativo neste cookbook | Padrão da equipe ou monólito existente | API Greenfield com restrições diferentes |
| BaaS Gerenciado | MVP apenas CRUD | Autenticação personalizada, fluxos de trabalho ou necessidades de conformidade |
| gRPC | RPC interno de alto desempenho | Clientes HTTP públicos e acesso ao navegador |
FAQs
Quando devo adotar o teste de Flask?
Use quando os padrões e trade-offs desta página corresponderem à sua API ou limite de dados.
Qual é o principal erro de produção com testes de Flask?
Ignorar validação, timeouts ou contratos de erro explícitos na borda HTTP.
Como eu testo testes de Flask?
Use o cliente de teste do framework, substitua dependências e afirme o status mais a forma do JSON.
Testes de Flask funcionam com Python 3.14?
Sim - os exemplos visam Python 3.14 com versões de framework fixadas do rodapé da pilha.
Como testes de Flask se relacionam com Pydantic 2?
Valide e serialize nas bordas; mantenha os serviços funcionando com objetos de domínio tipados.
Síncrono ou assíncrono?
Prefira rotas assíncronas quando I/O domina; mantenha o trabalho de CPU pequeno ou descarregue para workers.
Onde a lógica de negócios deve residir?
Handlers finos; serviços possuem regras; repositórios possuem consultas.
Como eu documento APIs?
Publique documentação OpenAPI ou de esquema que corresponda aos modelos de resposta no código.
Como lidar com versionamento?
Versionamento explícito de URL ou cabeçalho com janelas de depreciação - evite quebras silenciosas.
O que devo ler a seguir?
Siga os links Relacionados para a próxima camada de profundidade nesta seção.
Como me mantenho seguro?
Autentique chamadores, autorize por recurso, limite a taxa e nunca registre segredos.
Primeiro passo de performance?
Meça a latência do banco de dados e de upstream antes de trocar de framework.
Relacionados
- Fundamentos do Flask - Rotas e requisições
- Fábricas de Aplicação e Blueprints - Estrutura
- Construindo APIs REST - Endpoints JSON
- Implantando Flask - Produção WSGI
Versões da Pilha: Esta página foi escrita para Python 3.14.0 (3.14 estável, 3.13 de manutenção), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.