Skip to content
GabriWarPublic

About

app to benchmark apis in golang

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Seilago - HTTP Load Testing Tool

Ferramenta de load testing em Go com suporte para parsing de requests do Chrome DevTools.

Instalação

go build -o seilago main.go

Uso

Modo Normal (Load Testing)

./seilago -c 100 -d 30s -m POST https://example.com

Flags disponíveis:

  • -c: Número de workers concorrentes (padrão: 50)
  • -d: Duração do teste (ex: 30s, 1m, 5m)
  • -t: Timeout por requisição (padrão: 5s)
  • -m: Método HTTP (GET, POST, etc.)
  • -H: Headers (pode ser usado múltiplas vezes)

Modo Fill (Execução com Substituição Dinâmica)

Use o modo -fill para colar requests do Chrome DevTools, substituir placeholders [[variavel]] e executar múltiplas vezes.

Opções:

  1. Modo interativo - Cola request e preenche manualmente:
./seilago -fill
  1. Usando arquivo - Define variáveis no próprio arquivo:
./seilago -fill -f request.txt

Exemplo de uso interativo:

  1. Copie uma request do Chrome DevTools (clique direito > Copy > Copy as fetch)

  2. Modifique o body/headers/URL para incluir placeholders [[nome_da_variavel]]:

fetch("https://brunji.com.br/api/users", {
  "headers": {
    "accept": "*/*",
    "content-type": "application/json"
  },
  "body": "{\"name\":\"[[nome]]\",\"email\":\"[[email]]\"}",
  "method": "POST"
});
  1. Execute e siga as instruções:
./seilago -fill
# Cole o fetch acima
# Pressione Ctrl-D

# O programa vai perguntar para cada placeholder:
Placeholder: [[nome]]
Digite uma regex para gerar (ex: \d{8}, [a-z]{6}) ou valor literal:
> [A-Z][a-z]{5,10}
✓ Exemplo: Mfeokp

Placeholder: [[email]]
Digite uma regex para gerar (ex: \d{8}, [a-z]{6}) ou valor literal:
> [a-z]{8}@example.com
✓ Exemplo: hdjekwpq@example.com

# Depois pergunta quantas vezes executar:
Quantas vezes executar a request? 10

# E o delay entre cada request:
Delay entre requests em ms (0 = máximo de velocidade): 100

# Executa as requests com valores diferentes a cada vez:
=== Executando 10 requests ===

[1/10] ✓ 201 - 125ms (89 bytes)
  Response: {"id":1,"name":"Agjeklo","email":"pkdjwmqp@example.com"}
[2/10] ✓ 201 - 98ms (91 bytes)
  Response: {"id":2,"name":"Bmpqrst","email":"zxcvbnma@example.com"}
...
[10/10] ✓ 201 - 102ms (90 bytes)

=== Resumo ===
Total: 10 | Sucesso: 10 | Falha: 0

Exemplo de uso com arquivo:

  1. Crie um arquivo request.txt com a request e as definições de variáveis:
fetch("https://brunji.com.br/api/users", {
  "headers": {
    "accept": "*/*",
    "content-type": "application/json"
  },
  "body": "{\"name\":\"[[nome]]\",\"email\":\"[[email]]\"}",
  "method": "POST"
});

[nome]="[A-Z][a-z]{5,10}"
[email]="[a-z]{8}@example.com"
  1. Execute apontando para o arquivo:
./seilago -fill -f request.txt

# Output:
Lendo request de: request.txt

[[nome]] = "[A-Z][a-z]{5,10}" (definido no arquivo)
✓ Exemplo: Mfeokp

[[email]] = "[a-z]{8}@example.com" (definido no arquivo)
✓ Exemplo: hdjekwpq@example.com

Quantas vezes executar a request? 10
Delay entre requests em ms (0 = máximo de velocidade): 100

=== Executando 10 requests ===
[1/10] ✓ 201 - 125ms (89 bytes)
...

Características:

  • Cada request gera novos valores aleatórios usando as regexes fornecidas
  • Delay de 0ms = velocidade máxima (sem pause entre requests)
  • Mostra status code, tempo de resposta e tamanho do body
  • Exibe o corpo da resposta se for menor que 500 bytes
  • Variáveis podem ser definidas no arquivo usando [variavel]="regex"
  • Se uma variável não estiver definida no arquivo, o programa pergunta interativamente
  • Sistema de logging automático: Salva todas as requests em arquivo JSON com timestamp

Sistema de Logging

O modo -fill automaticamente cria um arquivo de log com todas as informações de cada request executada. O arquivo tem formato YYYYMMDD_HHMMSS.log (ex: 20251015_142909.log).

Informações registradas por request:

{
  "timestamp": "2025-10-15T14:29:09.172433557-03:00",
  "request_num": 1,
  "url": "https://httpbin.org/post",
  "method": "POST",
  "status_code": 200,
  "response_time_ms": 10733,
  "response_bytes": 576,
  "success": true,
  "request_body": "{\"name\":\"Eocusjltu\",\"email\":\"suryuw@test.com\"}",
  "response_body": "...",
  "variables": {
    "email": "suryuw@test.com",
    "nome": "Eocusjltu"
  }
}

Performance:

  • Logging thread-safe com goroutines
  • Buffer de 64KB para escrita eficiente
  • Não bloqueia execução das requests
  • Formato JSON (uma entrada por linha)

Exemplos de Regex

  • \d{8} - 8 dígitos (ex: 12345678)
  • [a-z]{10} - 10 letras minúsculas (ex: abcdefghij)
  • [A-Z][a-z]{5} - 1 maiúscula + 5 minúsculas (ex: Abcdef)
  • \w{12} - 12 caracteres alfanuméricos (ex: aB3dE5gH9jK1)
  • [0-9]{3}-[0-9]{4} - Formato XXX-XXXX (ex: 123-4567)

Características

  • Parsing automático de requests fetch() do Chrome
  • Substituição de placeholders com regex ou valores literais
  • Geração de valores aleatórios baseados em regex
  • Suporte para quantifiers: {n}, {n,m}, +, *, ?
  • Classes de caracteres: [a-z], [0-9], [A-Za-z0-9]
  • Caracteres especiais: \d (dígitos), \w (alfanuméricos)

About

app to benchmark apis in golang

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages