
Inglês | 中文
O Cassowary é uma ferramenta moderna de teste de teste HTTP/S, intuitiva e de plataforma cruzada incorporada para desenvolvedores, testadores e sysadmins. Cassowary se inspira em projetos incríveis como K6, AB & HTTPSTAT.
? 2 Modos de teste de carga : um modo padrão e um espalhamento em que os caminhos de URL podem ser especificados a partir de um arquivo (ideal se você quiser acertar vários microsserviços subjacentes)
? CI Friendly : bem-adequado para fazer parte de uma etapa de pipeline do CI
? Métricas flexíveis : métricas do CloudWatch, métricas de Prometheus (empurrando métricas para o prometeu pushgateway), arquivo json
? Configurável : capaz de passar em cabeçalhos HTTP arbitrários, capaz de configurar o cliente HTTP
? Suporta os dados GET, POST, PUT & PATCH - POST, PUT e PATCH podem ser definidos em um arquivo
? Plataforma cruzada : um único binário pré-construído para Linux, Mac OSX e Windows
? Importante - Além da ferramenta CLI, o Cassowary pode ser importado como um módulo em seu aplicativo Go
? Visualizações - Cassowary pode exportar dados de solicitação como histograma e boxplot em formato PNG
Pegue um binário pré-criado na página do GitHub libera. Opcionalmente, você pode colocar o binário de casuar no seu PATH para poder executar o Cassowary a partir de qualquer local. Alternativa você pode:
Você pode instalar o Cassowary usando o Homebrew Package Manager no Mac:
$ brew update && brew install cassowaryVocê pode executar o Cassowary diretamente usando sua imagem oficial do Docker:
$ docker run rogerw/cassowary:v0.14.1 -u http://www.example.com -c 1 -n 10Para desenvolvimento local:
$ GOOS=linux go build -o dist/docker/cassowary cmd/cassowary/ * .go
$ docker build -f dist/docker/Dockerfile -t test_cassowary dist/docker
$ docker run test_cassowary -u http://www.example.com -c 1 -n 10Sem argumentar ao fazer "Docker Run", as impressões ajudam a usar o uso
O Cassowary pode ser instalado através do Nix Package Manager.
nix-env -iA cassowary
Se você deseja lançar seu próprio RPM, pode usar o arquivo de especifica
Exemplo de execução de Cassowary contra www.example.com com 100 solicitações espalhadas por mais de 10 usuários simultâneos:
$ ./cassowary run -u http://www.example.com -c 10 -n 100
Starting Load Test with 100 requests using 10 concurrent users
100% | ████████████████████████████████████████ | [1s:0s] 1.256773616s
TCP Connect.....................: Avg/mean=101.90ms Median=102.00ms p(95)=105ms
Server Processing...............: Avg/mean=100.18ms Median=100.50ms p(95)=103ms
Content Transfer................: Avg/mean=0.01ms Median=0.00ms p(95)=0ms
Summary:
Total Req.......................: 100
Failed Req......................: 0
DNS Lookup......................: 115.00ms
Req/s...........................: 79.57Exemplo de execução do Cassowary no modo SLURP de arquivo, onde todos os caminhos de URL são especificados a partir de um arquivo externo (que também pode ser buscado no HTTP se especificado). Por padrão, o Cassowary, sem o sinalizador -n especificado, fará uma solicitação por caminho especificado no arquivo. No entanto, com o sinalizador -n, você também pode especificar quantas solicitações você deseja que o Cassowary gere contra esses caminhos de URL. Exemplo:
$ ./cassowary run -u http://localhost:8000 -c 1 -f urlpath.txt
# NOTE: from v0.10.0 and below file slurp mode had it's own command
# $ ./cassowary run-file -u http://localhost:8000 -c 1 -f urlpath.txt
Starting Load Test with 5 requests using 1 concurrent users
[ omitted ]
$ ./cassowary run -u http://localhost:8000 -c 10 -n 100 -f urlpath.txt
Starting Load Test with 100 requests using 10 concurrent users
100% | ████████████████████████████████████████ | [0s:0s] 599.467161ms
TCP Connect.....................: Avg/mean=1.80ms Median=2.00ms p(95)=3ms
Server Processing...............: Avg/mean=0.90ms Median=0.00ms p(95)=3ms
Content Transfer................: Avg/mean=0.00ms Median=0.00ms p(95)=0ms
Summary:
Total Req.......................: 3925
Failed Req......................: 0
DNS Lookup......................: 2.00ms
Req/s...........................: 6547.48Exemplo de exportação de métricas JSON Cassowary para um arquivo:
$ ./cassowary run --json-metrics --json-metrics-file=metrics.json -u http://localhost:8000 -c 125 -n 100000
Starting Load Test with 100000 requests using 125 concurrent users
100% | ████████████████████████████████████████ | [0s:0s] 984.9862ms
TCP Connect.....................: Avg/mean=-0.18ms Median=0.00ms p(95)=1ms
Server Processing...............: Avg/mean=0.16ms Median=0.00ms p(95)=1ms
Content Transfer................: Avg/mean=0.01ms Median=0.00ms p(95)=0ms
Summary:
Total Req.......................: 100000
Failed Req......................: 0
DNS Lookup......................: 2.00ms
Req/s...........................: 101524.27Se falta a bandeira
json-metrics-file, o nome do arquivo padrão seráout.json.
Se você preferir os dados brutos de toda a solicitação (no formato CSV), você pode exportá-los usando o sinalizador --raw-output
O nome do arquivo em saída é
raw.csv
Exemplo de exportação de métricas de casuar para Prometheus, fornecendo um URL de Prometheus Pushgatway:
$ ./cassowary run -u http://localhost:8000 -c 125 -n 100000 -p http://pushgatway:9091
Starting Load Test with 100000 requests using 125 concurrent users
[ omitted for brevity ]
O Cassowary pode exportar métricas para o AWS CloudWatch apenas adicionando o sinalizador -CloudWatch sem um valor. Observe que você precisará dizer a Cassoway em qual região da AWS deseja usar. A maneira mais fácil é usar uma variável de ambiente como mostrado abaixo:
$ export AWS_REGION=eu-north-1 && ./cassowary run -u http://localhost:8000 -c 125 -n 100000 --cloudwatch
Starting Load Test with 100000 requests using 125 concurrent users
[ omitted for brevity ]
Forneça o sinalizador - -histograma sem um valor para deixar o Cassowary calcular e produzir um histograma no formato PNG (hist.png no diretor atual) para a duração total das solicitações no MS. Exemplo:
Forneça o sinalizador de -Boxplot sem um valor para dizer ao Cassowary para gerar uma visualização de boxplot no formato PNG (Boxplot.png no diretor atual) para a duração total das solicitações em MS
Exemplo de atingir um ponto final de postagem em que os dados pós -json são definidos em um arquivo:
$ ./cassowary run -u http://localhost:8000/add-user -c 10 -n 1000 --postfile user.json
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Exemplo de atingir um ponto de extremidade do patch em que os dados do patch json são definidos em um arquivo:
$ ./cassowary run -u http://localhost:8000/add-user -c 5 -n 200 --patchfile user.json
Starting Load Test with 200 requests using 5 concurrent users
[ omitted for brevity ]
Exemplo especificando uma duração para o seu teste de carga, no comando abaixo especificamos que queremos enviar 100 solicitações durante uma duração de 30 segundos:
$ ./cassowary run -u http://localhost:8000 -n 100 -d 30
Starting Load Test with 100 requests using 1 concurrent users
[ omitted for brevity ]
Exemplo adicionando um cabeçalho HTTP ao executar o Cassowary
$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 -H ' Host: www.example.com '
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Exemplo Desativando HTTP Keep-alive (por padrão, Keep-Alive está ativado):
$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --disable-keep-alive
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Exemplo especificando o certificado CA
$ ./cassowary run -u http://localhost:8000 -c 10 -n 1000 --ca /path/to/ca.pem
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Exemplo especificando a autenticação do cliente para MTLS
$ ./cassowary run -u https://localhost:8443 -c 10 -n 1000 --cert /path/to/client.pem --key /path/to/client-key.pem --ca /path/to/ca.pem
Starting Load Test with 1000 requests using 10 concurrent users
[ omitted for brevity ]
Você pode executar o Cassowary de maneira distribuída se precisar ampliar o teste de carga em mais de uma máquina. A maneira mais simples de fazer isso é ter acesso a um cluster Kubernetes. Use o tipo de lote em Kubernetes e na chave espec.paralelism , você pode especificar quantas instâncias de Cassowary você deseja executar simultaneamente:
apiVersion : batch/v1
kind : Job
metadata :
name : cassowary
spec :
parallelism : 10
template :
spec :
containers :
- command : ["-u", "http://my-microservice.com:8000", "-c", "1", "-n", "10"]
image : rogerw/cassowary:v0.14.1
name : cassowary
restartPolicy : NeverBasta aplicar este YAML como assim:
$ kubectl apply -f cassowary.yamlO Cassowary pode ser importado e usado como um módulo no seu aplicativo GO. Comece buscando a dependência usando o Go Mod:
$ go mod init test && go get github.com/rogerwelin/cassowary/pkg/clientE abaixo mostra um exemplo simples de como acionar um teste de carga do seu código e imprimir os resultados:
package main
import (
"encoding/json"
"fmt"
"github.com/rogerwelin/cassowary/pkg/client"
)
func main () {
cass := & client. Cassowary {
BaseURL : "http://www.example.com" ,
ConcurrencyLevel : 1 ,
Requests : 10 ,
DisableTerminalOutput : true ,
}
metrics , err := cass . Coordinate ()
if err != nil {
panic ( err )
}
// print results
fmt . Printf ( "%+v n " , metrics )
// or print as json
jsonMetrics , err := json . Marshal ( metrics )
if err != nil {
panic ( err )
}
fmt . Println ( string ( jsonMetrics ))
}Mais exemplos de biblioteca podem ser encontrados aqui
Cassowary segue a versão semântica. A Biblioteca Pública (PKG/Cliente) pode quebrar a compatibilidade com versões anteriores até atingir uma versão estável v1.0.0.
As contribuições são bem -vindas! Para solicitar um recurso, crie um novo problema com o rótulo feature-request . Encontre um bug? Por favor, adicione um problema com os bugs do rótulo. As solicitações de tração também são bem -vindas, mas adicione um problema no recurso solicitado primeiro (a menos que seja uma correção simples de bug ou alteração de leitura)