Ein in Knoten geschriebenes HTTP/1.1 -Benchmarking -Tool, das von WRK und WRK2 stark inspiriert ist, mit Unterstützung für HTTP -Pipelining und HTTPS. Auf meiner Box kann Autocannon mehr Ladung als wrk
und wrk2
erzeugen. Weitere Informationen finden Sie unter Einschränkungen.
Installation
Verwendung
API
Anerkennung
Lizenz
npm i autocannon -g
oder wenn Sie die API oder als Abhängigkeit verwenden möchten:
npm i autocannon --save
Usage: autocannon [opts] URL URL is any valid HTTP or HTTPS URL. If the PORT environment variable is set, the URL can be a path. In that case 'http://localhost:$PORT/path' will be used as the URL. Available options: -c/--connections NUM The number of concurrent connections to use. default: 10. -p/--pipelining NUM The number of pipelined requests to use. default: 1. -d/--duration SEC The number of seconds to run the autocannon. default: 10. -a/--amount NUM The number of requests to make before exiting the benchmark. If set, duration is ignored. -L NUM The number of milliseconds to elapse between taking samples. This controls the sample interval, & therefore the total number of samples, which affects statistical analyses. default: 1. -S/--socketPath A path to a Unix Domain Socket or a Windows Named Pipe. A URL is still required to send the correct Host header and path. -w/--workers Number of worker threads to use to fire requests. -W/--warmup Use a warm up interval before starting sampling. This enables startup processes to finish and traffic to normalize before sampling begins use -c and -d sub args e.g. `--warmup [ -c 1 -d 3 ]` --on-port Start the command listed after -- on the command line. When it starts listening on a port, start sending requests to that port. A URL is still required to send requests to the correct path. The hostname can be omitted, `localhost` will be used by default. If the command after -- is `node <script>`, this flag is optional and assumed to be `true`. -m/--method METHOD The HTTP method to use. default: 'GET'. -t/--timeout NUM The number of seconds before timing out and resetting a connection. default: 10 -T/--title TITLE The title to place in the results for identification. -b/--body BODY The body of the request. NOTE: This option needs to be used with the '-H/--headers' option in some frameworks -F/--form FORM Upload a form (multipart/form-data). The form options can be a JSON string like '{ "field 1": { "type": "text", "value": "a text value"}, "field 2": { "type": "file", "path": "path to the file" } }' or a path to a JSON file containing the form options. When uploading a file the default filename value can be overridden by using the corresponding option: '{ "field name": { "type": "file", "path": "path to the file", "options": { "filename": "myfilename" } } }' Passing the filepath to the form can be done by using the corresponding option: '{ "field name": { "type": "file", "path": "path to the file", "options": { "filepath": "/some/path/myfilename" } } }' -i/--input FILE The body of the request. See '-b/body' for more details. -H/--headers K=V The request headers. --har FILE When provided, Autocannon will use requests from the HAR file. CAUTION: you have to specify one or more domains using URL option: only the HAR requests to the same domains will be considered. NOTE: you can still add extra headers with -H/--headers but -m/--method, -F/--form, -i/--input -b/--body will be ignored. -B/--bailout NUM The number of failures before initiating a bailout. -M/--maxConnectionRequests NUM The max number of requests to make per connection to the server. -O/--maxOverallRequests NUM The max number of requests to make overall to the server. -r/--connectionRate NUM The max number of requests to make per second from an individual connection. -R/--overallRate NUM The max number of requests to make per second from all connections. connection rate will take precedence if both are set. NOTE: if using rate limiting and a very large rate is entered which cannot be met, Autocannon will do as many requests as possible per second. Also, latency data will be corrected to compensate for the effects of the coordinated omission issue. If you are not familiar with the coordinated omission issue, you should probably read [this article](http://highscalability.com/blog/2015/10/5/your-load-generator-is-probably-lying-to-you-take-the-red-pi.html) or watch this [Gil Tene's talk](https://www.youtube.com/watch?v=lJ8ydIuPFeU) on the topic. -C/--ignoreCoordinatedOmission Ignore the coordinated omission issue when requests should be sent at a fixed rate using 'connectionRate' or 'overallRate'. NOTE: it is not recommended to enable this option. When the request rate cannot be met because the server is too slow, many request latencies might be missing and Autocannon might report a misleading latency distribution. -D/--reconnectRate NUM The number of requests to make before resetting a connections connection to the server. -n/--no-progress Don't render the progress bar. default: false. -l/--latency Print all the latency data. default: false. -I/--idReplacement Enable replacement of `[<id>]` with a randomly generated ID within the request body. e.g. `/items/[<id>]`. default: false. -j/--json Print the output as newline delimited JSON. This will cause the progress bar and results not to be rendered. default: false. -f/--forever Run the benchmark forever. Efficiently restarts the benchmark on completion. default: false. -s/--servername Server name for the SNI (Server Name Indication) TLS extension. Defaults to the hostname of the URL when it is not an IP address. -x/--excludeErrorStats Exclude error statistics (non-2xx HTTP responses) from the final latency and bytes per second averages. default: false. -E/--expectBody EXPECTED Ensure the body matches this value. If enabled, mismatches count towards bailout. Enabling this option will slow down the load testing. --renderStatusCodes Print status codes and their respective statistics. --cert Path to cert chain in pem format --key Path to private key for specified cert in pem format --ca Path to trusted ca certificates for the test. This argument accepts both a single file as well as a list of files --debug Print connection errors to stderr. -v/--version Print the version number. -V/--verbose Print the table with results. default: true. -h/--help Print this menu.
Autocannon gibt Daten in solchen Tabellen aus:
Running 10s test @ http://localhost:3000 10 connections ┌─────────┬──────┬──────┬───────┬──────┬─────────┬─────────┬──────────┐ │ Stat │ 2.5% │ 50% │ 97.5% │ 99% │ Avg │ Stdev │ Max │ ├─────────┼──────┼──────┼───────┼──────┼─────────┼─────────┼──────────┤ │ Latency │ 0 ms │ 0 ms │ 0 ms │ 1 ms │ 0.02 ms │ 0.16 ms │ 16.45 ms │ └─────────┴──────┴──────┴───────┴──────┴─────────┴─────────┴──────────┘ ┌───────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬─────────┐ │ Stat │ 1% │ 2.5% │ 50% │ 97.5% │ Avg │ Stdev │ Min │ ├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ Req/Sec │ 20623 │ 20623 │ 25583 │ 26271 │ 25131.2 │ 1540.94 │ 20615 │ ├───────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼─────────┤ │ Bytes/Sec │ 2.29 MB │ 2.29 MB │ 2.84 MB │ 2.92 MB │ 2.79 MB │ 171 kB │ 2.29 MB │ └───────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┴─────────┘ Req/Bytes counts sampled once per second. 251k requests in 10.05s, 27.9 MB read
Es gibt zwei Tabellen: eine für die Anforderungslatenz und eine für das Anforderungsvolumen.
In der Latenz -Tabelle werden die Anforderungszeiten im 2,5% -Pionil, die schnellen Ausreißer, aufgeführt. bei 50%der Median; Bei 97,5%die langsamen Ausreißer; Mit 99%die höchsten Ausreißer. Hier bedeutet niedriger schneller.
In der Anforderungsvolumentabelle werden die Anzahl der gesendeten Anfragen und die Anzahl der heruntergeladenen Bytes aufgeführt. Diese Werte werden einmal pro Sekunde abgetastet. Höhere Werte bedeuten, dass mehr Anfragen bearbeitet wurden. Im obigen Beispiel wurde 2,29 MB im schlimmsten Fall in 1 Sekunde heruntergeladen (langsamste 1%). Da wir nur 10 Sekunden lang gelaufen sind, gibt es nur 10 Proben, der min -Wert und die 1% und 2,5% Perzentile sind alle gleich. Bei längeren Dauern unterscheiden sich diese Zahlen stärker.
Bei der Übergabe des Flags -l
listet eine dritte Tabelle alle von Autocannon aufgezeichneten Latenzprozentile auf:
┌────────────┬──────────────┐ │ Percentile │ Latency (ms) │ ├────────────┼──────────────┤ │ 0.001 │ 0 │ ├────────────┼──────────────┤ │ 0.01 │ 0 │ ├────────────┼──────────────┤ │ 0.1 │ 0 │ ├────────────┼──────────────┤ │ 1 │ 0 │ ├────────────┼──────────────┤ │ 2.5 │ 0 │ ├────────────┼──────────────┤ │ 10 │ 0 │ ├────────────┼──────────────┤ │ 25 │ 0 │ ├────────────┼──────────────┤ │ 50 │ 0 │ ├────────────┼──────────────┤ │ 75 │ 0 │ ├────────────┼──────────────┤ │ 90 │ 0 │ ├────────────┼──────────────┤ │ 97.5 │ 0 │ ├────────────┼──────────────┤ │ 99 │ 1 │ ├────────────┼──────────────┤ │ 99.9 │ 1 │ ├────────────┼──────────────┤ │ 99.99 │ 3 │ ├────────────┼──────────────┤ │ 99.999 │ 15 │ └────────────┴──────────────┘
Dies kann weitere Einblicke geben, wenn viele (Millionen) Anfragen gesendet wurden.
"Strict'Const autocannon = required (" autocannon ") autocannon ({{{{{{ URL: 'http: // localhost: 3000', Verbindungen: 10, // Standard Pipelining: 1, // Standardeinstellung Dauer: 10 // Standard}, console.log) // Async/AwaitaSync Funktion foo () { const result = wartung autocannon ({url: 'http: // localhost: 3000', Verbindungen: 10, // DefaultPipelining: 1, // Standardduration: 10 // Standard }) console.log (Ergebnis)}
Im Arbeitermodus verwendet autocannon
Instanzen der Worker -Klasse von Knoten, um die Lasttests in mehreren Threads auszuführen.
Die Parameter amount
und connections
sind unter den Arbeitern aufgeteilt. Wenn der entweder der Parameter von der Anzahl der workers
nicht integer teilbar ist, wird der Wert pro Arbeiter auf die niedrigste Ganzzahl abgerundet oder auf 1
gesetzt, je nachdem, welcher Wert der höher ist. Alle anderen Parameter werden pro Arbeiter angewendet, als ob der Test einsthread wäre.
HINWEIS: Im Gegensatz zu amount
und connections
werden pro Arbeiter die "Gesamt" -Parameter, maxOverallRequests
und overallRate
angewendet. Wenn Sie beispielsweise connections
zu 4
, workers
auf 2
und maxOverallRequests
auf 10
festlegen, erhält jeder Arbeiter 2
Verbindungen und eine maxOverallRequests
von 10
, was zu 20
Anfragen gesendet wird.
"Strict'Const autocannon = required (" autocannon ") autocannon ({{{{{{ URL: 'http: // localhost: 3000', Verbindungen: 10, // Standard Pipelining: 1, // Standardeinstellung Dauer: 10, // Standardeinstellung Arbeiter: 4}, console.log)
HINWEIS: Wenn Sie im Arbeitermodus einen absoluten Dateipfad an alle Optionen übergeben, die eine function
akzeptieren. Dies liegt daran, dass eine Funktion, die in den Hauptprozess übergeht, nicht kloniert und an den Arbeiter weitergegeben werden kann. Stattdessen benötigt es eine Datei, die sie require
kann. Die Optionen mit diesem Verhalten sind im folgenden Beispiel angezeigt
"Strict'Const autocannon = required (" autocannon ") autocannon ({{{{{{ // ... Arbeiter: 4, SetupClient: '/full/path/to/setup-client.js', VerifyBody: '/full/path/to/verify-body.js' ' Anfragen: [{// ... onResponse: '/full/path/to/on-response.js'}, {// ... setupRequest: '/full/path/to/setup-request.js'} ]}, console.log)
Starten Sie Autocannon gegen das angegebene Ziel.
opts
: Konfigurationsoptionen für die Autocannon -Instanz. Dies kann die folgenden Attribute haben. ERFORDERLICH .
body
: Wenn vorhanden, wird opts.body
überschrieben. Optional
headers
: Wenn vorhanden, überschreibt sie opts.headers
. Optional
method
: Wenn vorhanden, überschreibt opts.method
. Methode. Optional
path
: Wenn vorhanden, überschreibt die Optionen opts.path
. Optional
setupRequest
: Eine Function
Sie zur Mutation des RAW request
, z. B. request.method = 'GET'
. Die Parameter request
(Objekt) und context
(Objekt) und müssen die geänderte Anforderung zurückgeben. Wenn es einen falschen Wert zurückgibt, startet Autocannon von der ersten Anfrage neu. Bei der Verwendung workers
müssen Sie einen Dateipfad angeben, der stattdessen eine Funktion ausfindet (weitere Details finden Sie in den Abschnitt "Arbeiter) optional
onResponse
: Eine Function
, die Sie zur Verarbeitung der empfangenen Antwort bereitstellen können. Es nimmt status
(Nummer), body
(String) context
(Objekt) Parameter und headers
(Schlüsselwertobjekt). Bei der Verwendung workers
müssen Sie einen Dateipfad angeben, der stattdessen eine Funktion ausfindet (weitere Details finden Sie in den Abschnitt "Arbeiter) optional
url
: Das gegebene Ziel. Kann http oder https sein. Mehr als eine URL ist erlaubt, aber es wird empfohlen, dass die Anzahl der Verbindungen ein ganzzahliges Vielfaches der URL ist. ERFORDERLICH .
socketPath
: Ein Pfad zu einem UNIX -Domain -Socket oder einem Fenster mit dem Namen Pipe. Eine url
ist weiterhin erforderlich, um den richtigen Host -Header und den richtigen Pfad zu senden. Optional .
workers
: Anzahl der Arbeiterfäden, die an Anfragen abfeuern können.
connections
: Die Anzahl der gleichzeitigen Verbindungen. Optionale Standardeinstellung: 10
.
duration
: Die Anzahl der Sekunden, um den Autocannon auszuführen. Kann zeitlich sein. Optionale Standardeinstellung: 10
.
amount
: Eine Number
, in der die Anzahl der Anfragen angegeben ist, die vor dem Ende des Tests gestellt werden sollen. Diese Überschreibung überlebt die Dauer und hat Vorrang, sodass der Test erst endet, wenn die Anzahl der erforderlichen Anforderungen abgeschlossen werden muss. Optional .
sampleInt
: Die Anzahl der Millisekunden, die zwischen Proben eingehen. Dies steuert das Probenintervall und daher die Gesamtzahl der Proben, die statistische Analysen beeinflusst. Standard: 1.
timeout
: Die Anzahl der Sekunden, um zuvor auf eine Antwort zu warten. Optionale Standardeinstellung: 10
.
pipelining
: Die Anzahl der pipelierten Anfragen für jede Verbindung. Wird dazu führen, dass die Client
-API bei mehr als 1. optionaler Standard wirft: 1
.
bailout
: Der Schwellenwert der Anzahl der Fehler beim Erstellen der Anfragen an den Server vor dieser Instanz ist Kaution aus. Diese Instanz wird bisher alle vorhandenen Ergebnisse einnehmen und sie in die Ergebnisse zusammenfassen. Wenn hier keiner vergangen ist, ignoriert die Instanz Fehler und rettet niemals. Optional Standard: undefined
.
method
: Die zu verwendende HTTP -Methode. Optionale default: 'GET'
.
title
: Eine String
, die zu den Ergebnissen zur Identifizierung hinzugefügt wird. Optional Standard: undefined
.
body
: Eine String
oder ein Buffer
der den Körper der Anfrage enthält. Fügen Sie eine oder mehrere zufällig generierte IDs in den Körper ein, indem Sie [<id>]
einbeziehen, wobei die zufällig generierte ID eingefügt werden sollte (muss auch IDreplacement auf true festlegen). Dies kann bei Einweilen von Post -Endpunkten nützlich sein, bei denen ein oder mehrere Felder einzigartig sein müssen. Lassen Sie undefinierte für einen leeren Körper. Optional Standard: undefined
.
form
: eine String
oder ein Object
das die Optionen Mehrfach-/Formdaten oder einen Pfad zur JSON-Datei enthält, die sie enthält
headers
: Ein Object
das die Header der Anfrage enthält. Optional Standard: {}
.
initialContext
: Ein Objekt, mit dem Sie Ihren Kontext initialisieren möchten. Schauen Sie sich ein Beispiel für die Initialisierung des Kontextes an. Optional
setupClient
: Eine Function
, die das Client
-Objekt für jede zu erstellende Verbindung übergeben wird. Dies kann verwendet werden, um jede einzelne Verbindungsheader und den Körper mithilfe der unten gezeigten API anzupassen. Die Änderungen, die Sie an den Kunden in dieser Funktion vornehmen, haben Vorrang vor dem body
und headers
die Sie hier weitergeben. Es gibt ein Beispiel hierfür im Samplesordner. Optional Standard: function noop () {}
. Bei der Verwendung workers
müssen Sie einen Dateipfad angeben, der stattdessen eine Funktion exportiert (weitere Informationen finden Sie im Abschnitt "Arbeitnehmer).
verifyBody
: Eine Function
, die für jede abgeschlossene Anfrage die Antwortbehörde übergeben wird. Jede Anfrage, deren verifyBody
-Funktion keinen wahren Wert zurückgibt, wird in mismatches
gezählt. Diese Funktion wird Vorrang vor dem expectBody
haben. Es gibt ein Beispiel hierfür im Samplesordner. Bei der Verwendung workers
müssen Sie einen Dateipfad angeben, der eine Funktion standardmäßig exportiert (weitere Informationen finden Sie im Abschnitt "Arbeitnehmer).
maxConnectionRequests
: Eine Number
in der die maximalen Anfragen pro Verbindung angegeben werden. amount
hat Vorrang, wenn beide eingestellt sind. Optional
maxOverallRequests
: Eine Number
in der die maximalen Anfragen insgesamt angegeben sind. Kann nicht weniger als connections
sein. maxConnectionRequests
hat Vorrang, wenn beide festgelegt sind. Optional
connectionRate
: Eine Number
, in der die Anforderungen an Anfragen pro Sekunde aus jeder einzelnen Verbindung angegeben sind. Standardmäßig keine Rate einschränken. Optional
overallRate
: Eine Number
die die Anfragenquote pro Sekunde aus allen Verbindungen angibt. connectionRate
hat Vorrang, wenn beide eingestellt sind. Standardmäßig keine Rate einschränken. Optional
ignoreCoordinatedOmission
: Ein Boolean
, der die Korrektur von Latenzen deaktiviert, um das koordinierte Auslassungsproblem auszugleichen. Ist nicht sinnvoll, wenn keine Anfragensrate angegeben wurde ( connectionRate
oder overallRate
). Optional Standard: false
.
reconnectRate
: Eine Number
, die die einzelnen Verbindungen dazu bringt, den Server zu trennen und wieder zu verbinden, wenn sie diese Anzahl von Anforderungen gesendet hat. Optional
requests
: Ein Array
von Object
, das die Abfolge von Anfragen darstellt, die beim Benchmarking gestellt werden sollen. Kann in Verbindung mit den oben genannten body
, headers
und method
verwendet werden. Überprüfen Sie den Ordner der Proben, um ein Beispiel dafür zu erhalten, wie dies verwendet werden kann. Optional . Enthaltene Objekte können diese Attribute haben:
har
: Ein Object
von analysierten HAR -Inhalten. Autocannon wird extra und verwenden entries.request
Request: requests
, method
, form
und body
werden ignoriert. Hinweis : Sie müssen sicherstellen, dass die Einträge dieselbe Domäne wie url
-Option abzielen. Optional
idReplacement
: Ein Boolean
, der den Austausch von [<id>]
-Tags innerhalb der Anforderungsbehörde durch eine zufällig generierte ID ermöglicht, damit eindeutige Felder mit Anfragen gesendet werden können. Schauen Sie sich ein Beispiel für die programmatische Verwendung an, die in den Proben zu finden ist. Optional Standard: false
forever
: Ein Boolean
, mit dem Sie eine Instanz von Autocannon einrichten können, die nach dem Abschluss der Ergebnisse mit dem done
Ereignis auf unbestimmte Zeit neu gestartet wird. Nützlich, um Ihre Instanz effizient neu zu starten. Um nicht mehr für immer zu laufen, müssen Sie eine SIGINT
oder die Funktion .stop()
in Ihrer Instanz aufrufen. Optional Standard: false
servername
: Eine String
, die den Servernamen für die TLS -Erweiterung der SNI (Servernamenanzeige) identifiziert. Optionale Standardeinstellung: Standardmäßig zum Hostnamen der URL, wenn es sich nicht um eine IP -Adresse handelt.
excludeErrorStats
: Ein Boolean
, mit dem Sie die Verfolgung von Nicht-2xx-Codeantworten in Latenz und Bytes pro Sekunde deaktivieren können. Optional Standard: false
.
expectBody
: Eine String
die den erwarteten Reaktionskörper darstellt. Jede Anfrage, deren Reaktionsbehörde nicht gleich zu expectBody
ist, wird in mismatches
gezählt. Wenn dies aktiviert ist, zählen Fehlanpassungen in Richtung Rettungspaket. Optional
tlsOptions
: Ein Object
, das in den tls.connect
-Anruf übergeben wird (vollständige Liste der Optionen). Hinweis: Dies gilt nur, wenn Ihre URL sicher ist.
skipAggregateResult
: Ein Boolean
, mit dem Sie die aggregierte Ergebnisphase eines Instanzlaufs deaktivieren können. Siehe Autocannon.aggregateresult
cb
: Der Rückruf, der nach Abschluss eines Benchmarks aufgerufen wird. Nimmt die folgenden Parameter. Optional .
err
: Wenn ein Fehler mit dem Lauf aufgetreten ist.
results
: Die Ergebnisse des Laufs.
Gibt einen Instanz-/Ereignis -Emitter für die Verfolgung des Fortschritts usw. zurück . Wenn cb
weggelassen wird, kann der Rückgabewert auch als Versprechen verwendet werden.
Beim Ausführen erstellt Autocannon so viele Client
wie gewünschte Verbindungen. Sie werden parallel laufen, bis der Benchmark beendet ist (Dauer oder Gesamtzahl der Anfragen). Jeder Client wird über das requests
-Array schleifen, würde er eine oder mehrere Anfragen enthalten.
Während der verfügbaren Anfragen führt der Kunde einen context
bei: ein Objekt, das Sie in onResponse
und setupRequest
-Funktionen verwenden können, um einige kontextbezogene Daten zu speichern und zu lesen. Bitte überprüfen Sie die Datei request-context.js
in Samples.
Beachten Sie, dass das context
auf initialContext
(oder {}
nicht bereitgestellt wird) zurückgesetzt wird, wenn die erste verfügbare Anforderung neu gestartet wird, um ähnliche Läufe zu gewährleisten.
Bei der Kombination einer festen amount
an Anforderungen mit gleichzeitigen connections
und einer overallRate
-Grenze vertreibt Autocannon die Anforderungen und den beabsichtigten Zinssatz über alle Verbindungen. Wenn die overallRate
nicht bezahlbar ist, konfiguriert Autocannon einige Verbindungsclients mit einem höheren und einige mit einer geringeren Anzahl von Anforderungen/zweiten Raten. Wenn der amount
jetzt eine ganzzahlige teilbar ist , erhalten alle Verbindungsclients die gleiche Anzahl von Anfragen. Dies bedeutet, dass die Kunden mit einer höheren Anforderungsrate früher abgeschlossen sind als die anderen, was zu einem Rückgang der wahrgenommenen Anforderungsrate führt.
Beispiel: connections = 10, overallRate = 17, amount = 5000
Verfolgen Sie programmgesteuert den Fortschritt Ihres Autocannon.
instance
: Die Instanz von Autocannon. ERFORDERLICH .
opts
: Konfigurationsoptionen für die Verfolgung. Dies kann die folgenden Attribute haben. Optional .
outputStream
: Der Stream soll ausgeben. Standard: process.stderr
.
renderProgressBar
: Ein wahrer Wert, um das Rendern der Fortschrittsbalken zu ermöglichen. Standard: true
.
renderResultsTable
: Ein Wahrheitswert, um die Darstellung der Ergebnistabelle zu ermöglichen. Standard: true
.
renderLatencyTable
: Ein wahrer Wert, um die Darstellung der Advanced Latencyzentabelle zu ermöglichen. Standard: false
.
progressBarString
: Eine string
, die das Format der Fortschrittsanzeigeausgabe definiert. Muss eine gültige Eingabe für das Fortschrittsbalkenmodul sein. Standard: 'running [:bar] :percent'
.
Beispiel, das nur die Ergebnistabelle nach Abschluss druckt:
'strict'Const autocannon = required (' autocannon ') constance = autocannon ({{{{{ URL: 'http: // localhost: 3000'}, console.log) // Dies wird verwendet, um die Instanz auf ctrl-Cprocess.once ('sigint', () => { Instance.Stop ()}) // rendere resultsAutocannon.track (Instance, {RenderProgressBar: False})
Schauen Sie sich dieses Beispiel an, um es auch zu sehen.
Gibt eine Textzeichenfolge zurück, die die Ergebnistabellen enthält.
resultObject
: Das Ergebnisobjekt von Autocannon. ERFORDERLICH .
opts
: Konfigurationsoptionen zum Generieren der Tabellen. Dies können die folgenden Attribute enthalten. Optional .
outputStream
: Der Strom, an den Ausgabe gerichtet ist. Es wird hauptsächlich verwendet, um zu überprüfen, ob das Terminal die Farbe unterstützt. Standard: process.stderr
.
renderResultsTable
: Ein wahrer Wert, um die Erstellung der Ergebnistabelle zu ermöglichen. Standard: true
.
renderLatencyTable
: Ein wahrer Wert, um die Erstellung der Latenztabelle zu ermöglichen. Standard: false
.
Beispiel:
"Strict"; const {stdout} = required ("node: process"); const autocannon = required ("autocannon"); Funktion print (result) { stdout.write (Autocannon.prinTreSult (Ergebnis));} Autocannon ({url: "http: // localhost: 3000"}, (err, result) => print (result));
Aggregieren Sie die Ergebnisse einer oder mehrerer Autokannon -Instanz -Ausführungen, in denen die Instanzen von Autocannon mit der Option skipAggregateResult
ausgeführt wurden.
Dies ist ein erweiterter Anwendungsfall, in dem Sie möglicherweise einen Lasttest mit Autocannon über mehrere Maschinen hinweg ausführen und daher die Ergebnisse auf eine spätere Zeit verschieben müssen.
results
: Eine Reihe von Autocannon -Instanzergebnissen, bei denen die Instanzen mit der Option skipAggregateResult
auf true ausgeführt wurden. ERFORDERLICH .
opts
: Dies ist eine Teilmenge der Optionen, die Sie an die Haupt -Autocannon -API übergeben würden, sodass Sie dasselbe Optionsobjekt wie das zur Ausführung der Instanzen verwendet werden. Weitere Beschreibungen der Optionen finden Sie in Autocannon. ERFORDERLICH .
url
: Erforderlich
title
: Optional Standard: undefined
socketPath
: Optional
connections
: Optional Standard: 10
.
sampleInt
: Optional Standard: 1
pipelining
: Optional Standard: 1
workers
: Optional Standard: undefined
Da eine Autocannon -Instanz ein EventEmitter
ist, gibt es mehrere Ereignisse aus. Diese sind unten:
start
: Nachdem in Ihrer Autocannon -Instanz alles eingerichtet wurde und es begonnen hat. Nützlich, wenn die Instanz für immer ausführt.
tick
: Jede Sekunde emittiert in diesem Autocannon einen Benchmark. Nützlich zum Anzeigen von Statistiken usw., die von der track
-Funktion verwendet werden. Das tick
-Ereignis verbreitet ein Objekt, das den counter
und bytes
enthält, der für erweiterte Berichte verwendet werden kann.
done
: Emission, wenn der Autocannon einen Benchmark beendet. Übergibt die results
als Argument an den Rückruf.
response
: Emittiert, wenn die Autocannons HTTP-Client eine HTTP-Antwort vom Server erhalten. Dies übergibt die folgenden Argumente an den Rückruf:
client
: Der http-client
selbst. Kann verwendet werden, um die Header und den Körper zu ändern, den der Client an den Server sendet. API unten.
statusCode
: Der HTTP -Statuscode der Antwort.
resBytes
: Die Antwort Byte Länge.
responseTime
: Die Zeit, die benötigt wird, um eine Antwort nach der Einleitung der Anfrage zu erhalten.
reqError
: Emittiert im Fall eines Anforderungsfehlers, z. B. einer Zeitüberschreitung.
error
: Emission, wenn während der Einrichtungsphase des Autocannon einen Fehler vorliegt.
Das von done
abgestimmte und an den autocannon()
-Aufruf übergebene Ergebnisse ist folgende Eigenschaften:
title
: Wert der an autocannon()
übergebenen title
.
url
: Die URL, die gezielt wurde.
socketPath
: Der UNIX -Domänen -Socket oder Fenster mit dem Namen als undefined
Rohr.
requests
: Ein Histogrammobjekt, das Statistiken über die Anzahl der Anfragen enthält, die pro Sekunde gesendet wurden.
latency
: Ein Histogrammobjekt, das Statistiken zur Antwortlatenz enthält.
throughput
: Ein Histogramm -Objekt, das Statistiken zum Antwortdaten -Durchsatz pro Sekunde enthält.
duration
: Die Zeit, die der Test in Sekunden dauerte.
errors
: Die Anzahl der Verbindungsfehler (einschließlich Zeitüberschreitungen), die aufgetreten sind.
timeouts
: Die Anzahl der Timeouts mit Verbindungen, die stattgefunden haben.
mismatches
: Die Anzahl der Anfragen mit einem nicht übereinstimmenden Körper.
start
: Ein Datumsobjekt, das zu Beginn des Tests darstellt.
finish
: Ein Datumsobjekt, das nach dem Ende des Tests darstellt.
connections
: Die Menge der verwendeten Verbindungen (Wert von opts.connections
).
pipelining
: Die Anzahl der pipelierten Anforderungen pro Verbindung (Wert von opts.pipelining
).
non2xx
: Die Anzahl der empfangenen Nicht-2xx-Antwortstatuscodes.
resets
: Wie oft wurde die Anforderungspipeline aufgrund der setupRequest
eines falschen Wertes zurückgesetzt?
statusCodeStats
: Anforderungszähler pro Statuscode (z. B. { "200": { "count": "500" } }
)
Die Histogrammobjekte für requests
, latency
und throughput
sind HDR-Histogramm-Percentiles-Obj-Objekte und haben diese Form:
min
: Der niedrigste Wert für diese Statistik.
max
: Der höchste Wert für diese Statistik.
average
: der durchschnittliche (mittlere) Wert.
stddev
: Die Standardabweichung.
p*
: Der XXTH -Perzentilwert für diese Statistik. Die Perzentileigenschaften sind: p2_5
, p50
, p75
, p90
, p97_5
, p99
, p99_9
, p99_99
, p99_999
.
Client
-API Dieses Objekt wird als erster Parameter sowohl der setupClient
-Funktion als auch des response
aus einer Autocannon -Instanz übergeben. Sie können dies verwenden, um die Anfragen zu ändern, die Sie beim Benchmarking senden. Dies ist auch ein EventEmitter
mit den unten aufgeführten Ereignissen und ihren Paramien.
client.setHeaders(headers)
: Wird verwendet, um die Header der Anfrage zu ändern, die dieser Client -Iterator derzeit anliegt. headers
sollten ein Object
oder undefined
sein, wenn Sie Ihre Header entfernen möchten.
client.setBody(body)
: Wird verwendet, um den Körper der Anforderung zu ändern. Dieser Client -Iterator befindet sich derzeit. body
sollte eine String
oder Buffer
sein oder undefined
, wenn Sie den Körper entfernen möchten.
client.setHeadersAndBody(headers, body)
: Verwendet, um sowohl die Header als auch die Körper zu ändern, die dieser Kunden -Iterator derzeit befindet. headers
und body
sollten die gleiche Form wie oben annehmen.
client.setRequest(request)
: Wird verwendet, um die gesamte Anfrage zu ändern, dass sich dieser Client -Iterator derzeit befindet. Kann headers
, body
, method
oder path
als Attribute haben. Standardeinstellungen zu den Werten, die in die Autocannon -Instanz übergeben wurden, wenn sie erstellt wurden. Note: call this when modifying multiple request values for faster encoding
client.setRequests(newRequests)
: Wird verwendet, um das gesamte Anfragen Array zu überschreiben, das in die Instanz zur Initiierung übergeben wurde. Note: call this when modifying multiple requests for faster encoding
Client
Die Ereignisse, die ein Client
ausgeben kann, sind hier aufgeführt:
headers
: Emission, als eine von diesem Kunden gesendete Anfrage die Header seiner Antwort erhalten hat. Dies empfing ein Object
als Parameter.
body
: Emission, als eine von diesem Kunden gesendete Anfrage den Körper einer Antwort erhalten hat. Dies empfängt einen Buffer
als Parameter.
response
: Ausgegeben, wenn der Kunde eine abgeschlossene Antwort für eine erhobene Anfrage erhalten hat. Dies wird die folgenden Argumente übergeben:
statusCode
: Der HTTP -Statuscode der Antwort.
resBytes
: Die Antwort Byte Länge.
responseTime
: Die Zeit, die benötigt wird, um eine Antwort nach der Einleitung der Anfrage zu erhalten.
reset
: Emittiert, wenn die Anforderungen Pipeline aufgrund der setupRequest
eines falschen Wertes zurückgesetzt wurde.
Beispiel unter Verwendung der Autocannon -Ereignisse und der Client -API und der Ereignisse:
'strict'Const autocannon = required (' autocannon ') constance = autocannon ({{{{{ URL: 'http: // localhost: 3000', SetUpClient: SetUpClient}, (Err, Ergebnis) => Handleresults (Ergebnis)) // Die an den Rückruf übergebenen Ergebnisse sind die gleichen wie die, die aus dem erledigten EventsInstance.on ('Done', Handleresults) Instanz ('Tick' ausgestrahlt werden. , () => console.log ('ticking')) Instance.on ('Antwort', Handlesponse) Funktion SetupClient (client) { client.on ('body', console.log) // console.log eine Antwortkörper, wenn es empfangen wird} Funktion Handleresponse (Client, StatusCode, Resbytes, ResponTime) { console.log (`Antwort mit Code $ {statuscode} in $ {responTime} milliseconds`) Console.log (`Antwort: $ {resbytes.toString ()}`) // Aktualisieren Sie den Körper oder die Header client.setheaders ({new: 'header'}) Client.setBody ('neuer Körper') client.setheadersandbody ({new: 'header'}, 'neuer Körper')} Funktion Handleresults (Ergebnis) { // ...}
Autocannon ist in JavaScript für die Laufzeit von node.js geschrieben und ist CPU-gebunden. Wir haben überprüft, ob es mit wrk
vergleichbare Ergebnisse liefert, wenn das Benchmarking -Knoten.JS -Anwendungen mit dem http
-Modul verwendet werden. Dennoch verwendet es deutlich mehr CPU als andere Tools, die für eine Binärdatei wie wrk
zusammenhängen. Autocannon kann die CPU sättigen, z. B. der Autocannon -Prozess erreicht 100%: In diesen Fällen empfehlen wir die Verwendung wrk2
.
Betrachten wir beispielsweise einen Lauf mit 1000 Verbindungen auf einem Server mit 4 Kernen mit Hyperthreading:
wrk
verwendet 2 Threads (standardmäßig) und eine Auxiliary, um die Metriken mit einer Gesamtlast der CPU von 20% + 20% + 40% zu sammeln.
autocannon
verwendet einen einzelnen Thread bei 80% CPU -Last.
Beide sättigen einen Node.js-Prozess bei etwa 41.000 Req/s, autocannon
kann jedoch früher sättigen, da er einstätig ist.
Beachten Sie, dass wrk
HTTP/1.1 Pipelining nicht unterstützt. Infolgedessen kann autocannon
für jede offene Verbindung mehr Lade auf dem Server als WRK erstellen.
Dieses Projekt wurde freundlicherweise von Nearform gesponsert.
Logo und Identität, die von Cosmic Fox Design entwickelt wurden: https://www.behance.net/cosmicfox.
WRK und WRK2 lieferten große Inspiration.
Wenn Sie Autocannon verwenden oder Fragen haben, lassen Sie es uns wissen: Gitter
Glen Keane | Github
Salman Mitha | Github | NPM
Copyright Matteo Collina und andere Mitwirkende, lizenziert unter MIT.