Una herramienta de evaluación comparativa HTTP/1.1 escrita en el nodo, muy inspirada en WRK y WRK2, con soporte para tuberías HTTP y HTTPS. En mi caja, Autocannon puede producir más carga que wrk
y wrk2
, vea las limitaciones para obtener más detalles.
Instalación
Uso
API
Expresiones de gratitud
Licencia
npm i autocannon -g
o si desea usar la API o como dependencia:
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 emite datos en tablas como esta:
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
Hay dos tablas: una para la latencia de solicitud y otra para el volumen de solicitud.
La tabla de latencia enumera los tiempos de solicitud en el percentil del 2.5%, los valores atípicos rápidos; al 50%, la mediana; con el 97.5%, los valores atípicos lentos; Con un 99%, los valores atípicos más lentos. Aquí, más bajo significa más rápido.
La tabla de volumen de solicitud enumera el número de solicitudes enviadas y el número de bytes descargados. Estos valores se muestrean una vez por segundo. Los valores más altos significan que se procesaron más solicitudes. En el ejemplo anterior, 2.29 MB se descargó en 1 segundo en el peor de los casos (más lento 1%). Dado que solo corrimos durante 10 segundos, solo hay 10 muestras, el valor MIN y los percentiles del 1% y 2.5% son todos la misma muestra. Con duraciones más largas, estos números diferirán más.
Al pasar la bandera -l
, una tercera tabla enumera todos los percentiles de latencia registrados por Autocannon:
┌────────────┬──────────────┐ │ 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 │ └────────────┴──────────────┘
Esto puede dar más información si se envían mucho (millones) de solicitudes.
'Usar Strict'Const Autocannon = require (' Autocannon ') AutoCannon ({ URL: 'http: // localhost: 3000', Conexiones: 10, // predeterminado tuberías: 1, // predeterminado Duración: 10 // default}, console.log) // function async/awaTasync foo () { const dente = ALOCAn Autocannon ({url: 'http: // localhost: 3000', conexiones: 10, // defaultpipelining: 1, // Defaultduration: 10 // predeterminado }) console.log (resultado)}
En el modo de trabajadores, autocannon
utiliza instancias de la clase de trabajadores de Node para ejecutar las pruebas de carga en múltiples subprocesos.
La amount
y los parámetros connections
se dividen entre los trabajadores. Si el número de workers
no es divisible por el parámetro, el valor por trabajador se redondea al número entero más bajo, o se establece en 1
, lo que sea el más alto. Todos los demás parámetros se aplican por trabajador como si la prueba fuera de un solo hilo.
Nota: A diferencia de amount
y connections
, se aplican los parámetros "generales", maxOverallRequests
y overallRate
por trabajador . Por ejemplo, si establece connections
a 4
, workers
a 2
y maxOverallRequests
a 10
, cada trabajador recibirá 2
conexiones y un maxOverallRequests
de 10
, lo que resulta en que se envíen 20
solicitudes.
'Usar Strict'Const Autocannon = require (' Autocannon ') AutoCannon ({ URL: 'http: // localhost: 3000', Conexiones: 10, // predeterminado tuberías: 1, // predeterminado Duración: 10, // predeterminado Trabajadores: 4}, console.log)
Nota: Cuando en modo trabajadores, debe pasar una ruta de archivo absoluta a todas las opciones que aceptan una function
. Esto se debe a que una función pasada al proceso principal no puede clonarse y pasar al trabajador. Entonces, en cambio, necesita un archivo que pueda require
. Las opciones con este comportamiento se muestran en el siguiente ejemplo
'Usar Strict'Const Autocannon = require (' Autocannon ') AutoCannon ({ // ... Trabajadores: 4, setupClient: '/full/path/to/setup-client.js', Verifybody: '/full/path/to/verify-body.js' Solicitudes: [{// ... onResponse: '/full/path/to/on-response.js'}, {// ... setupRequest: '/full/path/to/setup-request.js'} ]}, console.log)
Comience Autocannon contra el objetivo dado.
opts
: Opciones de configuración para la instancia de Autocannon. Esto puede tener los siguientes atributos. REQUERIDO .
body
: cuando esté presente, anulará opts.body
. OPCIONAL
headers
: cuando esté presente, anulará opts.headers
. OPCIONAL
method
: cuando esté presente, anulará opts.method
. OPCIONAL
path
: cuando esté presente, anulará opts.path
. OPCIONAL
setupRequest
: una Function
que puede proporcionar para mutar el objeto request
sin procesar, por ejemplo, request.method = 'GET'
. Toma parámetros request
(objeto) y context
(objeto) y debe devolver la solicitud modificada. Cuando devuelve un valor de falsificación, Autocannon se reiniciará desde la primera solicitud. Al usar workers
, debe proporcionar una ruta de archivo que exporta una función predeterminada (verifique la sección de trabajadores para obtener más detalles) opcional
onResponse
: una Function
que puede proporcionar para procesar la respuesta recibida. Se requiere parámetros y headers
status
(número), body
(string) context
(objeto) (objeto de valor clave). Al usar workers
, debe proporcionar una ruta de archivo que exporta una función predeterminada (verifique la sección de trabajadores para obtener más detalles) opcional
url
: El objetivo dado. Puede ser http o https. Se permite más de una URL, pero se recomienda que el número de conexiones sea un múltiplo entero de la URL. REQUERIDO .
socketPath
: una ruta a un enchufe de dominio UNIX o una tubería llamada Windows. Todavía se requiere una url
para enviar el encabezado y la ruta del host correctos. OPCIONAL .
workers
: Número de hilos de trabajadores para usar para disparar solicitudes.
connections
: el número de conexiones concurrentes. Valor predeterminado opcional : 10
.
duration
: el número de segundos para ejecutar el Autocannon. Puede ser un tiempo de tiempo. Valor predeterminado opcional : 10
.
amount
: un Number
que indica el número de solicitudes a realizar antes de finalizar la prueba. Esto anula la duración y tiene prioridad, por lo que la prueba no finaliza hasta que se complete el número de solicitudes que se deben completar. OPCIONAL .
sampleInt
: el número de milisegundos para transcurrir entre tomar muestras. Esto controla el intervalo de muestra y, por lo tanto, el número total de muestras, lo que afecta los análisis estadísticos. Valor predeterminado: 1.
timeout
: el número de segundos para esperar una respuesta antes. Valor predeterminado opcional : 10
.
pipelining
: el número de solicitudes canalizadas para cada conexión. Hará que la API Client
se lance cuando sea mayor que 1. Valor predeterminado opcional : 1
.
bailout
: el umbral del número de errores al hacer las solicitudes al servidor antes de que salga la fianza de esta instancia. Esta instancia tomará todos los resultados existentes hasta ahora y los agregará a los resultados. Si ninguno pasó aquí, la instancia ignorará los errores y nunca rescatará. Valor predeterminado opcional : undefined
.
method
: el método HTTP para usar. Valor predeterminado opcional default: 'GET'
.
title
: Se agregará una String
a los resultados para la identificación. Valor predeterminado opcional : undefined
.
body
: una String
o un Buffer
que contiene el cuerpo de la solicitud. Inserte una o más ID generadas aleatoriamente en el cuerpo incluyendo [<id>]
donde se debe insertar la ID generada aleatoriamente (también debe establecer Idreplacation en True). Esto puede ser útil en los puntos finales posteriores a la prueba de remojo donde uno o más campos deben ser únicos. Deja indefinido para un cuerpo vacío. Valor predeterminado opcional : undefined
.
form
: una String
o un Object
que contiene las opciones de datos multipart/formulario o una ruta al archivo json que las contiene
headers
: un Object
que contiene los encabezados de la solicitud. Valor predeterminado opcional : {}
.
initialContext
: un objeto con el que le gustaría inicializar su contexto. Echa un vistazo a un ejemplo de contexto de inicialización. OPCIONAL
setupClient
: una Function
que se pasará por el objeto Client
para cada conexión. Esto se puede usar para personalizar cada encabezado de conexión individual y cuerpo utilizando la API que se muestra a continuación. Los cambios que realice al cliente en esta función tendrán prioridad sobre el body
predeterminado y headers
que transmite aquí. Hay un ejemplo de esto en la carpeta de muestras. Valor predeterminado opcional : function noop () {}
. Al usar workers
, debe proporcionar una ruta de archivo que exporta una función predeterminada (consulte la sección de trabajadores para obtener más detalles).
verifyBody
: una Function
que se pasará por el cuerpo de respuesta para cada solicitud completa. Cada solicitud, cuya función verifyBody
no devuelve un valor de verdad, se cuenta en mismatches
. Esta función tendrá prioridad sobre el expectBody
. Hay un ejemplo de esto en la carpeta de muestras. Al usar workers
, debe proporcionar una ruta de archivo que exporta una función predeterminada (consulte la sección de trabajadores para obtener más detalles).
maxConnectionRequests
: un Number
que indica las solicitudes máximas para hacer por conexión. amount
tiene prioridad si ambos están establecidos. OPCIONAL
maxOverallRequests
: un Number
que indica las solicitudes máximas para hacer en general. No puede ser menos que connections
. maxConnectionRequests
tiene prioridad si ambos están establecidos. OPCIONAL
connectionRate
: un Number
que indica la tasa de solicitudes para realizar por segundo desde cada conexión individual. No hay una limitación de tasas por defecto. OPCIONAL
overallRate
: un Number
que indica la tasa de solicitudes a realizar por segundo desde todas las conexiones. connectionRate
tiene prioridad si ambos están establecidos. No hay una limitación de tasas por defecto. OPCIONAL
ignoreCoordinatedOmission
: un Boolean
que deshabilita la corrección de latencias para compensar el problema de omisión coordinada. No tiene sentido cuando no se ha especificado una tasa de solicitudes ( connectionRate
o overallRate
). Valor predeterminado opcional : false
.
reconnectRate
: un Number
que hace que las conexiones individuales se desconecten y vuelva a conectarse al servidor cada vez que haya enviado ese número de solicitudes. OPCIONAL
requests
: una Array
de Object
que representa la secuencia de solicitudes para realizar mientras está en comparación con la evaluación comparativa. Se puede usar junto con el body
, headers
y los parámetros method
arriba. Verifique la carpeta de muestras para ver un ejemplo de cómo se podría usar esto. OPCIONAL . Los objetos contenidos pueden tener estos atributos:
har
: Un Object
de contenido HAR analizado. Autocannon extra y usará entries.request
Requests: requests
, method
, form
y las opciones body
se ignorarán. Nota : debe asegurarse de que las entradas sean apuntando al mismo dominio que la opción url
. OPCIONAL
idReplacement
: un Boolean
que permite el reemplazo de las etiquetas [<id>]
dentro del cuerpo de solicitud con una ID generada aleatoriamente, lo que permite enviar campos únicos con solicitudes. Consulte un ejemplo de uso programático que se puede encontrar en las muestras. Valor predeterminado opcional : false
forever
: un Boolean
que le permite configurar una instancia de Autocannon que se reinicia indefinidamente después de emitir resultados con el evento done
. Útil para reiniciar eficientemente su instancia. Para dejar de funcionar para siempre, debe causar un SIGINT
o llamar a la función .stop()
en su instancia. Valor predeterminado opcional : false
servername
: una String
que identifica el nombre del servidor para la extensión TLS SNI (Nombre del servidor). Valor predeterminado opcional : el valor predeterminado al nombre de host de la URL cuando no es una dirección IP.
excludeErrorStats
: un Boolean
que le permite deshabilitar el seguimiento de las respuestas de código no 2XX en latencia y bytes por segundo cálculos. Valor predeterminado opcional : false
.
expectBody
: una String
que representa el cuerpo de respuesta esperado. Cada solicitud cuyo cuerpo de respuesta no es igual al expectBody
se cuenta en mismatches
. Si está habilitado, los desajustes cuentan para el rescate. OPCIONAL
tlsOptions
: un Object
que se pasa a tls.connect
Call (lista completa de opciones). Nota: Esto solo se aplica si su URL es segura.
skipAggregateResult
: un Boolean
que le permite deshabilitar la fase de resultado agregado de una ejecución de instancias. Ver Autocannon.Agregateresult
cb
: La devolución de llamada que se llama al finalizar un punto de referencia. Toma los siguientes parámetros. OPCIONAL .
err
: Si hubo un error encontrado con la ejecución.
results
: los resultados de la ejecución.
Devuelve un emisor de instancia/evento para el seguimiento del progreso, etc. Si se omite cb
, el valor de retorno también se puede usar como promesa.
Cuando se ejecuta, Autocannon creará tantos objetos Client
como las conexiones deseadas. Se ejecutarán en paralelo hasta que el punto de referencia haya terminado (duración o número total de solicitudes). Cada cliente recaerá en la matriz requests
, ¿contenería una o varias solicitudes?
Mientras realiza las solicitudes disponibles, el cliente mantendrá un context
: un objeto que puede usar en las funciones onResponse
y setupRequest
, para almacenar y leer algunos datos contextuales. Verifique el archivo request-context.js
en muestras.
Tenga en cuenta que el objeto context
se restablecerá a initialContext
(o {}
no se proporciona) al reiniciar a la primera solicitud disponible, asegurando ejecuciones similares.
Al combinar una amount
fija de solicitudes con connections
concurrentes y un límite overallRate
, Autocannon distribuirá las solicitudes y la tasa prevista en todas las conexiones. Si la overallRate
no es divisible, Autocannon configurará algunos clientes de conexión con un número mayor y más bajo de solicitudes/segunda tasa. Si ahora la amount
es entera divisible, todos los clientes de conexión obtienen la misma cantidad de solicitudes. Esto significa que los clientes con una tasa de solicitud más alta terminarán antes, que los demás, lo que llevará a una caída en la tasa de solicitud percibida.
Ejemplo: connections = 10, overallRate = 17, amount = 5000
Rastree el progreso de su autocannon, programáticamente.
instance
: La instancia de Autocannon. REQUERIDO .
opts
: opciones de configuración para el seguimiento. Esto puede tener los siguientes atributos. OPCIONAL .
outputStream
: la secuencia para salir. Valor predeterminado: process.stderr
.
renderProgressBar
: un valor verdadero para permitir la representación de la barra de progreso. Valor predeterminado: true
.
renderResultsTable
: un valor verdadero para habilitar la representación de la tabla de resultados. Valor predeterminado: true
.
renderLatencyTable
: un valor de verdad para permitir la representación de la tabla de latencia avanzada. predeterminado: false
.
progressBarString
: una string
que define el formato de la salida de visualización de progreso. Debe ser una entrada válida para el módulo de barra de progreso. predeterminado: 'running [:bar] :percent'
.
Ejemplo que solo imprima la tabla de resultados al finalizar:
'Usar Strict'Const Autocannon = require (' Autocannon ') const instancia = Autocannon ({ URL: 'http: // localhost: 3000'}, console.log) // Esto se usa para matar la instancia en ctrl-cprocess.once ('sigint', () => { instance.stop ()}) // simplemente renderiza ResultAutocannon.track (instancia, {renderProgressBar: falso})
Mira este ejemplo para verlo en uso también.
Devuelve una cadena de texto que contiene las tablas de resultados.
resultObject
: el objeto de resultado de Autocannon. REQUERIDO .
opts
: opciones de configuración para generar las tablas. Estos pueden incluir los siguientes atributos. OPCIONAL .
outputStream
: la secuencia a la que se dirige la salida. Se usa principalmente para verificar si el terminal admite el color. Valor predeterminado: process.stderr
.
renderResultsTable
: un valor verdadero para habilitar la creación de la tabla de resultados. Valor predeterminado: true
.
renderLatencyTable
: un valor verdadero para permitir la creación de la tabla de latencia. predeterminado: false
.
Ejemplo:
"Use Strict"; const {stDout} = require ("nodo: process"); const autocannon = require ("autocannon"); function print (resultado) { stdout.write (autocannon.printresult (resultado));} Autocannon ({url: "http: // localhost: 3000"}, (err, resultado) => print (resultado));
Agregue los resultados de una o más ejecuciones de instancia de autocannon, donde se han ejecutado las instancias de Autocannon con la opción skipAggregateResult
.
Este es un caso de uso avanzado, donde puede ejecutar una prueba de carga utilizando Autocannon en múltiples máquinas y, por lo tanto, debe diferir la agregación de los resultados a un momento posterior.
results
: una matriz de resultados de instancia de autocannon, donde las instancias se han ejecutado con la opción skipAggregateResult
establecida en True. REQUERIDO .
opts
: este es un subconjunto de las opciones que pasaría a la API de Autocannon principal, por lo que podría usar el mismo objeto de opciones que la que se usó para ejecutar las instancias. Consulte Autocannon para obtener descripciones completas de las opciones. REQUERIDO .
url
: requerido
title
: Opcional predeterminado: undefined
socketPath
: opcional
connections
: Opcional predeterminado: 10
.
sampleInt
: predeterminado opcional : 1
pipelining
: predeterminado opcional : 1
workers
: predeterminado opcional : undefined
Debido a que una instancia de Autocannon es un EventEmitter
, emite varios eventos. Estos están debajo:
start
: emitido una vez que todo se ha configurado en su instancia de Autocannon y ha comenzado. Útil para si ejecuta la instancia para siempre.
tick
: emitido cada segundo Este Autocannon está ejecutando un punto de referencia. Útil para mostrar estadísticas, etc. utilizadas por la función track
. El evento tick
propaga un objeto que contiene los valores counter
y bytes
, que se pueden usar para informes extendidos.
done
: emitido cuando el Autocannon termina un punto de referencia. pasa los results
como un argumento a la devolución de llamada.
response
: emitido cuando el Autocannons HTTP-Client obtiene una respuesta HTTP del servidor. Esto pasa los siguientes argumentos a la devolución de llamada:
client
: el http-client
en sí. Se puede usar para modificar los encabezados y el cuerpo que el cliente enviará al servidor. API a continuación.
statusCode
: el código de estado HTTP de la respuesta.
resBytes
: la longitud de byte de respuesta.
responseTime
: el tiempo necesario para obtener una respuesta después de iniciar la solicitud.
reqError
: emitido en el caso de un error de solicitud, por ejemplo, un tiempo de espera.
error
: emitido si hay un error durante la fase de configuración de Autocannon.
El objeto de resultados emitido por done
y pasado a la devolución de llamada autocannon()
tiene estas propiedades:
title
: Valor de la opción title
pasada a autocannon()
.
url
: La URL que fue atacada.
socketPath
: el zócalo de dominio UNIX o las ventanas con nombre de tubería que fue dirigida o undefined
.
requests
: un objeto de histograma que contiene estadísticas sobre el número de solicitudes que se enviaron por segundo.
latency
: un objeto de histograma que contiene estadísticas sobre la latencia de respuesta.
throughput
: un objeto de histograma que contiene estadísticas sobre el rendimiento de los datos de respuesta por segundo.
duration
: la cantidad de tiempo que tomó la prueba, en segundos .
errors
: el número de errores de conexión (incluidos los tiempos de espera) que ocurrieron.
timeouts
: el número de tiempos de espera de conexión que ocurrieron.
mismatches
: el número de solicitudes con un cuerpo no coincidente.
start
: un objeto de fecha que representa cuando se inició la prueba.
finish
: un objeto de fecha que representa cuando terminó la prueba.
connections
: La cantidad de conexiones utilizadas (valor de opts.connections
).
pipelining
: el número de solicitudes canalizadas utilizadas por conexión (valor de opts.pipelining
).
non2xx
: el número de códigos de estado de respuesta no 2XX recibidos.
resets
: cuántas veces se restableció la tubería de solicitudes debido a que setupRequest
devuelve un valor de falsificación.
statusCodeStats
: Solicitud de contador por código de estado (por ejemplo { "200": { "count": "500" } }
)
Los objetos de histograma para requests
, latency
y throughput
son objetos HDR-Histogram-porcentiles-Obj y tienen esta forma:
min
: El valor más bajo para esta estadística.
max
: El valor más alto para esta estadística.
average
: el valor promedio (media).
stddev
: la desviación estándar.
p*
: El valor del percentil XXTH para esta estadística. Las propiedades del percentil son: p2_5
, p50
, p75
, p90
, p97_5
, p99
, p99_9
, p99_99
, p99_999
.
Client
Este objeto se pasa como el primer parámetro de la función setupClient
y el evento response
desde una instancia de Autocannon. Puede usar esto para modificar las solicitudes que está enviando mientras está en comparación con la evaluación comparativa. Este es también un EventEmitter
, con los eventos y sus parámetros enumerados a continuación.
client.setHeaders(headers)
: se usa para modificar los encabezados de la solicitud en este iterador del cliente. headers
deben ser un Object
o undefined
si desea quitar los encabezados.
client.setBody(body)
: se usa para modificar el cuerpo de la solicitud en la que se encuentra actualmente este iterador del cliente. body
debe ser una String
o Buffer
, o undefined
si desea eliminar el cuerpo.
client.setHeadersAndBody(headers, body)
: se usa para modificar los encabezados y el cuerpo en este iterador del cliente se encuentra actualmente. headers
y body
deben tomar la misma forma que arriba.
client.setRequest(request)
: se usa para modificar la solicitud completa en que este iterador del cliente esté actualmente. Puede tener headers
, body
, method
o path
como atributos. El valor predeterminado a los valores pasados a la instancia de Autocannon cuando se creó. Note: call this when modifying multiple request values for faster encoding
client.setRequests(newRequests)
: se usa para sobrescribir la matriz de solicitudes completa que se pasó a la instancia de inicio. Note: call this when modifying multiple requests for faster encoding
Client
Los eventos que puede emitir un Client
se enumeran aquí:
headers
: emitido cuando una solicitud enviada de este cliente recibió los encabezados de su respuesta. Esto recibió un Object
como parámetro.
body
: emitido cuando una solicitud enviada de este cliente recibió el cuerpo de una respuesta. Esto recibe un Buffer
como parámetro.
response
: emitido cuando el cliente recibió una respuesta completa para una solicitud que realizó. Esto se pasa los siguientes argumentos:
statusCode
: el código de estado HTTP de la respuesta.
resBytes
: la longitud de byte de respuesta.
responseTime
: el tiempo necesario para obtener una respuesta después de iniciar la solicitud.
reset
: emitido cuando se restableció la tubería de solicitudes debido a que setupRequest
devuelve un valor de falsificación.
Ejemplo utilizando los eventos de autocannon y la API y los eventos del cliente:
'Usar Strict'Const Autocannon = require (' Autocannon ') const instancia = Autocannon ({ URL: 'http: // localhost: 3000', setupClient: setupClient}, (err, resultado) => handleReSults (resultado)) // Los resultados pasados a la devolución de llamada son los mismos que los emitidos de la eventsinstance. , () => console.log ('ticking')) instance.on ('respuesta', handlerEponse) función setupClient (cliente) { Client.on ('Body', console.log) // console.log un cuerpo de respuesta cuando se recibe} function handlerAponse (cliente, statuscode, resbytes, Responsetime) { console.log (`obtuve respuesta con código $ {statuscode} en $ {ResponseTime} MilliseConds`) console.log (`Respuesta: $ {resbytes.toString ()}`) // actualizar el cuerpo o los encabezados Client.setheaders ({nuevo: 'Header'}) Client.setbody ('nuevo cuerpo') Client.SetheadersAndBody ({nuevo: 'Header'}, 'New Body')} function HandLerEsults (resultado) { // ...}
Autocannon está escrito en JavaScript para el tiempo de ejecución Node.js y está unido a CPU. Hemos verificado que produce resultados comparables con wrk
cuando las aplicaciones Benchmarking Node.js utilizan el módulo http
. Sin embargo, utiliza significativamente más CPU que otras herramientas que se compila en un binario como wrk
. Autocannon puede saturar la CPU, por ejemplo, el proceso de autocannon alcanza el 100%: en esos casos, recomendamos usar wrk2
.
Como ejemplo, consideremos una ejecución con 1000 conexiones en un servidor con 4 núcleos con HyperThreading:
wrk
usa 2 hilos (por defecto) y uno auxiliar para recolectar las métricas con una carga total de la CPU de 20% + 20% + 40%.
autocannon
usa un solo hilo con una carga de CPU al 80%.
Ambos saturan un proceso de nodo.js a alrededor de 41k REQ/seg, sin embargo, autocannon
puede saturarse antes porque es de un solo hilo.
Tenga en cuenta que wrk
no admite la tubería HTTP/1.1. Como resultado, autocannon
puede crear más carga en el servidor que WRK para cada conexión abierta.
Este proyecto fue amablemente patrocinado por NearForm.
Logotipo e identidad diseñado por Cosmic Fox Design: https://www.behance.net/cosmicfox.
WRK y WRK2 proporcionaron una gran inspiración.
Si está utilizando Autocannon o tiene alguna pregunta, háganoslo saber: Gitter
Glen Keane | Github
Salman mitha | GitHub | Npm
Copyright Matteo Collina y otros contribuyentes, con licencia bajo el MIT.