Nodeで記述された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つのテーブルがあります。1つはリクエストレイテンシ用、もう1つはリクエストボリューム用です。
Latencyテーブルには、2.5%パーセンタイルのリクエスト時間を迅速にリストします。 50%で、中央値。 97.5%で、遅い外れ値。 99%で、最も遅い外れ値。ここでは、より低いことはより速いことを意味します。
リクエストボリュームテーブルには、送信されたリクエストの数とダウンロードされたバイト数がリストされています。これらの値は1秒あたり1回サンプリングされます。値が高いということは、より多くの要求が処理されたことを意味します。上記の例では、最悪の場合は2.29 MBが1秒でダウンロードされました(最も遅い1%)。私たちは10秒しか走っていないので、サンプルは10個しかありません。最小値と1%と2.5%のパーセンタイルはすべて同じサンプルです。より長い期間では、これらの数値はより多く異なります。
-lフラグを渡すと、3番目のテーブルには、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 = autocannon({url: 'http:// localhost:3000'、connections:10、// defaultpipelining:1、// defaultduration:10 // default
})
console.log(result)}ワーカーモードでは、 autocannon Nodeのワーカークラスのインスタンスを使用して、複数のスレッドでロードテストを実行します。
amountとconnectionsパラメーターは、労働者の間で分割されます。いずれかのパラメーターがworkersの数によって整数分裂できない場合、労働者ごとの値は最低整数に丸められているか、 1に設定されます。他のすべてのパラメーターは、テストが単一スレッドされているかのように労働者ごとに適用されます。
注: amountとconnectionsとは異なり、「全体的な」パラメーター、 maxOverallRequests 、およびoverallRateが労働者ごとに適用されます。たとえば、 4にconnections設定すると、 workers 2に、 maxOverallRequests 10に設定すると、各ワーカーは2接続と10のmaxOverallRequestsを受け取り、 20のリクエストが送信されます。
'Strict'Const Autocannon = require(' autocannon ')autocannon({
url: 'http:// localhost:3000'、
接続:10、//デフォルト
パイプライン:1、//デフォルト
期間:10、//デフォルト
労働者:4}、console.log)注:ワーカーモードの場合、 functionを受け入れるすべてのオプションに絶対ファイルパスを渡す必要があります。これは、メインプロセスに渡された関数をクローン化して労働者に渡すことができないためです。代わりに、 requireできるファイルが必要です。この動作のオプションは、以下の例に示されています
'Strict'Const Autocannon = require(' autocannon ')autocannon({
// ...
労働者:4、
setUpClient: '/full/path/to/setup-client.js'、
VerifyBody: '/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 :Raw requestオブジェクトを変異させるために提供できるFunction 、例: request.method = 'GET' 。 request (オブジェクト)とcontext (オブジェクト)パラメーターが必要であり、変更されたリクエストを返す必要があります。 Falsey Valueを返すと、AutoCannonは最初のリクエストから再起動します。 workersを使用する場合、代わりに機能をデフォルトでエクスポートするファイルパスを提供する必要があります(詳細についてはワーカーセクションをチェックしてください)オプション
onResponse :受信した応答を処理するために提供できるFunction 。 status (number)、 body (string) context (オブジェクト)パラメーターとheaders (キー値オブジェクト)が必要です。 workersを使用する場合、代わりに機能をデフォルトでエクスポートするファイルパスを提供する必要があります(詳細についてはワーカーセクションをチェックしてください)オプション
url :指定されたターゲット。 HTTPまたはHTTPSにすることができます。複数のURLが許可されていますが、接続の数はURLの整数倍であることをお勧めします。必須。
socketPath :UNIXドメインソケットまたはパイプという名前のWindowsへのパス。正しいホストヘッダーとパスを送信するには、まだurl必要です。オプション。
workers :リクエストを発射するために使用するワーカースレッドの数。
connections :同時接続の数。オプションのデフォルト: 10 。
duration :オートキャノンを実行するための秒数。タイムストリングになることができます。オプションのデフォルト: 10 。
amount :テストを終了する前に行うリクエストの数を記載するNumber 。これは期間をオーバーライドし、優先されるため、完了する必要があるリクエストの数が完了するまでテストは終了しません。オプション。
sampleInt :サンプルを採取する間に経過するミリ秒数。これにより、サンプル間隔が制御されるため、統計分析に影響するサンプルの総数が制御されます。デフォルト:1。
timeout :以前に応答を待つ秒数。オプションのデフォルト: 10 。
pipelining :各接続のパイプライン済み要求の数。 Client APIが1を超えるとスローします。オプションのデフォルト: 1 。
bailout :このインスタンスが解決する前にサーバーにリクエストを行うときのエラー数のしきい値。このインスタンスは、これまでに既存のすべての結果を取り、それらを結果に集約します。ここに渡されなかった場合、インスタンスはエラーを無視し、救済することはありません。オプションのデフォルト: undefined 。
method :使用するHTTPメソッド。オプションのdefault: 'GET' 。
title :識別のために結果に追加されるString 。オプションのデフォルト: undefined 。
body :リクエストの本文を含むStringまたはBuffer 。ランダムに生成されたIDを挿入する必要がある場所を含めることにより、 [<id>]含めることにより、1つ以上のランダムに生成されたIDをボディに挿入します(idReplacementもtrueに設定する必要があります)。これは、1つ以上のフィールドが一意でなければならないポストエンドポイントを浸すのに役立ちます。空の体のために未定義のままにしておきます。オプションのデフォルト: undefined 。
form :MultiPart/Form-Dataオプションを含むStringまたはObject 、またはそれらを含むJSONファイルへのパス
headers :リクエストのヘッダーを含むObject 。オプションのデフォルト: {} 。
initialContext :コンテキストを初期化したいオブジェクト。コンテキストの初期化の例をご覧ください。オプション
setupClient :各接続のClientオブジェクトに渡されるFunctionが作成されます。これを使用して、以下に示すAPIを使用して、個々の接続ヘッダーとボディをカスタマイズできます。この関数でクライアントに行った変更は、ここに渡すデフォルトのbodyとheadersよりも優先されます。サンプルフォルダーにはこの例があります。オプションのデフォルト: function noop () {} 。 workersを使用する場合、代わりに機能をデフォルトでエクスポートするファイルパスを提供する必要があります(詳細については、ワーカーセクションをご覧ください)。
verifyBody :完了する各要求に対して応答本体に渡されるFunction 。 verifyBody関数が真実の値を返さない各要求は、 mismatchesでカウントされます。この関数は、 expectBodyよりも優先されます。サンプルフォルダーにはこの例があります。 workersを使用する場合、デフォルトのファイルパスを機能させる必要があります(詳細については、ワーカーセクションをチェックしてください)。
maxConnectionRequests :MAXが接続ごとに作成することを要求するNumber 。両方が設定されている場合、 amountが優先されます。オプション
maxOverallRequests :Maxが全体的に作成することを要求するNumber 。 connections以下にすることはできません。両方が設定されている場合、 maxConnectionRequests優先されます。オプション
connectionRate :個々の接続から1秒あたりの要求率を記載するNumber 。デフォルトではレート制限なし。オプション
overallRate :すべての接続から1秒あたりの要求率を記載するNumber 。両方が設定されている場合、 connectionRate優先されます。デフォルトではレート制限なし。オプション
ignoreCoordinatedOmission :レイテンシーの修正を無効にして、調整された省略問題を補うBoolean 。リクエストのレートが指定されていない場合は意味がありません( connectionRateまたはoverallRate )。オプションのデフォルト: false 。
reconnectRate :個々の接続を切断して、その数のリクエストを送信するたびにサーバーに再接続するNumber 。オプション
requests :ベンチマーク中に行うリクエストのシーケンスを表すObject SのArray 。上記のbody 、 headers 、 methodパラメーションと組み合わせて使用できます。これがどのように使用されるかの例については、サンプルフォルダーを確認してください。オプション。含まれるオブジェクトには、これらの属性を持つことができます。
har :解析されたHARコンテンツのObject 。 AutoCannonは追加でentries.requestを使用します。Request: requests 、 method 、 form 、およびbodyオプションは無視されます。注:エントリがurlオプションと同じドメインをターゲットにしていることを確認する必要があります。オプション
idReplacement :リクエスト本体内の[<id>]タグをランダムに生成したIDで置き換えることができるBooleanで、リクエストで一意のフィールドを送信できます。サンプルに記載されているプログラマティック使用の例をご覧ください。オプションのデフォルト: false
forever : doneイベントで結果を発した後に無期限に再起動するオートキャノンのインスタンスをセットアップできるBoolean 。インスタンスを効率的に再起動するのに役立ちます。永久に実行を停止するには、 SIGINT引き起こすか、インスタンスで.stop()関数を呼び出す必要があります。オプションのデフォルト: false
servername :SNI(サーバー名表示)TLS拡張機能のサーバー名を識別するString 。オプションのデフォルト:IPアドレスではない場合、URLのホスト名がデフォルトです。
excludeErrorStats :1秒あたりのレイテンシおよびバイトでの非2XXコード応答の追跡を無効にすることができるBoolean 。オプションのデフォルト: false 。
expectBody :期待される応答本体を表すString 。応答本体が等しくないリクエストは、 expectBodyと等しくないものがmismatchesでカウントされます。有効にすると、不一致は救済にカウントされます。オプション
tlsOptions : tls.connect呼び出し(オプションの完全なリスト)に渡されるObject 。注:これは、URLが安全な場合にのみ適用されます。
skipAggregateResult :インスタンス実行の集約結果フェーズを無効にできるBoolean 。 autocannon.aggregateresultを参照してください
cb :ベンチマークの完了時に呼び出されるコールバック。次のパラメーションを取ります。オプション。
err :実行時にエラーが発生した場合。
results :実行の結果。
進捗状況を追跡するためにインスタンス/イベントエミッターを返します。CB cb省略されている場合、返品値も約束として使用できます。
実行するとき、AutoCannonは、必要な接続と同じくらい多くのClientオブジェクトを作成します。ベンチマークが終了するまで並行して実行されます(リクエストの期間または総数)。各クライアントはrequests配列をループします。1つまたは複数のリクエストが含まれます。
利用可能なリクエストを実行している間、クライアントはcontextを維持します: onResponseおよびsetupRequest関数で使用できるオブジェクトは、コンテキストデータを保存および読み取ります。サンプルのrequest-context.jsファイルを確認してください。
コンテキストオブジェクトは、最初の利用可能なリクエストに再起動するときに、 context ObjectがinitialContext (または{}が提供されていない)にリセットされ、同様の実行を確保することに注意してください。
一定amountのリクエストを同時connectionsとoverallRate制限と組み合わせると、AutoCannonはすべての接続にわたってリクエストと意図されたレートを配布します。 overallRateが整数分裂できない場合、AutoCannonは、より高いリクエスト/2番目のリクエストの数が少なく、一部の接続クライアントを構成します。現在、 amountが整数分裂可能である場合、すべての接続クライアントは同じ数のリクエストを取得します。これは、リクエスト率が高いクライアントが他のクライアントよりも早く終了し、認識された要求率が低下することを意味します。
例: connections = 10, overallRate = 17, amount = 5000
プログラムでオートキャノンの進行を追跡します。
instance :オートキャノンのインスタンス。必須。
opts :追跡用の構成オプション。これには、次の属性があります。オプション。
outputStream :ストリームから出力へ。デフォルト: process.stderr 。
renderProgressBar :進行状況バーのレンダリングを有効にするための真実の価値。デフォルト: true 。
renderResultsTable :結果テーブルのレンダリングを有効にするための真実の価値。デフォルト: true 。
renderLatencyTable :高度なレイテンシテーブルのレンダリングを有効にするための真実の値。デフォルト: false 。
progressBarString :進行状況の形式を定義するstring出力を表示します。 Progress Barモジュールの有効な入力である必要があります。デフォルト: 'running [:bar] :percent' 。
完了時に結果の表を印刷する例:
'Strict'Const Autocannon = require(' autocannon ')const instance = autocannon({{
url: 'http:// localhost:3000'}、console.log)//これは、ctrl-cprocess.once( 'sigint'、()=> {のインスタンスを殺すために使用されます。
instance.stop()})// render ressonsautocannon.track(instance、{renderprogressbar:false})この例をご覧ください。
結果テーブルを含むテキスト文字列を返します。
resultObject :autocannonの結果オブジェクト。必須。
opts :テーブルを生成するための構成オプション。これらには、次の属性が含まれる場合があります。オプション。
outputStream :出力が向けられるストリーム。主に端子が色をサポートするかどうかを確認するために使用されます。デフォルト: process.stderr 。
renderResultsTable :結果テーブルの作成を有効にするための真実の価値。デフォルト: true 。
renderLatencyTable :潜伏性テーブルの作成を有効にするための真実の値。デフォルト: false 。
例:
"strict"; 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)); 1つ以上のAutoCannonインスタンスの結果を集計します。ここでは、 skipAggregateResultオプションでオートキャノンのインスタンスが実行されています。
これは高度なユースケースであり、複数のマシンでAutoCannonを使用してロードテストを実行する可能性があるため、結果を後で集約する必要があります。
results :Autocannonインスタンスのアレイ結果。インスタンスがskipAggregateResultオプションをtrueに設定して実行されました。必須。
opts :これは、メインのAutoCannon APIに渡すオプションのサブセットであるため、インスタンスの実行に使用したオブジェクトと同じオプションオブジェクトを使用できます。オプションの完全な説明については、AutoCannonを参照してください。必須。
url :必須
title :オプションのデフォルト: undefined
socketPath :オプション
connections :オプションのデフォルト: 10 。
sampleInt :オプションのデフォルト: 1
pipelining :オプションのデフォルト: 1
workers :オプションのデフォルト: undefined
AutoCannonインスタンスはEventEmitterであるため、いくつかのイベントを放出します。これらは次のとおりです。
start :Autocannonインスタンスですべてがセットアップされ、開始されたら、放出されました。インスタンスを永久に実行する場合に役立ちます。
tick :このオートキャノンがベンチマークを実行している1秒ごとに放出されました。 track機能で使用される統計などを表示するのに役立ちます。 tickイベントは、 counterとbytes値を含むオブジェクトを伝播します。これは、拡張レポートに使用できます。
done :AutoCannonがベンチマークを終了したときに放出されます。 resultsコールバックの引数として渡します。
response :AutoCannons HTTP-ClientがサーバーからHTTP応答を取得したときに放出されます。これは、次の引数をコールバックに渡します。
client : http-client自体。クライアントがサーバーに送信するヘッダーとボディを変更するために使用できます。以下のAPI。
statusCode :応答のHTTPステータスコード。
resBytes :応答バイトの長さ。
responseTime :リクエストを開始した後に応答を取得するのにかかった時間。
reqError :リクエストエラーの場合、例えばタイムアウトの場合に放出されます。
error :AutoCannonのセットアップフェーズ中にエラーが発生した場合。
doneによって放出され、 autocannon()コールバックに渡された結果オブジェクトには、これらのプロパティがあります。
title : autocannon()に渡されたtitleオプションの値。
url :ターゲットにされたURL。
socketPath :UNIXドメインソケットまたはターゲットを絞った、またはundefinedパイプという名前のWindows。
requests :1秒あたりの送信された要求の数に関する統計を含むヒストグラムオブジェクト。
latency :応答レイテンシに関する統計を含むヒストグラムオブジェクト。
throughput :応答データスループットに関する統計を含むヒストグラムオブジェクト。
duration :テストがかかった時間、数秒で。
errors :発生した接続エラー(タイムアウトを含む)の数。
timeouts :発生した接続タイムアウトの数。
mismatches :不一致のボディを持つリクエストの数。
start :テストが開始されたときに表す日付オブジェクト。
finish :テストが終了したときに表す日付オブジェクト。
connections :使用される接続の量( opts.connectionsの値)。
pipelining :接続ごとに使用されるパイプライン済み要求の数( opts.pipeliningの値)。
non2xx :受信した非2xx応答ステータスコードの数。
resets : setupRequestがFalsely Valueを返すため、パイプラインがリセットされたリクエストの回数。
statusCodeStats :ステータスごとのカウンター(例{ "200": { "count": "500" } } )
requests 、 latency 、 throughputのヒストグラムオブジェクトは、HDRヒストグラム-Percentiles-OBJオブジェクトであり、この形状を持っています。
min :この統計の最低値。
max :この統計の最高値。
average :平均(平均)値。
stddev :標準偏差。
p* :この統計のxxthパーセンタイル値。パーセンタイル特性は、 p2_5 、 p50 、 p75 、 p90 、 p97_5 、 p99 、 p99_9 、 p99_99 、 p99_999です。
Client APIこのオブジェクトは、AutoCannonインスタンスからのsetupClient関数とresponseイベントの両方の最初のパラメーターとして渡されます。これを使用して、ベンチマーク中に送信するリクエストを変更できます。これは、イベントとそのパラマが以下にリストされている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がFalsely Valueを返すためにリクエストパイプラインがリセットされたときに放出されます。
AutoCannonイベントとクライアントAPIおよびイベントを使用した例:
'Strict'Const Autocannon = require(' autocannon ')const instance = autocannon({{
url: 'http:// localhost:3000'、
setUpClient:setUpClient}、(err、result)=> handleresults(result))//コールバックに渡された結果は、行われたeventsInstance.on( 'done'、handleresults)instance.on( 'tick'から排出された結果と同じです。 、()=> console.log( 'ticking'))instance.on( 'response'、handleresponse)function setupclient(client){
client.on( 'body'、console.log)// console.log受信時の応答本体} function handleresponse(client、statuscode、resbytes、responsetime){
console.log( `$ {responsetime} milliseconds`)in code $ {statusCode}を使用して応答を取得します)
console.log( `response:$ {resbytes.tostring()}`)
//ボディまたはヘッダーを更新します
client.setheaders({new: 'header'})
client.setbody( 'new body')
client.setheadersandbody({new: 'header'}、 'new body')} function handleresults(result){
// ...}AutoCannonは、node.jsランタイムのJavaScriptで書かれており、CPUバウンドです。 httpモジュールを使用してnode.jsアプリケーションをベンチマークするときにwrkと同等の結果が得られることを確認しました。それにもかかわらず、 wrkなどのバイナリにコンパイルする他のツールよりもはるかに多くのCPUを使用します。 AutocannonはCPUを飽和させる可能性があります。たとえば、Autocannonプロセスは100%に達します。そのような場合、 wrk2使用することをお勧めします。
例として、ハイパースレッドを備えた4つのコアを備えたサーバー上の1000接続を備えた実行を考えてみましょう。
wrk 2つのスレッド(デフォルト)と補助用スレッドを使用して、20% + 20% + 40%のCPUの合計負荷でメトリックを収集します。
autocannon 80%CPU負荷で単一のスレッドを使用します。
どちらも約41K REQ/SECでnode.jsプロセスを飽和させますが、 autocannonシングルスレッドであるため、より早く飽和する可能性があります。
wrk HTTP/1.1パイプライニングをサポートしていないことに注意してください。その結果、 autocannon開いた接続ごとにWRKよりもサーバー上に多くの負荷を作成できます。
このプロジェクトは、近親者が親切に後援しました。
コスミックフォックスデザインによって設計されたロゴとアイデンティティ:https://www.behance.net/cosmicfox。
WRKとWRK2は大きなインスピレーションをもたらしました。
AutoCannonを使用している場合、またはご質問がある場合は、お知らせください:Gitter
グレン・キーン| github
サルマン・ミサ| github | npm
MITの下でライセンスされた著作権マットコリーナおよびその他の貢献者。