
Inglés | 中文
Cassowary es una herramienta moderna de prueba de carga HTTP/S, intuitiva y multiplataforma incorporada para desarrolladores, probadores y sysadmins. Cassowary se inspira en proyectos increíbles como K6, AB y Httpstat.
? 2 Modos de prueba de carga : un modo estándar y un modo de propagación donde se pueden especificar las rutas de URL de un archivo (ideal si desea presionar varios microservicios subyacentes)
? Amigable con el CI : muy adecuado para ser parte de un paso de tuberías CI
? Métricas flexibles : Métricas de CloudWatch, Métricas Prometheus (empujando métricas a Prometheus Pushgateway), archivo JSON
? Configurable : Capaz de pasar en encabezados HTTP arbitrarios, capaz de configurar el cliente HTTP
? Los datos de Get, Post, Put & Patch - Post, Put y Patch se pueden definir en un archivo
? Plataforma cruzada : un solo binario preconstruido para Linux, Mac OSX y Windows
? Importable : además de la herramienta CLI, Cassowary se puede importar como un módulo en su aplicación GO
? Visualizaciones : Cassowary puede exportar los datos de solicitudes como un histograma y un diagrama de caja en formato PNG
Tome un binario preconstruido de la página de lanzamientos de GitHub. Opcionalmente, puede colocar el binario de Cassowary en su PATH para que pueda ejecutar Cassowary desde cualquier ubicación. Alternativa puede:
Puede instalar Cassowary usando el Administrador de paquetes HomeBrew en Mac:
$ brew update && brew install cassowaryPuede ejecutar Cassowary directamente utilizando su imagen oficial de Docker:
$ docker run rogerw/cassowary:v0.14.1 -u http://www.example.com -c 1 -n 10Para el desarrollo 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 10Sin argumento al hacer "Docker Run", imprime el uso de ayuda
Cassowary se puede instalar a través del Administrador de paquetes NIX.
nix-env -iA cassowary
Si desea lanzar su propia RPM, puede usar el archivo de especificaciones Cassowary.spec para crear un paquete RPM
Ejemplo Ejecutando Cassowary contra www.example.com con 100 solicitudes repartidas sobre 10 usuarios concurrentes:
$ ./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.57Ejemplo Ejecutar Cassowary en el modo de slurp de archivo donde se especifican todas las rutas de URL de un archivo externo (que también se puede obtener de HTTP si se especifica). Por defecto, Cassowary, sin el indicador -n especificado, hará una solicitud por ruta especificada en el archivo. Sin embargo, con el indicador -n también puede especificar cuántas solicitudes desea que Cassowary genere con esas rutas de URL. Ejemplo:
$ ./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.48Ejemplo de exportación de métricas JSON Cassowary a un archivo:
$ ./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.27Si falta la bandera de
json-metrics-file, entonces el nombre de archivo predeterminado estáout.json.
Si prefiere los datos sin procesar de todas las solicitudes (en formato CSV), puede exportarlos utilizando el indicador --raw-output
El nombre de archivo salido es
raw.csv
Ejemplo de exportación de métricas de cassowary a Prometeo suministrando una URL de Pushgatway de Prometheus:
$ ./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 ]
Cassowary puede exportar métricas a AWS CloudWatch simplemente agregando el indicador --CloudWatch sin valor. Tenga en cuenta que deberá decirle a Cassoway qué región de AWS desea usar. La forma más fácil es usar una variable de entorno como se muestra a continuación:
$ 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 ]
Suministra el indicador -histogram sin un valor para permitir que Cassowary calcule y emita un histograma en formato PNG (hist.png en DIR actual) para la duración total de las solicitudes en MS. Ejemplo:
Suministre el indicador --boxplot sin un valor para decirle a CassoWary que genere una visualización de placa de caja en formato PNG (boxplot.png en dir) para la duración total de las solicitudes en MS
Ejemplo de presionar un punto final posterior donde los datos posteriores a JSON se definen en un archivo:
$ ./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 ]
Ejemplo de presionar un punto final de parche donde los datos de parche JSON se definen en un archivo:
$ ./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 ]
Ejemplo especificando una duración para su prueba de carga, en el comando a continuación, especificamos que queremos enviar 100 solicitudes durante una duración 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 ]
Ejemplo Agregar un encabezado HTTP al ejecutar 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 ]
Ejemplo deshabilitar http keep-alive (por defecto mantener el alive está habilitado):
$ ./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 ]
Ejemplo especificando el 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 ]
Ejemplo especificando la autenticación del 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 ]
Puede ejecutar Cassowary de manera distribuida si necesita ampliar la prueba de carga en más de una máquina. La forma más sencilla de hacerlo es tener acceso a un clúster Kubernetes. Use el tipo de lote en Kubernetes y en la tecla Spec.Paralellism , puede especificar cuántas instancias de cassowary desea ejecutar simultáneamente:
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 : NeverSimplemente aplique este yaml como así:
$ kubectl apply -f cassowary.yamlCassowary se puede importar y usar como módulo en su aplicación GO. Comience obteniendo la dependencia utilizando el mod:
$ go mod init test && go get github.com/rogerwelin/cassowary/pkg/clientY a continuación, muestre un ejemplo simple sobre cómo activar una prueba de carga desde su código e imprimir los 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 ))
}Se pueden encontrar más ejemplos de biblioteca aquí
Cassowary sigue el versículo semántico. La Biblioteca Pública (PKG/Cliente) puede romper la compatibilidad hacia atrás hasta que llegue a una versión estable V1.0.0.
¡Las contribuciones son bienvenidas! Para solicitar una función, cree un nuevo problema con la feature-request de etiqueta. Encontrar un error? Agregue un problema con los bugs de la etiqueta. Las solicitudes de extracción también son bienvenidas, pero agregue primero un problema en la función solicitada (a menos que sea una simple corrección de errores o un cambio de lectura)