Инструмент для сравнения HTTP/1.1, написанный в узле, который сильно вдохновляется WRK и WRK2, при поддержке конвейера HTTP и HTTPS. На моей коробке AutoCannon может создавать больше нагрузки, чем wrk и wrk2 , см. Ограничения для получения дополнительной информации.
Установка
Использование
API
Благодарности
Лицензия
npm i autocannon -g
или если вы хотите использовать API или в качестве зависимости:
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 выводит данные в таблицах, подобных этим:
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
Есть две таблицы: одна для задержки запроса, а одна для объема запроса.
В таблице задержки перечислены время запроса на 2,5% процентиля, быстрые выбросы; на 50%, медиана; на 97,5%, медленные выбросы; на 99%, самые медленные выбросы. Здесь более низкие означает быстрее.
В таблице томов запроса перечислены количество отправленных запросов и количество загруженных байтов. Эти значения отображаются один раз в секунду. Более высокие значения означают, что было обработано больше запросов. В приведенном выше примере 2,29 МБ было загружено за 1 секунду в худшем случае (самый медленный 1%). Поскольку мы бежали только в течение 10 секунд, есть только 10 образцов, значение MIN и 1% и 2,5% процентилей - это одинаковая выборка. С более длительными продолжительностью эти цифры будут отличаться больше.
При прохождении флага -l в третьей таблице перечислены все процентили задержки, записанные 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 │ └────────────┴──────────────┘
Это может дать еще немного понимания, если было отправлено много (миллионы) запросов.
'Использовать strict'const autocannon = require (' autocannon ') autocannon ({
URL: 'http: // localhost: 3000',
Соединения: 10, // по умолчанию
трубопровод: 1, // по умолчанию
Продолжительность: 10 // по умолчанию}, console.log) // async/awaitasync function foo () {
const result = await autoCannon ({url: 'http: // localhost: 3000', соединения: 10, // defaultpipelining: 1, // defaultduration: 10 // По умолчанию
})
console.log (результат)} В рабочих режиме autocannon использует экземпляры класса работников Node для выполнения нагрузочных тестов в нескольких потоках.
Параметры amount и connections разделены между работниками. Если любой параметр не делится по числу workers , значение для для работника окружена до самого низкого целого числа или устанавливается на 1 , в зависимости от того, что выше. Все остальные параметры применяются для работника, как если бы тест был однопоточным.
Примечание. В отличие от amount и connections , «общие» параметры, maxOverallRequests и overallRate , применяются на работника . Например, если вы устанавливаете connections на 4 , workers 2 и maxOverallRequests до 10 , каждый работник получит 2 соединения и maxOverallRequests из 10 , что приведет к отправке 20 запросов.
'Использовать strict'const autocannon = require (' autocannon ') autocannon ({
URL: 'http: // localhost: 3000',
Соединения: 10, // по умолчанию
трубопровод: 1, // по умолчанию
Продолжительность: 10, // по умолчанию
работники: 4}, консоль.log) ПРИМЕЧАНИЕ. В режиме работников вам необходимо перенести абсолютный путь файла ко всем параметрам, которые принимают function . Это связано с тем, что функция, передаваемая в основной процесс, не может быть клонирована и передана работнику. Таким образом, вместо этого ему нужен файл, который он может require . Параметры с таким поведением показаны в приведенном ниже примере
'Использовать strict'const autocannon = require (' autocannon ') autocannon ({
// ...
Рабочие: 4,
SetupClient: '/full/path/to/setup-client.js',
подтвердить тело: '/full/path/to/verify-body.js'
Запросы: [{// ... onResponse: '/full/path/to/on-response.js'}, {// ... setupRequest: '/full/path/to/setup-request.js'}
]}, console.log)Начните автоконнон против данной цели.
opts : Параметры конфигурации для экземпляра AutoCannon. Это может иметь следующие атрибуты. НЕОБХОДИМЫЙ .
body : когда присутствует, будет переопределить opts.body . НЕОБЯЗАТЕЛЬНЫЙ
headers : когда они присутствуют, переопределят opts.headers . НЕОБЯЗАТЕЛЬНЫЙ
method : когда присутствует, будет переопределять opts.method . НЕОБЯЗАТЕЛЬНЫЙ
path : когда присутствует, переопределяет opts.path . НЕОБЯЗАТЕЛЬНЫЙ
setupRequest : Function вы можете предоставить для мутирования объекта request , например, request.method = 'GET' . Он принимает параметры request (объект) и context (объект) и должен вернуть измененный запрос. Когда он возвращает значение Falsey, AutoCannon перезапустит из первого запроса. При использовании workers вам необходимо поставить путь к файлу, который вместо этого экспортирует функцию (для получения дополнительной информации, обратите внимание на раздел работников) .
onResponse : Function вы можете предоставить для обработки полученного ответа. Он принимает status (номер), context body (строка) (объект) параметры и headers (объект Key-Value). При использовании workers вам необходимо поставить путь к файлу, который вместо этого экспортирует функцию (для получения дополнительной информации, обратите внимание на раздел работников) .
url : данная цель. Может быть HTTP или HTTPS. Разрешено более одного URL -адреса, но рекомендуется, чтобы количество соединений было целым числом URL. НЕОБХОДИМЫЙ .
socketPath : путь к розетку домена Unix или окна с именем труб. url все еще требуется, чтобы отправить правильный заголовок хоста и путь. НЕОБЯЗАТЕЛЬНЫЙ .
workers : количество рабочих потоков для использования для зажигания запросов.
connections : количество одновременных соединений. Необязательно по умолчанию: 10 .
duration : количество секунд для запуска автоколонга. Может быть временем. Необязательно по умолчанию: 10 .
amount : Number указанное количество запросов, которые можно сделать, прежде чем прекратить тест. Это продолжительность переопределения и имеет приоритет, поэтому тест не закончится, пока количество необходимых запросов, необходимых для завершения. НЕОБЯЗАТЕЛЬНЫЙ .
sampleInt : количество миллисекундов, чтобы уйти между взятием образцов. Это контролирует интервал выборки и, следовательно, общее количество образцов, которое влияет на статистический анализ. по умолчанию: 1.
timeout : количество секунд, чтобы ждать ответа раньше. Необязательно по умолчанию: 10 .
pipelining : количество запрашиваемых запросов на каждое соединение. Приведет к тому, что API Client бросает, когда больше 1. Необязательно по умолчанию: 1 .
bailout : порог количества ошибок при выполнении запросов на сервер до этого экземпляра. Этот экземпляр до сих пор получит все существующие результаты и объединит их в результаты. Если никто не пройдет сюда, экземпляр будет игнорировать ошибки и никогда не выручиться. Необязательно по умолчанию : undefined .
method : метод HTTP для использования. Необязательно по default: 'GET' .
title : String , которая должна быть добавлена в результаты для идентификации. Необязательно по умолчанию : undefined .
body : String или Buffer содержащий корпус запроса. Вставьте один или несколько случайно сгенерированных идентификаторов в тело, включив [<id>] , где должен быть вставлен случайно сгенерированный идентификатор (также должен установить идентификационное расстояние в True). Это может быть полезно в замачивании тестирования Оставьте неопределенным для пустого тела. Необязательно по умолчанию : undefined .
form : String или Object , содержащий параметры Multipart/Form Data или путь к файлу JSON, содержащий их
headers : Object , содержащий заголовки запроса. Необязательно по умолчанию: {} .
initialContext : объект, с которым вы хотели бы инициализировать свой контекст. Проверьте пример инициализации контекста. НЕОБЯЗАТЕЛЬНЫЙ
setupClient : Function , которая будет передана Client объекту для каждого подключения. Это может быть использовано для настройки каждого отдельных заголовков и корпуса подключения, используя API, показанный ниже. Изменения, которые вы вносите клиенту в этой функции, будут иметь приоритет над body по умолчанию и headers которые вы проходите здесь. Есть пример этого в папке образцов. Необязательно по умолчанию : function noop () {} . При использовании workers вам необходимо поставить путь к файлу, который вместо этого экспортирует функцию по умолчанию (обратите внимание на раздел работников для получения более подробной информации).
verifyBody : Function , которая будет передана телу ответа для каждого заполненного запроса. Каждый запрос, чья функция verifyBody не возвращает правдивую ценность, учитывается в mismatches . Эта функция будет иметь приоритет над expectBody . Есть пример этого в папке образцов. При использовании workers вам необходимо поставить путь к файлу, который экспортирует функцию по умолчанию (для получения более подробной информации ознакомьтесь с разделом работников).
maxConnectionRequests : Number в котором говорится, что максимальные запросы на подключение. amount имеет приоритет, если оба установлены. НЕОБЯЗАТЕЛЬНЫЙ
maxOverallRequests : Number указавший максимальные запросы, чтобы сделать в целом. Не может быть меньше, чем connections . maxConnectionRequests имеет приоритет, если оба установлены. НЕОБЯЗАТЕЛЬНЫЙ
connectionRate : Number в котором указано скорость запросов, чтобы выполнять в секунду из каждого отдельного соединения. Нет ограничения ставки по умолчанию. НЕОБЯЗАТЕЛЬНЫЙ
overallRate : Number в котором указано скорость запросов, чтобы выполнять в секунду из всех соединений. connectionRate имеет приоритет, если оба установлены. Нет ограничения ставки по умолчанию. НЕОБЯЗАТЕЛЬНЫЙ
ignoreCoordinatedOmission : Boolean , которая отключает коррекцию задержек, чтобы компенсировать скоординированную проблему упущения. Не имеет смысла, когда не было указано никакой скорости запросов ( connectionRate или overallRate ). Необязательно по умолчанию : false .
reconnectRate : Number , которое заставляет отдельные подключения отключаться и восстанавливаться на сервере всякий раз, когда он отправляет такое количество запросов. НЕОБЯЗАТЕЛЬНЫЙ
requests : Array Object S, который представляет последовательность запросов, которые можно сделать во время сравнительного анализа. Может использоваться в сочетании с body , headers и параметрами method выше. Проверьте папку образцов, чтобы получить пример того, как это можно использовать. НЕОБЯЗАТЕЛЬНЫЙ . Содержащие объекты могут иметь эти атрибуты:
har : Object проанализированного содержания HAR. AutoCannon будет дополнительным и использовать entries.request : requests , method , form и варианты body будут игнорироваться. Примечание . Вы должны убедиться, что записи нацелены на тот же домен, что и опция url . НЕОБЯЗАТЕЛЬНЫЙ
idReplacement : Boolean , которая позволяет заменить теги [<id>] в корпусе запроса случайно сгенерированным идентификатором, что позволяет отправлять уникальные поля с запросами. Проверьте пример программного использования, которое можно найти в образцах. Необязательно по умолчанию: false
forever : Boolean , которое позволяет вам настроить экземпляр AutoCannon, которая перезапускается на неопределенный срок после излучения результатов с помощью события done . Полезно для эффективного перезагрузки вашего экземпляра. Чтобы прекратить работать навсегда, вы должны вызвать SIGINT или вызвать функцию .stop() в вашем экземпляре. Необязательно по умолчанию: false
servername : String , идентифицирующая имя сервера для расширения TLS SNI (имени сервера). Необязательно по умолчанию : по умолчанию имени хоста URL, когда он не является IP -адресом.
excludeErrorStats : Boolean , которая позволяет отключить отслеживание ответов не 2xx кода в задержке и байтах в секунду. Необязательно по умолчанию : false .
expectBody : String представляющая ожидаемый корпус ответа. Каждый запрос, чье тело реагирования не равно expectBody считается mismatches . Если включено, несоответствия считаются спасением. НЕОБЯЗАТЕЛЬНЫЙ
tlsOptions : Object , который передается в вызов tls.connect (полный список параметров). Примечание: это применимо только в случае безопасного URL.
skipAggregateResult : Boolean , который позволяет отключить совокупную фазу результата запуска экземпляра. Смотрите AutoCannon.aggregateresult
cb : обратный вызов, который вызывается по завершении эталона. Принимает следующие параметры. НЕОБЯЗАТЕЛЬНЫЙ .
err : Если с пробежкой возникла ошибка.
results : результаты прогона.
Возвращает излучатель экземпляра/события для отслеживания прогресса и т. Д. Если cb опущено, возвращаемое значение также можно использовать в качестве обещания.
При запуске AutoCannon создаст столько Client объектов, сколько требуется. Они будут работать параллельно до тех пор, пока эталон не закончится (продолжительность или общее количество запросов). Каждый клиент будет зацикливаться на массиве requests , будет ли он содержать один или несколько запросов.
При прохождении доступных запросов клиент будет поддерживать context : объект, который вы можете использовать в функциях onResponse и setupRequest , для хранения и чтения некоторых контекстных данных. Пожалуйста, проверьте файл request-context.js в образцах.
Обратите внимание, что context объект будет сброшен на initialContext (или {} он не предоставлен) при перезапуске в первый доступный запрос, обеспечивая аналогичные прогоны.
При объединении фиксированной amount запросов с одновременными connections и overallRate ограничением AutoCannon будет распространять запросы и предполагаемую ставку по всем соединениям. Если overallRate не подлежит целочисленному делителю, AutoCannon настраивает некоторых клиентов подключения к более высоким, а некоторые с более низким количеством запросов/второго показателя. Если сейчас amount является целым числом делится, все клиенты подключения получают одинаковое количество запросов. Это означает, что клиенты с более высокой ставкой запроса закончится раньше, чем другие, что приведет к падению воспринимаемой ставки запроса.
Пример: connections = 10, overallRate = 17, amount = 5000
Отслеживайте прогресс вашей автоколонны, программно.
instance : экземпляр AutoCannon. НЕОБХОДИМЫЙ .
opts : Параметры конфигурации для отслеживания. Это может иметь следующие атрибуты. НЕОБЯЗАТЕЛЬНЫЙ .
outputStream : поток для вывода. По умолчанию: process.stderr .
renderProgressBar : правдивая ценность, чтобы обеспечить рендеринг панели прогресса. по умолчанию: true .
renderResultsTable : правдивая ценность, чтобы обеспечить рендеринг таблицы результатов. по умолчанию: true .
renderLatencyTable : правдивая ценность, чтобы обеспечить рендеринг таблицы расширенной задержки. по умолчанию: false .
progressBarString : string определяющая формат выхода отображения прогресса. Должен быть допустимый вход для модуля панели хода. по умолчанию: 'running [:bar] :percent' .
Пример, который просто печатает таблицу результатов по завершению:
'Использовать strict'const autocannon = require (' autocannon ') const ancess = autocannon ({
URL: 'http: // localhost: 3000'}, console.log) // Это используется для убийства экземпляра на ctrl-cprocess.once ('sigint', () => {
exante.stop ()}) // Просто render rupersautocannon.track (encement, {renderprogressbar: false})Проверьте этот пример, чтобы увидеть его в использовании.
Возвращает текстовую строку, содержащую таблицы результатов.
resultObject : объект результата аутоколона. НЕОБХОДИМЫЙ .
opts : Параметры конфигурации для генерации таблиц. Они могут включать следующие атрибуты. НЕОБЯЗАТЕЛЬНЫЙ .
outputStream : поток, на который направлен выход. Он используется в первую очередь для проверки цвета терминала. По умолчанию: process.stderr .
renderResultsTable : правдивая ценность, чтобы обеспечить создание таблицы результатов. по умолчанию: true .
renderLatencyTable : правдивая ценность, чтобы обеспечить создание таблицы задержки. по умолчанию: false .
Пример:
"Использовать строгое"; const {stdout} = require ("node: process"); const autocannon = require ("autocannon"); function print (result) {
stdout.write (autocannon.printresult (result));} autoCannon ({url: "http: // localhost: 3000"}, (err, result) => print (result)); Совокупные результаты одного или нескольких запуска экземпляра AutoCannon, где экземпляры автоколонга были запущены с опцией skipAggregateResult .
Это вариант расширенного использования, где вы можете провести тест на нагрузку с использованием автоконно -из -за нескольких машин и, следовательно, необходимо отложить агрегацию результатов на более позднее время.
results : массив результатов экземпляра AutoCannon, где экземпляры были запущены с опцией skipAggregateResult , установленной на True. НЕОБХОДИМЫЙ .
opts : Это подмножество параметров, которые вы передали бы в основной API AutoCannon, так что вы можете использовать тот же объект параметров, что и тот, который используется для запуска экземпляров. См. AutoCannon для полного описания вариантов. НЕОБХОДИМЫЙ .
url : требуется
title : Необязательно по умолчанию: undefined
socketPath : необязательно
connections : Необязательно по умолчанию : 10 .
sampleInt : необязательно по умолчанию: 1
pipelining : необязательно по умолчанию: 1
workers : необязательно по умолчанию: undefined
Поскольку экземпляр AutoCannon является EventEmitter , он издает несколько событий. Они ниже:
start : излучается после того, как все было настроено в вашем экземпляре AutoCannon, и это началось. Полезно для запуска экземпляра навсегда.
tick : Элеманду каждую секунду. Эта автоколонга работает за эталоном. Полезно для отображения статистики и т. Д. Используется функцией track . Событие tick распространяет объект, содержащий значения counter и bytes , которые можно использовать для расширенных отчетов.
done : испускается, когда автоколонна заканчивает эталон. передает results в качестве аргумента обратном вызове.
response : испускается, когда AutoCannons HTTP-Client получает HTTP-ответ от сервера. Это передает следующие аргументы к обратному вызову:
client : сам http-client . Может использоваться для изменения заголовков и корпуса, который клиент отправит на сервер. API ниже.
statusCode : код состояния HTTP ответа.
resBytes : длина байта ответа.
responseTime : время, необходимое для получения ответа после начала запроса.
reqError : испускается в случае ошибки запроса, например, тайм -аут.
error : испускается, если есть ошибка во время фазы настройки AutoCannon.
Объект результатов, излучаемый done и переданным в обратный вызов autocannon() обладает этими свойствами:
title : Значение параметра title , передаваемого в autocannon() .
url : URL, который был нацелен.
socketPath : гнездо домена Unix или окна с именем, которая была целенаправленной или undefined .
requests : объект гистограммы, содержащий статистику о количестве запросов, которые были отправлены в секунду.
latency : объект гистограммы, содержащий статистику о задержке ответа.
throughput : объект гистограммы, содержащий статистику о пропускной способности данных отклика в секунду.
duration : количество времени, которое тест прошел, за считанные секунды .
errors : количество ошибок соединения (включая тайм -ауты), которые произошли.
timeouts : количество тайм -аутов подключения, которое произошло.
mismatches : количество запросов с несоответствующим телом.
start : объект даты, представляющий, когда тест начался.
finish : объект даты, представляющий, когда тест закончился.
connections : количество используемых соединений (значение opts.connections ).
pipelining : количество трубопроводных запросов, используемых на соединение (значение opts.pipelining ).
non2xx : количество полученных кодов состояния ответа, не являющихся 2XX.
resets : сколько раз трубопровод запросов был сброшен из -за setupRequest возвращающего ложное значение.
statusCodeStats : запросы счетчика по коду статуса (например { "200": { "count": "500" } } )
Объектами гистограммы для requests , latency и throughput являются объекты HDR-гистограммы-перцацены-obj и имеют эту форму:
min : самое низкое значение для этой статистики.
max : Самое высокое значение для этой статистики.
average : среднее (среднее) значение.
stddev : стандартное отклонение.
p* : xxth процентиль для этой статистики. Свойства процентиля: p2_5 , p50 , p75 , p90 , p97_5 , p99 , p99_9 , p99_99 , p99_999 .
Client API Этот объект передается как первый параметр как функции setupClient , так и события response из экземпляра AutoCannon. Вы можете использовать это для изменения запросов, которые вы отправляете во время сравнительного анализа. Это также EventEmitter , с событиями и их параметрами, перечисленными ниже.
client.setHeaders(headers) : используется для изменения заголовков запроса. headers должны быть Object или undefined , если вы хотите удалить свои заголовки.
client.setBody(body) : используется для изменения корпуса запроса. body должно быть String или Buffer или undefined , если вы хотите удалить тело.
client.setHeadersAndBody(headers, body) : используется для изменения как заголовков, так и корпуса. Этот итератор клиента в настоящее время находится. headers и body должны принимать ту же форму, что и выше.
client.setRequest(request) : используется для изменения всего запроса, чтобы в настоящее время был включен этот клиент -итератор. Могут иметь headers , body , method или path в качестве атрибутов. По умолчанию значения, передаваемые в экземпляр AutoCannon, когда он был создан. Note: call this when modifying multiple request values for faster encoding
client.setRequests(newRequests) : используется для перезаписи всего массива запросов, который был передан в экземпляр при инициации. Note: call this when modifying multiple requests for faster encoding
Client события События, которые может излучить Client , перечислены здесь:
headers : излучается, когда запрос, отправленный от этого клиента, получил заголовки своего ответа. Это получило Object в качестве параметра.
body : излучается, когда запрос, отправленный от этого клиента, получил тело ответа. Это получает Buffer в качестве параметра.
response : излучается, когда клиент получил завершенный ответ на запрос. Это передается следующие аргументы:
statusCode : код состояния HTTP ответа.
resBytes : длина байта ответа.
responseTime : время, необходимое для получения ответа после начала запроса.
reset : испускается, когда конвейер запросов был сброшен из -за setupRequest возвращающего ложное значение.
Пример с использованием событий AutoCannon и API клиента и событий:
'Использовать strict'const autocannon = require (' autocannon ') const ancess = autocannon ({
URL: 'http: // localhost: 3000',
SetupClient: setupClient}, (err, result) => handleresults (result)) // Результаты, передаваемые обратном вызове, такие же, как и те, которые испускаются из event eventsInstance.on ('ed', handleresult , () => console.log ('ticking')) exaction.on ('response', handleresponse) setupclient (client) {
client.on ('body', console.log) // console.log тело ответа при его получении} handleresponse (клиент, StatusCode, Resbytes, RecscousTime) {
console.log (`got out with code $ {statuscode} в $ {responsetime} milliseconds`)
console.log (`response: $ {resbytes.tostring ()}`)
// Обновление корпуса или заголовков
client.setheaders ({new: 'header'})
client.setbody ('новый тело')
client.setheadersandbody ({new: 'header'}, 'new Body')} handleresults (result) {
// ...} AutoCannon записана в JavaScript для выполнения Node.js, и она связана с процессором. Мы подтвердили, что он дает сопоставимые результаты с wrk при приложениях Bender Knode.js с использованием модуля http . Тем не менее, он использует значительно больше процессора, чем другие инструменты, которые компилируются для бинарника, таких как wrk . AutoCannon может насыщать процессор, например, процесс автоколонга достигает 100%: в этих случаях мы рекомендуем использовать wrk2 .
В качестве примера, давайте рассмотрим запуск с 1000 подключений на сервере с 4 ядрами с гиперподботом:
wrk использует 2 потока (по умолчанию) и вспомогательный, чтобы собрать метрики с общей нагрузкой процессора 20% + 20% + 40%.
autocannon использует один поток при 80% нагрузке процессора.
Однако оба насыщают процесс autocannon примерно в 41 тыс. Ст.
Обратите внимание, что wrk не поддерживает трубопровод HTTP/1.1. В результате autocannon может создавать больше нагрузки на сервер, чем WRK для каждого открытого соединения.
Этот проект был любезно спонсирован ближайшим.
Логотип и идентификация, разработанные Cosmic Fox Design: https://www.behance.net/cosmicfox.
WRK и WRK2 дали большое вдохновение.
Если вы используете AutoCannon или у вас есть какие -либо вопросы, сообщите нам: Gitter
Глен Кин | GitHub
Салман Мита | GitHub | Npm
Авторские права Matteo Collina и другие участники, лицензированные под MIT.