Un outil d'analyse d'analyse HTTP / 1.1 écrite en nœud, grandement inspiré par WRK et WRK2, avec prise en charge de HTTP Pipelining et HTTPS. Dans ma boîte, AutocanNON peut produire plus de chargement que wrk
et wrk2
, voir les limitations pour plus de détails.
Installation
Usage
API
Remerciements
Licence
npm i autocannon -g
ou si vous souhaitez utiliser l'API ou comme dépendance:
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 produit des données dans des tables comme celle-ci:
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
Il y a deux tables: une pour la latence de demande et une pour le volume de demande.
Le tableau de latence répertorie les heures de demande au centile de 2,5%, les valeurs aberrantes rapides; à 50%, la médiane; à 97,5%, les valeurs aberrantes lents; À 99%, les valeurs aberrantes les plus lentes. Ici, plus bas signifie plus rapidement.
Le tableau de volume de demande répertorie le nombre de demandes envoyées et le nombre d'octets téléchargés. Ces valeurs sont échantillonnées une fois par seconde. Des valeurs plus élevées signifient que plus de demandes ont été traitées. Dans l'exemple ci-dessus, 2,29 Mo ont été téléchargés en 1 seconde dans le pire des cas (1% le plus lent). Comme nous n'avons couru que pendant 10 secondes, il n'y a que 10 échantillons, la valeur min et les centiles de 1% et 2,5% sont tous le même échantillon. Avec des durées plus longues, ces nombres différeront davantage.
Lors du passage du drapeau -l
, une troisième table répertorie tous les centiles de latence enregistrés par automatique:
┌────────────┬──────────────┐ │ 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 │ └────────────┴──────────────┘
Cela peut donner plus d'informations si beaucoup (des millions) de demandes ont été envoyées.
'utiliser strict'const autocannon = require (' autocannon ') autocannon ({{ URL: «http: // localhost: 3000», Connexions: 10, // par défaut pipeline: 1, // par défaut durée: 10 // par défaut}, console.log) // fonction async / Awaitasync foo () { const result = attendre automatique }) console.log (résultat)}
En mode travailleurs, autocannon
utilise les instances de la classe de travailleurs de Node pour exécuter les tests de charge dans plusieurs threads.
Les paramètres amount
et connections
sont divisés entre les travailleurs. Si l'un ou l'autre paramètre n'est pas divisible par le nombre de workers
, la valeur par travailleur est arrondi à l'entier le plus bas, ou réglé sur 1
, selon le plus haut. Tous les autres paramètres sont appliqués par travailleur comme si le test était unique.
Remarque: Contrairement à amount
et connections
, les paramètres "globaux", maxOverallRequests
et overallRate
, sont appliqués par travailleur . Par exemple, si vous définissez connections
à 4
, workers
vers 2
et maxOverallRequests
sur 10
, chaque travailleur recevra 2
connexions et un maxOverallRequests
de 10
, ce qui entraînera l'envoi 20
demandes.
'utiliser strict'const autocannon = require (' autocannon ') autocannon ({{ URL: «http: // localhost: 3000», Connexions: 10, // par défaut pipeline: 1, // par défaut Durée: 10, // par défaut travailleurs: 4}, console.log)
Remarque: En mode travailleurs, vous devez passer un chemin de fichier absolu vers toutes les options qui acceptent une function
. En effet, une fonction transmise dans le processus principal ne peut pas être clonée et transmise au travailleur. Donc, à la place, il a besoin d'un fichier dont il peut require
. Les options avec ce comportement sont affichées dans l'exemple ci-dessous
'utiliser strict'const autocannon = require (' autocannon ') autocannon ({{ // ... Travailleurs: 4, setupClient: '/full/path/to/setup-tlient.js', VerifyBody: '/full/path/to/verify-body.js' Demandes: [{// ... onResponse: '/full/path/to/on-response.js'}, {// ... setupRequest: '/full/path/to/setup-request.js'} ]}, console.log)
Commencez automatiquement contre la cible donnée.
opts
: Options de configuration pour l'instance automatique. Cela peut avoir les attributs suivants. REQUIS .
body
: lorsqu'il sera présent, il remplacera opts.body
. FACULTATIF
headers
: lorsqu'ils sont présents, il remplacera opts.headers
. FACULTATIF
method
: Lorsque présente, il remplacera opts.method
. FACULTATIF
path
: lorsqu'il est présent, il remplacera opts.path
. FACULTATIF
setupRequest
: une Function
vous pouvez fournir pour muter l'objet request
brut, par exemple request.method = 'GET'
. Il prend des paramètres request
(objet) et context
(objet), et doit renvoyer la demande modifiée. Lorsqu'il renvoie une valeur de mensonge, AutocanNnon redémarre à partir de la première demande. Lorsque vous utilisez workers
, vous devez fournir un chemin de fichier qui exporte par défaut une fonction à la place (consultez la section des travailleurs pour plus de détails) facultatif
onResponse
: une Function
que vous pouvez fournir pour traiter la réponse reçue. Il prend des paramètres et headers
de status
(numéro), context
body
(chaîne) (objet) (objet clé-valeur). Lorsque vous utilisez workers
, vous devez fournir un chemin de fichier qui exporte par défaut une fonction à la place (consultez la section des travailleurs pour plus de détails) facultatif
url
: la cible donnée. Peut être HTTP ou HTTPS. Plus d'une URL est autorisée, mais il est recommandé que le nombre de connexions soit un multiple entier de l'URL. REQUIS .
socketPath
: un chemin vers une prise de domaine UNIX ou une fenêtre nommée tuyau. Une url
est toujours nécessaire pour envoyer l'en-tête et le chemin de l'hôte correct. FACULTATIF .
workers
: Nombre de threads de travailleur à utiliser pour licencier les demandes.
connections
: le nombre de connexions simultanées. Par défaut facultatif : 10
.
duration
: le nombre de secondes pour exécuter l'autocann. Peut être un calendrier. Par défaut facultatif : 10
.
amount
: un Number
indiquant le nombre de demandes à faire avant de terminer le test. Cela remplace la durée et la priorité, de sorte que le test ne se terminera pas tant que le nombre de demandes à remplir n'est pas terminé. FACULTATIF .
sampleInt
: le nombre de millisecondes à s'écouler entre la prise d'échantillons. Cela contrôle l'intervalle d'échantillon, et donc le nombre total d'échantillons, qui affecte les analyses statistiques. par défaut: 1.
timeout
: le nombre de secondes pour attendre une réponse auparavant. Par défaut facultatif : 10
.
pipelining
: le nombre de demandes de pipelined pour chaque connexion. Provoquera une API Client
lorsque plus de 1. Par défaut facultatif : 1
.
bailout
: le seuil du nombre d'erreurs lors de la requête au serveur avant que cette instance ne soit la mise en liberté sous caution. Cette instance prendra jusqu'à présent tous les résultats existants et les regroupera dans les résultats. Si aucune ne passait ici, l'instance ignorera les erreurs et ne renflouera jamais. Par défaut facultatif : undefined
.
method
: la méthode HTTP à utiliser. Par défaut facultatif default: 'GET'
.
title
: Une String
à ajouter aux résultats pour l'identification. Par défaut facultatif : undefined
.
body
: une String
ou un Buffer
contenant le corps de la demande. Insérez un ou plusieurs ID générés au hasard dans le corps en incluant [<id>]
où l'ID généré aléatoire doit être inséré (doit également définir IDReplacement sur true). Cela peut être utile pour faire tremper les points de terminaison après un ou plusieurs champs doivent être uniques. Laissez indéfini pour un corps vide. Par défaut facultatif : undefined
.
form
: une String
ou un Object
contenant les options multipart / formulaire de forme de formulaire ou un chemin vers le fichier JSON les contenant
headers
: un Object
contenant les en-têtes de la demande. Par défaut facultatif : {}
.
initialContext
: un objet avec lequel vous souhaitez initialiser votre contexte. Consultez un exemple d'initialisation du contexte. FACULTATIF
setupClient
: une Function
qui sera transmise l'objet Client
pour chaque connexion à faire. Ceci peut être utilisé pour personnaliser chaque en-têtes de connexion et le corps individuels à l'aide de l'API ci-dessous. Les modifications que vous apportez au client dans cette fonction auront la priorité sur le body
par défaut et headers
que vous transmettez ici. Il y en a un exemple dans le dossier des échantillons. Par défaut facultatif : function noop () {}
. Lorsque vous utilisez workers
, vous devez fournir un chemin de fichier qui exporte à la place une fonction par défaut (consultez la section des travailleurs pour plus de détails).
verifyBody
: une Function
qui sera transmise le corps de réponse pour chaque demande terminée. Chaque demande, dont la fonction verifyBody
ne renvoie pas de valeur de vérité, est comptée dans mismatches
. Cette fonction aura la priorité sur l' expectBody
. Il y en a un exemple dans le dossier des échantillons. Lorsque vous utilisez workers
, vous devez fournir un chemin de fichier qui exporte par défaut une fonction (consultez la section des travailleurs pour plus de détails).
maxConnectionRequests
: un Number
indiquant les demandes max à faire par connexion. amount
a la priorité si les deux sont définis. FACULTATIF
maxOverallRequests
: un Number
indiquant les demandes maximales à faire dans l'ensemble. Ne peut pas être inférieur aux connections
. maxConnectionRequests
a priorité si les deux sont définis. FACULTATIF
connectionRate
: un Number
indiquant le taux de demandes à faire par seconde à partir de chaque connexion individuelle. Aucune limitation de taux par défaut. FACULTATIF
overallRate
: un Number
indiquant le taux de demandes à faire par seconde à partir de toutes les connexions. connectionRate
a la priorité si les deux sont définis. Aucune limitation de taux par défaut. FACULTATIF
ignoreCoordinatedOmission
: Un Boolean
qui désactive la correction des latences pour compenser la question d'omission coordonnée. N'a pas de sens lorsqu'aucune taux de demandes n'a été spécifiée ( connectionRate
outrate overallRate
). Par défaut facultatif : false
.
reconnectRate
: un Number
qui fait que les connexions individuelles se déconnectent et se reconnectent au serveur chaque fois qu'il a envoyé ce nombre de demandes. FACULTATIF
requests
: un Array
d' Object
S qui représente la séquence de demandes à faire pendant l'analyse comparative. Peut être utilisé conjointement avec le body
, headers
et les paramètres method
ci-dessus. Vérifiez le dossier des échantillons pour un exemple de la façon dont cela pourrait être utilisé. FACULTATIF . Les objets contenus peuvent avoir ces attributs:
har
: Un Object
de contenu HAR analysé. AutoCanNnon sera plus method
body
requests
entries.request
form
Remarque : vous devez vous assurer que les entrées ciblent le même domaine que l'option url
. FACULTATIF
idReplacement
: un Boolean
qui permet le remplacement des balises [<id>]
dans le corps de la demande par un ID généré au hasard, permettant d'envoyer des champs uniques avec des demandes. Découvrez un exemple d'utilisation programmatique qui peut être trouvée dans les échantillons. Par défaut facultatif : false
forever
: un Boolean
qui vous permet de configurer une instance de automatique qui redémarre indéfiniment après avoir émis des résultats avec l'événement done
. Utile pour redémarrer efficacement votre instance. Pour arrêter de courir pour toujours, vous devez provoquer un SIGINT
ou appeler la fonction .stop()
sur votre instance. Par défaut facultatif : false
servername
: une String
identifiant le nom du serveur pour l'extension TLS SNI (Nom Indication). Par défaut facultatif : par défaut, le nom d'hôte de l'URL lorsqu'il n'est pas une adresse IP.
excludeErrorStats
: un Boolean
qui vous permet de désactiver le suivi des réponses de code non 2xx en latence et des octets par seconde. Par défaut facultatif : false
.
expectBody
: une String
représentant le corps de réponse attendu. Chaque demande dont le corps de réponse n'est pas égal à expectBody
est compté dans mismatches
. S'il est activé, les décalages comptent pour le renflouement. FACULTATIF
tlsOptions
: Un Object
qui est passé dans l'appel tls.connect
(liste complète des options). Remarque: Cela ne s'applique que si votre URL est sécurisée.
skipAggregateResult
: un Boolean
qui vous permet de désactiver la phase de résultat agrégé d'une exécution d'instance. Voir autocannon.aggregatesult
cb
: Le rappel qui est appelé à l'achèvement d'une référence. Prend les paramètres suivants. FACULTATIF .
err
: s'il y avait une erreur rencontrée avec la course.
results
: les résultats de la course.
Renvoie un émetteur d'instance / événement pour le suivi des progrès, etc. Si cb
est omis, la valeur de retour peut également être utilisée comme promesse.
Lors de l'exécution, AutocanNON créera autant d'objets Client
que les connexions souhaitées. Ils fonctionneront en parallèle jusqu'à la fin de la référence (durée ou nombre total de demandes). Chaque client enroulera le tableau requests
, il contiendrait une ou plusieurs demandes.
Tout en parcourant les demandes disponibles, le client conservera un context
: un objet que vous pouvez utiliser dans les fonctions onResponse
et setupRequest
, pour stocker et lire certaines données contextuelles. Veuillez vérifier le fichier request-context.js
dans des échantillons.
Notez que l'objet context
sera réinitialisé à initialContext
(ou {}
il n'est pas fourni) lors du redémarrage de la première demande disponible, garantissant des exécutions similaires.
Lors de la combinaison d'une amount
fixe de demandes avec connections
simultanées et une limite de overallRate
, AutocanNON distribuera les demandes et le taux prévu sur toutes les connexions. Si le overallRate
n'est pas divisible entier, AutoCanNnon configurera certains clients de connexion avec un nombre plus élevé et certains avec un nombre inférieur de demandes / deuxième taux. Si maintenant le amount
est divisible entier, tous les clients de la connexion obtiennent le même nombre de demandes. Cela signifie que les clients avec un taux de demande plus élevé se termineront plus tôt, que les autres, ce qui entraînera une baisse du taux de demande perçu.
Exemple: connections = 10, overallRate = 17, amount = 5000
Suivez les progrès de votre automatique, par programme.
instance
: l'instance de automatique. REQUIS .
opts
: Options de configuration pour le suivi. Cela peut avoir les attributs suivants. FACULTATIF .
outputStream
: le flux à sortir vers. par défaut: process.stderr
.
renderProgressBar
: une valeur de vérité pour permettre le rendu de la barre de progression. par défaut: true
.
renderResultsTable
: une valeur de vérité pour permettre le rendu du tableau des résultats. par défaut: true
.
renderLatencyTable
: une valeur de vérité pour permettre le rendu de la table de latence avancée. par défaut: false
.
progressBarString
: une string
définissant le format de la sortie d'affichage de progression. Doit être une entrée valide pour le module de barre de progression. Par défaut: 'running [:bar] :percent'
.
Exemple qui imprime simplement le tableau des résultats à la fin:
'utiliser strict'const autocannon = require (' autocannon ') constance const = autocannon ({ URL: 'http: // localhost: 3000'}, console.log) // Ceci est utilisé pour tuer l'instance sur Ctrl-Cprocess.once ('Sigint', () => {{ instance.stop ()}) // Rendez simplement les résultats AutoCannon.track (instance, {renderProgressBar: false})
Consultez cet exemple pour le voir également utilisé.
Renvoie une chaîne de texte contenant les tables de résultat.
resultObject
: l'objet de résultat de l'autocannon. REQUIS .
opts
: Options de configuration pour générer les tables. Ceux-ci peuvent inclure les attributs suivants. FACULTATIF .
outputStream
: le flux auquel la sortie est dirigée. Il est principalement utilisé pour vérifier si le terminal prend en charge la couleur. par défaut: process.stderr
.
renderResultsTable
: une valeur de vérité pour permettre la création du tableau des résultats. par défaut: true
.
renderLatencyTable
: une valeur de vérité pour permettre la création du tableau de latence. par défaut: false
.
Exemple:
"Utiliser strict"; const {stdout} = require ("node: process"); const autocannon = require ("autocannon"); fonction print (result) { stdout.write (autocannon.printResult (résultat));} autocannon ({url: "http: // localhost: 3000"}, (err, result) => print (result));
Aggrégation les résultats d'une ou plusieurs instances AutocanNON s'exécutent, où les instances de automatique ont été exécutées avec l'option skipAggregateResult
.
Il s'agit d'un cas d'utilisation avancé, où vous pourriez exécuter un test de charge à l'aide de automatiquement sur plusieurs machines et vous devez donc différer d'agrégation des résultats à une heure ultérieure.
results
: Un tableau de résultats d'instance AutoCanNON, où les instances ont été exécutées avec l'option skipAggregateResult
définie sur true. REQUIS .
opts
: Il s'agit d'un sous-ensemble des options que vous passeriez à l'API principale AutocanNON, vous pouvez donc utiliser le même objet Options que celui utilisé pour exécuter les instances. Voir automatiquement pour les descriptions complètes des options. REQUIS .
url
: requise
title
: Par défaut facultatif : undefined
socketPath
: facultatif
connections
: par défaut facultatif : 10
.
sampleInt
: par défaut facultatif : 1
pipelining
: par défaut facultatif : 1
workers
: par défaut facultatif : undefined
Étant donné qu'une instance automatique est un EventEmitter
, il émet plusieurs événements. Ce sont ci-dessous:
start
: émis une fois que tout a été configuré dans votre instance automatique et il a commencé. Utile pour exécuter l'instance pour toujours.
tick
: Émis chaque seconde, ce automatiquement exécute une référence. Utile pour afficher des statistiques, etc. utilisées par la fonction track
. L'événement tick
propage un objet contenant les valeurs counter
et bytes
, qui peuvent être utilisées pour des rapports étendus.
done
: Émis lorsque l'autocannon termine une référence. passe les results
comme un argument au rappel.
response
: Émis lorsque les autocannons HTTP-Client obtient une réponse HTTP du serveur. Cela transmet les arguments suivants au rappel:
client
: le http-client
lui-même. Peut être utilisé pour modifier les en-têtes et le corps que le client enverra au serveur. API ci-dessous.
statusCode
: le code d'état HTTP de la réponse.
resBytes
: la longueur de l'octet de réponse.
responseTime
: Le temps pris pour obtenir une réponse après avoir lancé la demande.
reqError
: Émis dans le cas d'une erreur de demande, par exemple un délai d'attente.
error
: émis s'il y a une erreur pendant la phase de configuration de l'autocann.
L'objet de résultats émis par done
et transmis au rappel autocannon()
a ces propriétés:
title
: Valeur de l'option title
transmise à autocannon()
.
url
: L'URL qui a été ciblée.
socketPath
: la prise de domaine ou les fenêtres Unix nommé ciblée ou undefined
.
requests
: un objet histogramme contenant des statistiques sur le nombre de demandes envoyées par seconde.
latency
: un objet histogramme contenant des statistiques sur la latence de réponse.
throughput
: un objet histogramme contenant des statistiques sur le débit de données de réponse par seconde.
duration
: le temps que le test a pris, en quelques secondes .
errors
: le nombre d'erreurs de connexion (y compris les délais d'attente) qui se sont produites.
timeouts
: le nombre de délais de connexion qui se sont produits.
mismatches
: le nombre de demandes avec un corps incompatible.
start
: un objet de date représentant au début du test.
finish
: un objet de date représentant à la fin du test.
connections
: la quantité de connexions utilisées (valeur de opts.connections
).
pipelining
: le nombre de demandes de pipelined utilisées par connexion (valeur d' opts.pipelining
).
non2xx
: Le nombre de codes d'état de réponse non 2xx reçus.
resets
: combien de fois le pipeline de demandes a été réinitialisé en raison de setupRequest
en œuvre de la valeur de falsification.
statusCodeStats
: demande le compteur par code d'état (par exemple { "200": { "count": "500" } }
)
Les objets histogrammes pour requests
, latency
et throughput
sont des objets HDR-Histogrogram -centleles-OBJ et ont cette forme:
min
: La valeur la plus basse pour cette statistique.
max
: la valeur la plus élevée pour cette statistique.
average
: la valeur moyenne (moyenne).
stddev
: l'écart type.
p*
: La valeur xxth centile pour cette statistique. Les propriétés centile sont: p2_5
, p50
, p75
, p90
, p97_5
, p99
, p99_9
, p99_99
, p99_999
.
Client
Cet objet est passé comme le premier paramètre à la fois de la fonction setupClient
et de l'événement response
à partir d'une instance automatique. Vous pouvez l'utiliser pour modifier les demandes que vous envoyez pendant l'analyse comparative. Il s'agit également d'un EventEmitter
, avec les événements et leurs paramètres répertoriés ci-dessous.
client.setHeaders(headers)
: Utilisé pour modifier les en-têtes de la demande de cet itérateur client. headers
doivent être un Object
ou undefined
si vous souhaitez retirer vos en-têtes.
client.setBody(body)
: utilisé pour modifier le corps de la demande de cet itérateur client. body
doit être une String
ou Buffer
, ou undefined
si vous souhaitez retirer le corps.
client.setHeadersAndBody(headers, body)
: utilisé pour modifier à la fois les en-têtes et le corps sur cet itérateur client. headers
et body
doivent prendre la même forme que ci-dessus.
client.setRequest(request)
: utilisé pour modifier l'intégralité de la demande que cet itérateur client est actuellement. Peut avoir headers
, body
, method
ou path
comme des attributs. Par défaut, les valeurs transmises dans l'instance automatique lors de sa création. Note: call this when modifying multiple request values for faster encoding
client.setRequests(newRequests)
: utilisé pour écraser l'intégralité du tableau de demandes qui a été transmis dans l'instance lors de l'initiation. Note: call this when modifying multiple requests for faster encoding
Client
Les événements qu'un Client
peut émettre est répertorié ici:
headers
: Émis lorsqu'une demande envoyée à ce client a reçu les en-têtes de sa réponse. Cela a reçu un Object
comme paramètre.
body
: émis lorsqu'une demande envoyée à ce client a reçu le corps d'une réponse. Cela reçoit un Buffer
comme paramètre.
response
: Émis lorsque le client a reçu une réponse terminée pour une demande qu'elle a faite. Ceci est passé les arguments suivants:
statusCode
: le code d'état HTTP de la réponse.
resBytes
: la longueur de l'octet de réponse.
responseTime
: Le temps pris pour obtenir une réponse après avoir lancé la demande.
reset
: émis lorsque le pipeline de demandes a été réinitialisé en raison de la mise en œuvre setupRequest
d'une valeur de mensonge.
Exemple à l'aide des événements AutoCannon et de l'API et des événements du client:
'utiliser strict'const autocannon = require (' autocannon ') constance const = autocannon ({ URL: «http: // localhost: 3000», setupClient: setupClient}, (err, result) => handlerResults (result)) // Les résultats transmis au rappel sont les mêmes que ceux émis par les événements terminésInstance.on ('fait', gestionnaire de gestionnaire) instance.on ('tick' , () => console.log ('ticking')) instance.on ('réponse', handleResponse) function setupClient (client) { client.on ('body', console.log) // console.log un corps de réponse lorsque c'est reçu} Fonction HandlerResponse (client, statuscode, resbytes, revensEtime) { Console.log (`Got Response avec le code $ {statuscode} dans $ {ResponseTime} millisecondes`) console.log (`Response: $ {resBytes.ToString ()}`) // Mette à jour le corps ou les en-têtes client.setheaders ({new: 'header'}) client.setbody («nouveau corps») client.setheadersandbody ({new: 'header'}, 'new body')} function handlerResults (result) { // ...}
AutoCannon est écrit en JavaScript pour l'exécution Node.js et il est lié au processeur. Nous avons vérifié qu'il donne des résultats comparables avec wrk
lors des applications Node.js d'analyse comparative à l'aide du module http
. Néanmoins, il utilise beaucoup plus de CPU que d'autres outils qui se compilent en binaire comme wrk
. AutocanNnon peut saturer le CPU, par exemple le processus automatique atteint 100%: dans ces cas, nous vous recommandons d'utiliser wrk2
.
Par exemple, considérons une exécution avec 1000 connexions sur un serveur avec 4 cœurs avec hyperthreading:
wrk
utilise 2 threads (par défaut) et un auxiliaire pour collecter les mesures avec une charge totale du CPU de 20% + 20% + 40%.
autocannon
utilise un seul thread à 80% de charge de processeur.
Les deux saturent un processus Node.js à environ 41k REQ / SEC, cependant, autocannon
peut saturer plus tôt car il est unique.
Notez que wrk
ne prend pas en charge le pipeline HTTP / 1.1. En conséquence, autocannon
peut créer plus de chargement sur le serveur que WRK pour chaque connexion ouverte.
Ce projet a été aimablement parrainé par Nearform.
Logo et identité conçus par Cosmic Fox Design: https://www.behance.net/cosmicfox.
WRK et WRK2 ont fourni une grande inspiration.
Si vous utilisez AutocanNnon ou si vous avez des questions, faites-nous savoir: Gitter
Glen Keane | Github
Salman Mitha | Github | NPM
Copyright Matteo Collina et d'autres contributeurs, autorisés en vertu du MIT.