Skip to content

Guilherme-G-Cadilhe/Go-HttpLoadStressTester-CLI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 HTTP Load Tester - Ferramenta de Teste de Carga em Go

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.

✨ Funcionalidades

  • 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).

🏗️ Arquitetura

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.

🚀 Como Executar

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 --help

Executar 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 --help

📁 Estrutura do Projeto

Go-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

🧩 Conceitos Implementados

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.

About

Using CLI to Stress Test a Http Server with GoRoutines to control the Multiple Requests

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors