
Englisch | 中文
Cassowary ist ein modernes HTTP/S, intuitive und plattformübergreifende Last-Test-Tool, das für Entwickler, Tester und Sysadminen eingebaut ist. Cassowary lässt sich von großartigen Projekten wie K6, AB & Httpstat inspirieren.
? 2 Laden Sie Testmodi : Ein Standard- und ein Spread -Modus, in dem URL -Pfade aus einer Datei angegeben werden können (ideal, wenn Sie mehrere zugrunde liegende Microservices treffen möchten)
? CI Friendly : Gut geeignet, Teil eines CI-Pipeline-Schritts zu sein
? Flexible Metriken : CloudWatch -Metriken, Prometheus -Metriken (Pushing Metrics auf Prometheus Pushgateway), JSON -Datei
? Konfigurierbar : In willkürlichen HTTP -Headern übergeben, die den HTTP -Client konfigurieren können
? Unterstützt die Get-, Post-, Put & Patch - Post-, Put- und Patch -Daten können in einer Datei definiert werden
? Kreuzplattform : Eine einzelne vorgefertigte Binärin für Linux, Mac OSX und Windows
? Importierbar - Neben dem CLI -Tool kann Cassowary als Modul in Ihrer Go -App importiert werden
? Visualisierungen - Cassowary kann Anforderungsdaten als Histogramm und Boxplot im PNG -Format exportieren
Nehmen Sie eine vorgefertigte Binärdatei von der Seite GitHub Releases. Sie können den Cassowary -Binärer optional in Ihren PATH stellen, damit Sie Cassowary von jedem Ort aus ausführen können. Alternative Sie können:
Sie können Cassowary mit dem Homebrew -Paket -Manager auf Mac installieren:
$ brew update && brew install cassowarySie können Cassowary direkt mit seinem offiziellen Docker -Image ausführen:
$ docker run rogerw/cassowary:v0.14.1 -u http://www.example.com -c 1 -n 10Für die lokale Entwicklung:
$ 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 10Ohne Argument bei "Docker Run" druckt es bei der Verwendung der Verwendung
Cassowary kann über den NIX -Paketmanager installiert werden.
nix-env -iA cassowary
Wenn Sie Ihr eigenes RPM ausrollen möchten, können Sie die Spec -Datei cassowary.spec verwenden, um ein RPM -Paket zu erstellen
Beispiel, das Cassowary gegen www.example.com mit 100 Anfragen über 10 gleichzeitige Benutzer verteilt hat:
$ ./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.57Beispiel Ausführen von Cassowary im Datei -Slurp -Modus, in dem alle URL -Pfade aus einer externen Datei angegeben sind (die bei angegebenen HTTP auch aus HTTP abgerufen werden kann). Standardmäßig wird Cassowary ohne angegebenes -n -Flag eine in der Datei angegebene Anforderung pro Pfad erstellen. Mit dem Flag -n -Flag können Sie jedoch auch angeben, wie viele Anforderungen Sie Cassowary gegen diese URL -Pfade generieren möchten. Beispiel:
$ ./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.48Beispiel Exportieren von Cassowary JSON -Metriken in eine Datei:
$ ./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.27Wenn
json-metrics-fileFlagge fehlt, ist der Standard-Dateinameout.json.
Wenn Sie lieber die Rohdaten der Anforderung (im CSV- --raw-output ) möchten
ausgegebener Dateiname ist
raw.csv
Beispiel Exportieren von Cassowary -Metriken in Prometheus, indem eine Prometheus -Pushgatway -URL geliefert wird:
$ ./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 kann Metriken in AWS CloudWatch exportieren, indem sie das Flag -Cloudwatch ohne Wert hinzufügen. Beachten Sie, dass Sie Cassoway mitteilen müssen, welche AWS -Region Sie verwenden möchten. Der einfachste Weg ist die Verwendung einer Umgebungsvariablen, wie unten gezeigt:
$ 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 ]
Liefern Sie das Flag -Histogramm ohne Wert, um ein Histogramm in PNG -Format (Hist.PNG in Strom DIR) für die Gesamtdauer der Anforderungen in MS zu lassen. Beispiel:
Geben Sie das -Boxplot -Flag ohne Wert an, um Cassowary zu sagen
Beispiel beim Auftakt eines Postendpunkts, bei dem die Post -JSON -Daten in einer Datei definiert sind:
$ ./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 ]
Beispiel beim Klicken auf einen Patch -Endpunkt, bei dem Patch -JSON -Daten in einer Datei definiert sind:
$ ./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 ]
Beispiel Wenn wir eine Dauer für Ihren Lasttest angeben, geben wir in dem folgenden Befehl an, dass wir 100 Anfragen über eine Dauer von 30 Sekunden senden möchten:
$ ./cassowary run -u http://localhost:8000 -n 100 -d 30
Starting Load Test with 100 requests using 1 concurrent users
[ omitted for brevity ]
Beispiel Hinzufügen eines HTTP -Headers beim Ausführen von 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 ]
Beispiel Deaktivieren von HTTP-Keep-Alive (standardmäßig sind Keep-Alive-Alive aktiviert):
$ ./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 ]
Beispiel geben CA -Zertifikat an
$ ./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 ]
Beispiel angeben die Client -Authentifizierung für 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 ]
Sie können Cassowary auf verteilte Weise ausführen, wenn Sie die Lasttests auf mehr als einer Maschine skalieren müssen. Der einfachste Weg, dies zu tun, besteht darin, Zugriff auf einen Kubernetes -Cluster zu haben. Verwenden Sie den Stapeltyp in Kubernetes und in der Spec.Paralellism -Schlüssel können Sie angeben, wie viele Fälle von Cassowary Sie gleichzeitig ausführen möchten:
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 : NeverWenden Sie diese Yaml einfach wie so an:
$ kubectl apply -f cassowary.yamlCassowary kann importiert und als Modul in Ihrer Go -App verwendet werden. Beginnen Sie mithilfe der Abhängigkeit mithilfe von Go MOD:
$ go mod init test && go get github.com/rogerwelin/cassowary/pkg/clientUnd unten zeigen Sie ein einfaches Beispiel, wie Sie einen Lasttest aus Ihrem Code auslösen und die Ergebnisse drucken:
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 ))
}Weitere Bibliotheksbeispiele finden Sie hier
Cassowary folgt der semantischen Versionierung. Die öffentliche Bibliothek (PKG/Client) kann die Kompatibilität rückwärts brechen, bis sie auf eine stabile Version von V1.0.0 trifft.
Beiträge sind willkommen! Um eine Funktion anzufordern, erstellen Sie ein neues Problem mit der feature-request . Einen Fehler finden? Bitte fügen Sie ein Problem mit den bugs hinzu. Pull -Anfragen sind ebenfalls begrüßt, fügen Sie jedoch zuerst ein Problem in die angeforderte Funktion hinzu (es sei denn, es handelt sich um eine einfache Fehlerbehebung oder eine Änderung von Readme).