📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 11: Qualidade e Testes de Software. Recomendado revisar antes de começar.

🧪 Testes de Carga, Estresse e Soak Testing com k6

v1.0 — Engenharia de Software & Práticas Profissionais

Trilha de Especialização Pedagógica


🎯 Objetivo & Escopo do Projeto

Scripts profissionais de teste de carga e análise de saturação de microsserviços com Grafana k6, simulando curvas de carga (Ramp-up, Spike, Soak Testing) com relatórios visuais de latência P95 e P99.


🛠️ Código de Exemplo da Implementação

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '30s', target: 50 },  // Ramp-up para 50 usuarios
    { duration: '1m', target: 200 },   // Carga de pico (200 usuarios)
    { duration: '30s', target: 0 },    // Ramp-down
  ],
  thresholds: {
    http_req_duration: ['p(95)<200'], // 95% das requisicoes devem responder em < 200ms
    http_req_failed: ['rate<0.01'],   // Erros abaixo de 1%
  },
};

export default function () {
  const res = http.get('http://localhost:8080/api/v1/produtos');
  check(res, {
    'status is 200': (r) => r.status === 200,
  });
  sleep(1);
}


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd testes_03_performance_k6_load

2. Execute a aplicação ou testes

./mvnw test
# ou k6 run load_test.js

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/testes_03_performance_k6_load


🏛️ Arquitetura Visual & Engenharia de Infraestrutura

O diagrama abaixo ilustra a topologia de componentes, balanceamento, esteiras de automação e observabilidade na subpasta scripts/:

Arquitetura de Infraestrutura

flowchart TD
    subgraph Config["Configuração & IaC"]
        C1["Manifestos Declarativos"] --> C2["Variáveis & Segredos"]
    end
    subgraph Orquestracao["Orquestração & Redes"]
        O1["Load Balancer / Ingress"] --> O2["Pods / Contêineres de Serviço"]
    end
    subgraph Observabilidade["Observabilidade & Segurança"]
        M1["Telemetria Prometheus / k6"] --> M2["Scanners SAST & Dashboards"]
    end
    subgraph Qualidade["Homologação & Qualidade"]
        Q1["Automação CI/CD"] --> Q2["Checkpoints CP-01..05 PASS"]
    end

    Config --> Orquestracao
    Orquestracao --> Observabilidade
    Observabilidade --> Qualidade

    style Config fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
    style Orquestracao fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
    style Observabilidade fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
    style Qualidade fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px

🎯 Engenharia de Requisitos & Modelagem Formal

👤 User Stories (Histórias de Usuário)

ID Persona História de Usuário Critério de Aceite Prioridade
US-01 Engenheiro de Performance Desejo scripts k6 em JavaScript simulando Smoke Test básico Verificação rápida de sanidade de endpoints com pouca carga (1 a 5 VUs) Alta
US-02 Arquiteto de Resiliência Desejo teste de carga progressiva (Load Test) até 500 VUs Avaliação de comportamento sob tráfego esperado em horário de pico Alta
US-03 Especialista em Confiabilidade Desejo teste de estresse (Stress Test) descobrindo o ponto de quebra Injeção de carga além do limite até ocorrência de degradação e erros HTTP 5xx Alta
US-04 Analista de Infraestrutura Desejo teste de resistência (Soak/Endurance Test) de longa duração Execução contínua monitorando vazamento de memória (memory leaks) e conexões Alta
US-05 Auditor de SLA Desejo asserções com thresholds configurados (ex: http_req_duration p95 < 200ms) Falha automática do script de teste caso o SLA seja violado Média

⚙️ Requisitos Funcionais (RF)

ID Descrição do Requisito Criticidade
RF-01 Scripts k6 modulares com estágios (stages) de ramp-up, platô e ramp-down Alta
RF-02 Validação com checks e thresholds rigorosos de latência e taxa de erros Alta
RF-03 Geração de métricas customizadas (Counter, Trend, Rate) no k6 Alta
RF-04 Exportação de relatórios resumidos em JSON e stdout formatado Média
RF-05 Módulo de testes automatizados com mock server local para calibração Média

🛡️ Requisitos Não-Funcionais (RNF)

ID Especificação Arquitetural Criticidade
RNF-01 Geração de alta taxa de requisições por segundo com baixíssimo uso de RAM Alta
RNF-02 Garantia de que os testes reflitam a distribuição estatística real de acessos Alta
RNF-03 Execução compatível com linha de comando k6 v0.45+ e contêiner oficial Média
RNF-04 Organização clara dos scripts na pasta scripts/ Alta
RNF-05 Zero dependências externas além do binário k6 Alta

🔗 Matriz de Rastreabilidade (RTM)

User Story Requisito Funcional Requisito Não-Funcional Módulo / Artefato de Código Status de Homologação
US-01 RF-01 RNF-01, RNF-04 scripts/smoke_test.js Testado
US-02 RF-01 RNF-01, RNF-02 scripts/load_test.js Testado
US-03 RF-02 RNF-01, RNF-02 scripts/stress_test.js Testado
US-04 RF-03 RNF-01, RNF-05 scripts/soak_test.js Testado
US-05 RF-04 RNF-02, RNF-04 scripts/load_test.js Testado

🏁 Checkpoints de Qualidade & Homologação

Checkpoint Escopo da Validação Artefato Verificado Status
CP-01 Configuração Declarativa do Ambiente scripts/ PASS ✅
CP-02 Provisionamento & Orquestração Deployments / Services PASS ✅
CP-03 Redes, Proxies & Segurança de Borda Ingress / Security Groups PASS ✅
CP-04 Observabilidade, Métricas & SAST Metrics / Scanners PASS ✅
CP-05 Homologação com Suíte de Testes Test Suite / CI Gate PASS ✅