Uma ferramenta CLI leve e eficiente, desenvolvida em Go, para realizar testes de carga em serviços web. Permite simular um grande volume de requisições concorrentes e gera relatórios detalhados de desempenho.
- Testes de Carga Concorrentes: Envia um número configurável de requisições simultâneas para uma URL alvo.
- Parâmetros CLI Flexíveis: Configura URL, total de requisições e nível de concorrência via linha de comando.
- Relatórios Detalhados: Apresenta métricas essenciais como tempo total, requests por segundo (RPS), latência (mínima, máxima, média) e distribuição de códigos de status HTTP.
- Indicador de Progresso: Feedback visual em tempo real sobre o andamento do teste.
- Containerização com Docker: Fácil execução e distribuição via imagem Docker.
- Cliente HTTP Otimizado: Configurações de transporte HTTP ajustadas para alta performance em testes de carga (pooling de conexões, timeouts).
O projeto segue uma estrutura modular, focando em separação de responsabilidades para facilitar a manutenção e escalabilidade.
CLI (Cobra/Viper)
↓
Runner (Orquestrador)
↓
Workers (Goroutines)
↓
HTTPClient (Faz requisições) ↔ Metrics (Coleta dados)
↓
Report Generator (Exibe resultados)
Componentes Principais:
- cmd/: Contém a lógica da interface de linha de comando, utilizando Cobra CLI para parsing de argumentos e Viper para gerenciamento de configurações.
- pkg/config/: Define a estrutura de configuração da aplicação e suas regras de validação.
- internal/loadtest/: O coração do sistema de teste de carga, incluindo:
- HTTPClient: Um cliente HTTP customizado e otimizado para cenários de teste de carga.
- Runner: Orquestra a execução dos testes, gerencia a concorrência com goroutines e channels, e coordena a coleta de métricas.
- Metrics: Coleta e agrega as métricas de desempenho de forma thread-safe, utilizando sync.RWMutex.
- internal/report/: (Embutido no Runner por simplicidade neste projeto) Responsável por formatar e apresentar o relatório final.
Pré-requisitos
- Docker instalado (para execução via Docker)
- Opcionalmente: Go 1.23+ instalado (para desenvolvimento e execução local)
Executar via Docker (Recomendado) A maneira mais fácil e portátil de usar a ferramenta é via Docker.
# 1. Clone o repositório
git clone
cd Go-HttpLoadStressTester...
# 2. Construa a imagem Docker
docker build -t http-load-tester .
# 3. Execute o teste de carga
# Exemplo: 1000 requisições, 10 simultâneas para google.com
docker run http-load-tester --url=http://google.com --requests=1000 --concurrency=10
# Para ver as opções de linha de comando:
docker run http-load-tester --helpExecutar Localmente (Desenvolvimento)
# 1. Clone o repositório
git clone
cd Go-HttpLoadStressTester...
# 2. Baixe as dependências
go mod download
# 3. Compile a aplicação
go build -o http-load-tester
# 4. Execute o teste de carga
# Exemplo: 500 requisições, 5 simultâneas para um endpoint de teste
./http-load-tester --url=https://jsonplaceholder.typicode.com/posts/1 --requests=500 --concurrency=5
# Para ver as opções de linha de comando:
./http-load-tester --helpGo-HttpLoadStressTester.../
├── cmd/
│ └── root.go # Definição dos comandos CLI e lógica principal
├── internal/
│ ├── loadtest/
│ │ ├── client.go # Cliente HTTP otimizado
│ │ ├── runner.go # Orquestrador do teste de carga
│ │ └── metrics.go # Coleta e agregação de métricas
│ └── report/
│ └── generator.go # (Atualmente embutido no runner para simplicidade)
├── pkg/
│ └── config/
│ └── config.go # Estrutura de configuração e validação
├── Dockerfile # Definição da imagem Docker
├── go.mod # Módulo Go e dependências
├── go.sum # Checksums das dependências
└── main.go # Ponto de entrada da aplicação
Este projeto demonstra a aplicação de vários conceitos importantes em Go e engenharia de software:
- Concorrência em Go:
- Goroutines: Para executar requisições HTTP em paralelo e monitorar o progresso.
- Channels: Para comunicação segura entre goroutines (fila de requisições).
- sync.WaitGroup: Para sincronizar o término de todas as goroutines de worker.
- sync.RWMutex: Para garantir a thread-safety na coleta de métricas.
- context.Context: Para gerenciar cancelamento e timeouts de forma eficiente.
- Interface de Linha de Comando (CLI):
- Uso do framework Cobra CLI para construir CLIs robustas.
- Gerenciamento de configurações com Viper (flags, variáveis de ambiente).
- Boas Práticas de Engenharia:
- Separação de Responsabilidades: Organização do código em pacotes lógicos (cmd, pkg, internal).
- Validação de Entrada: Garantia de que os parâmetros fornecidos são válidos antes da execução.
- Tratamento de Erros: Retorno de erros explícitos e uso de fmt.Errorf com %w para wrapping.
- Containerização:
- Dockerfile multi-stage: Para criar imagens Docker otimizadas e de tamanho reduzido.
Desenvolvido com ❤️ em Go para aprendizado de concorrência e ferramentas CLI.