cilada

Teste de carga OpenAPI

É uma cilada,
Bino!

Aponte para um contrato OpenAPI, ajuste o .cilada.toml e o Cilada já sai na estrada: gera os cenários, manda a carga com o Locust e te entrega um relatório completo. Tudo sem escrever um caso de teste.

Python 3.11+

Tipagem estrita, sintaxe moderna e zero gambiarras de compatibilidade.

Zero boilerplate

O contrato OpenAPI é a fonte da verdade. Você não escreve caso nenhum.

Locust nativo

Engine de carga battle-tested, sem camada extra de abstração no meio do caminho.

MIT License

Código aberto, sem dependências proprietárias e livre para usar em qualquer projeto.

Por que o Cilada?

Montar uma suíte de carga do zero leva tempo. O Cilada lê o contrato, entende os endpoints e gera os cenários pra você. É só ajustar o TOML e apertar o gatilho.

01
📄

Contrato como fonte da verdade

Lê o OpenAPI online e gera os casos com exemplos, defaults, enums e valores de limite. Atualizou o contrato? Na próxima execução os casos já refletem as mudanças.

02
🎯

Seleção granular de endpoints

include_paths e exclude_paths aceitam padrões glob como /patients/*. Controle explícito dos verbos HTTP via enabled_methods.

03
🏃

Modo dry-run

Valide o contrato, a seleção e os casos gerados sem mandar um único byte de carga real. Perfeito para rodar no CI antes do disparo de verdade.

04
🔐

Segredos por variável de ambiente

Use ${CILADA_TOKEN} no TOML e injete via CI ou cofre de secrets. Headers sensíveis usam entrada oculta no modo interativo.

05
📊

Resumo consolidado ao final

Sempre que o teste termina, você vê o total de requisições, falhas, tempos mín/méd/máx e o breakdown por método e código HTTP.

06
🤫

Modo não-interativo

--non-interactive não solicita valores de headers, mas pede confirmação antes de executar sem headers obrigatórios.

Relatórios que prestam

Depois da carga, o Cilada entrega dois formatos de relatório prontos para você analisar, compartilhar ou jogar num dashboard.

📈

Relatório HTML interativo HTML

O Locust gera um relatório visual completo com gráficos de requisições por segundo, tempo de resposta ao longo do tempo e tabela de estatísticas por endpoint. Configure o caminho com html_report no TOML e ele fica salvo automaticamente.

📋

Estatísticas em CSV CSV

Quatro arquivos CSV: estatísticas por endpoint, histórico por janela de tempo, falhas e exceções. Configure csv_prefix no TOML para persistir os arquivos no diretório que quiser, ou deixe em branco e o Cilada usa um diretório temporário e limpa tudo ao fim.

Como funciona

Do contrato ao relatório em quatro etapas. Sem configuração elaborada, sem servidor de métricas extra.

01

Lê o contrato

Busca o OpenAPI da URL configurada, valida a estrutura e resolve a base URL antes de qualquer outra coisa.

02

Gera os cenários

Cria variações de payload usando exemplos, defaults, enums e limites. Campos opcionais são removidos em algumas variações.

03

Manda a carga

Passa os cenários ao Locust. Cada requisição sorteia aleatoriamente um caso. A tabela nativa do Locust exibe o andamento.

04

Entrega os relatórios

Resumo no console, relatório HTML interativo e CSVs com todas as estatísticas, por endpoint e por janela de tempo.

Configuração simples, controle total

Um único arquivo .cilada.toml controla tudo: URL do OpenAPI, headers de autenticação, verbos habilitados, paths incluídos e excluídos, parâmetros do Locust e caminhos dos relatórios.

Segredos nunca vão para o arquivo. Use ${NOME_DA_VARIAVEL} e injete via CI ou cofre de secrets do pipeline.

# .cilada.toml

[api]
openapi_url      = "https://api.exemplo.com/static/swagger.json"
verify_tls       = true
timeout_seconds  = 30.0

[api.headers]
Authorization    = "Bearer ${CILADA_TOKEN}"

[test]
enabled_methods     = ["GET", "HEAD", "OPTIONS"]
exclude_paths       = ["/health", "/metrics"]
cases_per_operation = 3

[locust]
users       = 20
spawn_rate  = 5.0
run_time    = "1m"
headless    = true
csv_prefix  = "reports/cilada"
html_report = "reports/cilada.html"
🛡️

Segurança operacional primeiro

O exemplo padrão habilita só GET, HEAD e OPTIONS. Verbos destrutivos como POST, PUT, PATCH e DELETE devem ser ativados só em ambientes isolados, com dados descartáveis e autorização explícita. Nunca versione tokens no TOML. Use ${NOME_DA_VARIAVEL} e injete pelo cofre do pipeline.

Início rápido

Três passos para sair do zero ao primeiro relatório de carga.

1

Prepare o ambiente

python3 -m venv .venv
source .venv/bin/activate
pip3 install cilada

Requer Python 3.11+. Funciona em qualquer virtualenv.

2

Configure o TOML

cilada config init

Crie a configuração inicial e ajuste a URL do OpenAPI, os headers e os segredos conforme necessário.

3

Execute

# validação sem carga real
cilada run --dry-run

# disparo de carga
cilada run

Comece com o dry-run para validar o contrato e os cenários antes de mandar carga de verdade para o servidor.