Pular para o conteúdo principal

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árioUsuáriosDuraçãoObjetivo
smoke102 minVerificar funcionamento básico
moderate10010 minSimular uso normal em horário comercial
peak50015 minSimular picos de acesso
stress100020 minIdentificar limites do sistema
soak2002 horasDetectar 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) ou http://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.com até candidate100@test.com)
  • 30 empresas (company1@test.com até 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ávelDescriçãoExemplo
TARGET_HOSTURL do backendhttp://host.docker.internal:8080
AUTOSTARTIniciar automaticamentetrue / false
USERSUsuários simultâneos100
SPAWN_RATEUsuários por segundo10
RUN_TIMEDuração do teste10m
WORKERSNúmero de workers4

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étricaMetaDescrição
Response Time (Médio)< 1000msTempo médio de resposta
Response Time (P95)< 2000ms95% das requisições
Response Time (P99)< 3000ms99% das requisições
Throughput> 100 RPSRequisições por segundo
Taxa de Erro< 1%Porcentagem de erros

Interpretação dos Resultados​

IndicadorBomAceitávelRequer Ação
Tempo médio< 500ms500-1000ms> 1000ms
Taxa de erro< 0.5%0.5-1%> 1%
CPU do servidor< 70%70-85%> 85%
MemóriaEstávelCrescimento lentoCrescimento 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:

  1. Resumo Executivo - Contexto e principais conclusões
  2. Cenário de Teste - Configuração e ambiente
  3. Métricas Coletadas - Dados quantitativos
  4. Análise - Gargalos identificados
  5. 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​

  1. Nunca execute em produção sem aprovação prévia
  2. Execute em ambiente de staging/homologação
  3. Monitore recursos durante toda a execução
  4. Documente resultados para análise posterior
  5. Execute testes antes de releases importantes
  6. 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/

Importante

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.

Dica

Execute o teste smoke primeiro para validar que tudo está funcionando antes de executar testes mais intensos.