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.