Testes de Carga
O sistema possui uma suíte completa de testes de carga para validar a capacidade e estabilidade em produção.
Visão Geral
Os testes de carga estão localizados na pasta load-tests/ na raiz do projeto e utilizam o framework Locust para simular usuários simultâneos acessando o sistema.
Estrutura da Pasta
load-tests/
├── locustfile.py # Script principal com cenários de teste
├── docker-compose.yml # Configuração Docker para execução
├── Dockerfile # Imagem Docker do Locust
├── run-test.bat # Script de execução para Windows
├── run-test.sh # Script de execução para Linux/Mac
├── .env.example # Exemplo de configuração
├── requirements.txt # Dependências Python
├── data/
│ └── generate_test_data.py # Gerador de dados de teste
├── reports/
│ └── TEMPLATE-RELATORIO.md # Template para relatórios
├── README.md # Documentação detalhada
└── QUICK-START.md # Guia rápido
Pré-requisitos
- Docker e Docker Compose (recomendado) OU Python 3.8+
- Backend rodando em
http://localhost:8080 - Banco de dados populado com dados de teste
Cenários de Teste Disponíveis
| Cenário | Usuários | Duração | Objetivo |
|---|---|---|---|
| smoke | 10 | 2 min | Verificar funcionamento básico |
| moderate | 100 | 10 min | Simular uso normal em horário comercial |
| peak | 500 | 15 min | Simular picos de acesso |
| stress | 1000 | 20 min | Identificar limites do sistema |
| soak | 200 | 2 horas | Detectar vazamentos de memória |
Execução Rápida
Windows
cd load-tests
run-test.bat smoke # Teste rápido
run-test.bat moderate # Carga normal
run-test.bat peak # Pico de carga
run-test.bat stress # Teste de stress
run-test.bat soak # Teste de estabilidade
Linux/Mac
cd load-tests
chmod +x run-test.sh
./run-test.sh smoke # Teste rápido
./run-test.sh moderate # Carga normal
./run-test.sh peak # Pico de carga
./run-test.sh stress # Teste de stress
./run-test.sh soak # Teste de estabilidade
Os relatórios são gerados automaticamente em reports/load-test-report.html.
Execução com Interface Web
Para monitoramento em tempo real:
cd load-tests
docker-compose up
Acesse: http://localhost:8089
Configure:
- Number of users: Quantidade de usuários simultâneos
- Spawn rate: Usuários criados por segundo
- Host:
http://host.docker.internal:8080(Windows/Mac) ouhttp://172.17.0.1:8080(Linux)
Preparação dos Dados de Teste
Antes de executar os testes, popule o banco com dados de teste:
cd load-tests
python data/generate_test_data.py
Isso criará:
- 1 agente governamental (
government@test.com) - 100 candidatos (
candidate1@test.comatécandidate100@test.com) - 30 empresas (
company1@test.comatécompany30@test.com) - 30 processos seletivos com múltiplas etapas
Senha padrão: Test@123
Configuração Personalizada
Copie e edite o arquivo de configuração:
cp .env.example .env
Variáveis disponíveis:
| Variável | Descrição | Exemplo |
|---|---|---|
TARGET_HOST | URL do backend | http://host.docker.internal:8080 |
AUTOSTART | Iniciar automaticamente | true / false |
USERS | Usuários simultâneos | 100 |
SPAWN_RATE | Usuários por segundo | 10 |
RUN_TIME | Duração do teste | 10m |
WORKERS | Número de workers | 4 |
Execute com configuração personalizada:
run-test.bat custom # Windows
./run-test.sh custom # Linux/Mac
Métricas e Interpretação
Métricas Principais
| Métrica | Meta | Descrição |
|---|---|---|
| Response Time (Médio) | < 1000ms | Tempo médio de resposta |
| Response Time (P95) | < 2000ms | 95% das requisições |
| Response Time (P99) | < 3000ms | 99% das requisições |
| Throughput | > 100 RPS | Requisições por segundo |
| Taxa de Erro | < 1% | Porcentagem de erros |
Interpretação dos Resultados
| Indicador | Bom | Aceitável | Requer Ação |
|---|---|---|---|
| Tempo médio | < 500ms | 500-1000ms | > 1000ms |
| Taxa de erro | < 0.5% | 0.5-1% | > 1% |
| CPU do servidor | < 70% | 70-85% | > 85% |
| Memória | Estável | Crescimento lento | Crescimento rápido |
Monitoramento Durante os Testes
Recursos do Backend
docker stats portal-talentos-backend-1
Conexões do Banco de Dados
docker exec -it portal-talentos-postgres-1 psql -U postgres -d portal_talentos -c "
SELECT count(*) as conexoes_ativas
FROM pg_stat_activity
WHERE state = 'active';
"
Logs do Backend
docker logs -f portal-talentos-backend-1
Status do Redis
docker exec -it portal-talentos-redis-1 redis-cli INFO clients
Cenários de Teste Detalhados
Comportamento Simulado
O locustfile.py simula o comportamento real de usuários:
Candidatos (60% do tráfego):
- Login
- Visualizar perfil
- Buscar vagas
- Ver detalhes de vagas
- Candidatar-se a vagas
- Acompanhar candidaturas
Empresas (30% do tráfego):
- Login
- Listar vagas publicadas
- Ver candidatos
- Gerenciar processos seletivos
Agentes Governamentais (10% do tráfego):
- Login
- Dashboard
- Listar empresas
- Aprovar empresas
Relatório de Resultados
Após executar os testes, preencha o template em reports/TEMPLATE-RELATORIO.md:
- Resumo Executivo - Contexto e principais conclusões
- Cenário de Teste - Configuração e ambiente
- Métricas Coletadas - Dados quantitativos
- Análise - Gargalos identificados
- Recomendações - Melhorias sugeridas
Troubleshooting
"Connection refused"
O backend não está rodando. Verifique:
docker-compose -f docker-compose.dev.yml ps
curl http://localhost:8080/api/v1/health/
Alta taxa de erros 401
Dados de teste não existem. Execute:
python data/generate_test_data.py
Timeout nas requisições
Sistema sobrecarregado. Reduza o número de usuários ou aumente recursos do servidor.
Memória insuficiente no Docker
Aumente os limites no Docker Desktop (Settings > Resources > Memory).
Boas Práticas
- Nunca execute em produção sem aprovação prévia
- Execute em ambiente de staging/homologação
- Monitore recursos durante toda a execução
- Documente resultados para análise posterior
- Execute testes antes de releases importantes
- Compare resultados com execuções anteriores
Integração com CI/CD
Exemplo de execução em pipeline:
# .github/workflows/load-test.yml
load-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Start backend
run: docker-compose -f docker-compose.dev.yml up -d
- name: Wait for backend
run: sleep 30
- name: Run smoke test
run: |
cd load-tests
./run-test.sh smoke
- name: Upload report
uses: actions/upload-artifact@v3
with:
name: load-test-report
path: load-tests/reports/
Testes de carga consomem recursos significativos. Certifique-se de que o ambiente de teste tem capacidade adequada e que não afetará outros serviços.
Execute o teste smoke primeiro para validar que tudo está funcionando antes de executar testes mais intensos.