Alat pembandingan HTTP/1.1 yang ditulis dalam simpul, sangat terinspirasi oleh WRK dan WRK2, dengan dukungan untuk Pipelining dan HTTPS HTTP. Di kotak saya , Autocannon dapat menghasilkan lebih banyak beban daripada wrk dan wrk2 , lihat batasan untuk detail lebih lanjut.
Instalasi
Penggunaan
API
Ucapan Terima Kasih
Lisensi
npm i autocannon -g
atau jika Anda ingin menggunakan API atau sebagai ketergantungan:
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 mengeluarkan data dalam tabel seperti ini:
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
Ada dua tabel: satu untuk latensi permintaan, dan satu untuk volume permintaan.
Tabel latensi mencantumkan waktu permintaan pada persentil 2,5%, outlier cepat; pada 50%, median; pada 97,5%, outlier lambat; Pada 99%, outlier paling lambat. Di sini, lebih rendah berarti lebih cepat.
Tabel volume permintaan mencantumkan jumlah permintaan yang dikirim dan jumlah byte yang diunduh. Nilai -nilai ini disampel sekali per detik. Nilai yang lebih tinggi berarti lebih banyak permintaan yang diproses. Dalam contoh di atas, 2,29 MB diunduh dalam 1 detik dalam kasus terburuk (1%paling lambat). Karena kami hanya berlari selama 10 detik, hanya ada 10 sampel, nilai min dan 1% dan 2,5% persentil semuanya adalah sampel yang sama. Dengan durasi yang lebih lama, angka -angka ini akan lebih berbeda.
Saat melewati bendera -l , tabel ketiga mencantumkan semua persentil latensi yang dicatat oleh 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 │ └────────────┴──────────────┘
Ini dapat memberikan lebih banyak wawasan jika banyak (jutaan) permintaan dikirim.
'Gunakan strict'const autocannon = membutuhkan (' autocannon ') autocannon ({
URL: 'http: // localhost: 3000',
Koneksi: 10, // default
Pipelining: 1, // default
Durasi: 10 // Default}, Console.log) // Async/AwaitAsync Function foo () {
const result = menunggu autocannon ({url: 'http: // localhost: 3000', koneksi: 10, // defaultpipelining: 1, // defaultduration: 10 // default
})
console.log (hasil)} Dalam mode pekerja, autocannon menggunakan contoh kelas pekerja Node untuk menjalankan tes beban di beberapa utas.
Parameter amount dan connections dibagi di antara para pekerja. Jika salah satu parameter tidak dapat dibagi dengan jumlah workers , nilai per-pekerja dibulatkan ke bilangan bulat terendah, atau diatur ke 1 , mana yang lebih tinggi. Semua parameter lain diterapkan per-pekerja seolah-olah tes itu berhadapan tunggal.
Catatan: Tidak seperti amount dan connections , parameter "keseluruhan", maxOverallRequests dan overallRate , diterapkan per pekerja . Misalnya, jika Anda menetapkan connections ke 4 , workers ke 2 dan maxOverallRequests ke 10 , setiap pekerja akan menerima 2 koneksi dan maxOverallRequests dari 10 , menghasilkan 20 permintaan yang dikirim.
'Gunakan strict'const autocannon = membutuhkan (' autocannon ') autocannon ({
URL: 'http: // localhost: 3000',
Koneksi: 10, // default
Pipelining: 1, // default
Durasi: 10, // default
Pekerja: 4}, Console.log) Catatan: Saat dalam mode pekerja, Anda harus lulus dalam jalur file absolut ke semua opsi yang menerima function . Ini karena suatu fungsi yang masuk ke dalam proses utama tidak dapat dikloning dan diteruskan ke pekerja. Jadi sebagai gantinya, perlu file yang dapat require . Opsi dengan perilaku ini ditampilkan dalam contoh di bawah ini
'Gunakan strict'const autocannon = membutuhkan (' autocannon ') autocannon ({
// ...
Pekerja: 4,
setupclient: '/full/path/to/setup-client.js',
Verifikasibody: '/full/path/to/verify-body.js'
Permintaan: [{// ... OnResponse: '/full/path/to/on-response.js'}, {// ... setuprquest: '/full/path/to/setup-request.js'}
]}, console.log)Mulai Autocannon terhadap target yang diberikan.
opts : Opsi konfigurasi untuk instance Autocannon. Ini dapat memiliki atribut berikut. DIPERLUKAN .
body : Saat ada, akan mengganti opts.body . OPSIONAL
headers : Saat ada, akan menimpa opts.headers . OPSIONAL
method : Saat ada, akan mengganti opts.method . OPSIONAL
path : Saat ada, akan mengganti opts.path . OPSIONAL
setupRequest : Function yang dapat Anda berikan untuk bermutasi objek request mentah, misalnya request.method = 'GET' . Dibutuhkan parameter request (objek) dan context (objek), dan harus mengembalikan permintaan yang dimodifikasi. Ketika mengembalikan nilai palsu, Autocannon akan memulai kembali dari permintaan pertama. Saat menggunakan workers , Anda perlu menyediakan jalur file yang default mengekspor fungsi sebagai gantinya (periksa bagian pekerja untuk detail lebih lanjut) opsional
onResponse : Function yang dapat Anda berikan untuk memproses respons yang diterima. Dibutuhkan parameter dan headers context ( status ), body ) (objek objek) (objek nilai kunci). Saat menggunakan workers , Anda perlu menyediakan jalur file yang default mengekspor fungsi sebagai gantinya (periksa bagian pekerja untuk detail lebih lanjut) opsional
url : Target yang diberikan. Bisa http atau https. Lebih dari satu URL diperbolehkan, tetapi disarankan bahwa jumlah koneksi adalah kelipatan integer dari URL. DIPERLUKAN .
socketPath : Jalur ke soket domain UNIX atau jendela bernama. url masih diminta untuk mengirim header dan jalur host yang benar. OPSIONAL .
workers : Jumlah utas pekerja yang akan digunakan untuk menembakkan permintaan.
connections : Jumlah koneksi bersamaan. Default Opsional : 10 .
duration : Jumlah detik untuk menjalankan Autocannon. Bisa menjadi penghitung waktu. Default Opsional : 10 .
amount : Number yang menyatakan jumlah permintaan yang akan dilakukan sebelum mengakhiri tes. Ini mengesampingkan durasi dan diutamakan, sehingga tes tidak akan berakhir sampai jumlah permintaan yang harus diselesaikan selesai. OPSIONAL .
sampleInt : Jumlah milidetik untuk berlalu antara mengambil sampel. Ini mengontrol interval sampel, & oleh karena itu jumlah total sampel, yang mempengaruhi analisis statistik. Default: 1.
timeout : Jumlah detik untuk menunggu tanggapan sebelumnya. Default Opsional : 10 .
pipelining : Jumlah permintaan pipa untuk setiap koneksi. Akan menyebabkan API Client melempar ketika lebih dari 1. Default opsional : 1 .
bailout : Ambang batas jumlah kesalahan saat membuat permintaan ke server sebelum contoh ini BAIL keluar. Contoh ini akan mengambil semua hasil yang ada sejauh ini dan menggabungkannya ke dalam hasil. Jika tidak ada yang lewat di sini, contoh akan mengabaikan kesalahan dan tidak pernah menyelamatkan. Default Opsional : undefined .
method : Metode HTTP untuk digunakan. Default Opsional default: 'GET' .
title : String yang akan ditambahkan ke hasil untuk identifikasi. Default Opsional : undefined .
body : String atau Buffer yang berisi tubuh permintaan. Masukkan satu atau lebih ID yang dihasilkan secara acak ke dalam tubuh dengan memasukkan [<id>] di mana ID yang dihasilkan secara acak harus dimasukkan (juga harus mengatur idreplacement ke true). Ini dapat bermanfaat dalam merendam pengujian pasca titik akhir di mana satu atau lebih bidang harus unik. Biarkan tidak terdefinisi untuk tubuh kosong. Default Opsional : undefined .
form : String atau Object yang berisi opsi multipart/form-data atau jalur ke file JSON yang berisi mereka
headers : Object yang berisi header permintaan. Default Opsional : {} .
initialContext : Objek yang ingin Anda inisialisasi konteks Anda. Lihat contoh inisialisasi konteks. OPSIONAL
setupClient : Function yang akan dilewatkan objek Client untuk setiap koneksi untuk dibuat. Ini dapat digunakan untuk menyesuaikan setiap header koneksi individu dan tubuh menggunakan API yang ditunjukkan di bawah ini. Perubahan yang Anda lakukan pada klien dalam fungsi ini akan diutamakan daripada body default dan headers yang Anda lewati di sini. Ada contoh ini di folder sampel. Opsional Default: function noop () {} . Saat menggunakan workers , Anda perlu menyediakan jalur file yang default mengekspor fungsi sebagai gantinya (lihat bagian pekerja untuk lebih jelasnya).
verifyBody : Function yang akan dilewatkan badan respons untuk setiap permintaan yang telah diselesaikan. Setiap permintaan, yang fungsi verifyBody tidak mengembalikan nilai kebenaran, dihitung dalam mismatches . Fungsi ini akan lebih diutamakan daripada expectBody . Ada contoh ini di folder sampel. Saat menggunakan workers , Anda perlu menyediakan jalur file yang default mengekspor fungsi (lihat bagian pekerja untuk lebih jelasnya).
maxConnectionRequests : Suatu Number yang menyatakan permintaan MAX untuk membuat per koneksi. amount lebih diutamakan jika keduanya ditetapkan. OPSIONAL
maxOverallRequests : Suatu Number yang menyatakan permintaan maksimal untuk membuat secara keseluruhan. Tidak bisa kurang dari connections . maxConnectionRequests lebih diutamakan jika keduanya ditetapkan. OPSIONAL
connectionRate : Number yang menyatakan tingkat permintaan untuk membuat per detik dari setiap koneksi individu. Tidak ada tingkat yang membatasi secara default. OPSIONAL
overallRate : Number yang menyatakan tingkat permintaan untuk membuat per detik dari semua koneksi. connectionRate diutamakan jika keduanya diatur. Tidak ada tingkat yang membatasi secara default. OPSIONAL
ignoreCoordinatedOmission : Boolean yang menonaktifkan koreksi latensi untuk mengimbangi masalah kelalaian terkoordinasi. Tidak masuk akal ketika tidak ada laju permintaan yang ditentukan ( connectionRate atau overallRate ). Default Opsional : false .
reconnectRate : Suatu Number yang membuat koneksi individual terputus dan terhubung kembali ke server setiap kali mengirim jumlah permintaan itu. OPSIONAL
requests : Array Object S yang mewakili urutan permintaan yang akan dibuat saat membandingkan. Dapat digunakan bersama dengan body , headers dan method params di atas. Periksa folder sampel untuk contoh bagaimana ini dapat digunakan. OPSIONAL . Objek yang terkandung dapat memiliki atribut ini:
har : Object konten Har yang diuraikan. Autocannon requests ekstra form body entries.request method Catatan : Anda harus memastikan bahwa entri menargetkan domain yang sama dengan opsi url . OPSIONAL
idReplacement : Boolean yang memungkinkan penggantian tag [<id>] dalam badan permintaan dengan ID yang dihasilkan secara acak, memungkinkan bidang unik untuk dikirim dengan permintaan. Lihatlah contoh penggunaan terprogram yang dapat ditemukan dalam sampel. Default Opsional : false
forever : Boolean yang memungkinkan Anda untuk mengatur instance Autocannon yang memulai kembali tanpa batas waktu setelah memancarkan hasil dengan acara done . Berguna untuk memulai kembali instance Anda secara efisien. Untuk berhenti berjalan selamanya, Anda harus menyebabkan SIGINT atau memanggil fungsi .stop() pada instance Anda. Default Opsional : false
servername : Sebuah String yang mengidentifikasi nama server untuk SNI (indikasi nama server) ekstensi TLS. Default Opsional : Default ke nama host URL ketika itu bukan alamat IP.
excludeErrorStats : Boolean yang memungkinkan Anda untuk menonaktifkan pelacakan respons kode non-2xx dalam latensi dan byte per detik perhitungan. Default Opsional : false .
expectBody : String yang mewakili badan respons yang diharapkan. Setiap permintaan yang badan responsnya tidak sama dengan expectBody yang dihitung dalam mismatches . Jika diaktifkan, ketidakcocokan dihitung terhadap bailout. OPSIONAL
tlsOptions : Object yang diteruskan ke tls.connect Call (daftar lengkap opsi). Catatan: Ini hanya berlaku jika URL Anda aman.
skipAggregateResult : Boolean yang memungkinkan Anda untuk menonaktifkan fase hasil agregat dari menjalankan instance. Lihat Autocannon.aggregateresult
cb : Panggilan balik yang dipanggil pada penyelesaian tolok ukur. Mengambil param berikut. OPSIONAL .
err : Jika ada kesalahan yang dihadapi dengan menjalankan.
results : Hasil menjalankan.
Mengembalikan emitor instance/event untuk melacak kemajuan, dll. Jika cb dihilangkan, nilai pengembalian juga dapat digunakan sebagai janji.
Saat berjalan, Autocannon akan membuat objek Client sebanyak koneksi yang diinginkan. Mereka akan berjalan secara paralel sampai tolok ukur berakhir (durasi atau jumlah total permintaan). Setiap klien akan mengulangi array requests , apakah itu berisi satu atau beberapa permintaan.
Saat melalui permintaan yang tersedia, klien akan mempertahankan context : objek yang dapat Anda gunakan dalam fungsi onResponse dan setupRequest , untuk menyimpan dan membaca beberapa data kontekstual. Silakan periksa file request-context.js dalam sampel.
Perhatikan bahwa objek context akan diatur ulang ke initialContext (atau {} tidak disediakan) saat memulai kembali ke permintaan pertama yang tersedia, memastikan berjalan serupa.
Saat menggabungkan amount permintaan yang tetap dengan connections bersamaan dan batas overallRate , Autocannon akan mendistribusikan permintaan dan tingkat yang dimaksudkan atas semua koneksi. Jika overallRate tidak dibagi integer, Autocannon akan mengkonfigurasi beberapa klien koneksi dengan yang lebih tinggi dan beberapa dengan jumlah permintaan/tingkat kedua yang lebih rendah. Jika sekarang amount dibagi integer, semua klien koneksi mendapatkan jumlah permintaan yang sama. Ini berarti bahwa klien dengan tingkat permintaan yang lebih tinggi akan selesai lebih awal, daripada yang lain, yang mengarah pada penurunan tingkat permintaan yang dirasakan.
Contoh: connections = 10, overallRate = 17, amount = 5000
Lacak kemajuan autocannon Anda, secara terprogram.
instance : Instance Autocannon. DIPERLUKAN .
opts : Opsi konfigurasi untuk pelacakan. Ini dapat memiliki atribut berikut. OPSIONAL .
outputStream : Streaming to output ke. Default: process.stderr .
renderProgressBar : Nilai kebenaran untuk memungkinkan rendering bilah kemajuan. Default: true .
renderResultsTable : Nilai kebenaran untuk memungkinkan rendering tabel hasil. Default: true .
renderLatencyTable : nilai kebenaran untuk memungkinkan rendering tabel latensi lanjutan. Default: false .
progressBarString : Sebuah string yang mendefinisikan format output tampilan progress. Harus input yang valid untuk modul batang kemajuan. Default: 'running [:bar] :percent' .
Contoh yang hanya mencetak tabel hasil pada penyelesaian:
'Gunakan strict'const autocannon = membutuhkan (' autocannon ') const instance = autocannon ({
URL: 'http: // localhost: 3000'}, console.log) // Ini digunakan untuk membunuh contoh pada ctrl-cprocess.once ('sigint', () => {
instance.stop ()}) // Just Render RendersAutocannon.track (instance, {renderProgressBar: false})Lihat contoh ini untuk melihatnya digunakan, juga.
Mengembalikan string teks yang berisi tabel hasil.
resultObject : Objek Hasil Autocannon. DIPERLUKAN .
opts : Opsi konfigurasi untuk menghasilkan tabel. Ini mungkin termasuk atribut berikut. OPSIONAL .
outputStream : Aliran yang diarahkan output. Ini terutama digunakan untuk memeriksa apakah terminal mendukung warna. Default: process.stderr .
renderResultsTable : Nilai kebenaran untuk memungkinkan penciptaan tabel hasil. Default: true .
renderLatencyTable : nilai kebenaran untuk memungkinkan penciptaan tabel latensi. Default: false .
Contoh:
"Gunakan ketat"; const {stdout} = membutuhkan ("node: proses"); const autocannon = membutuhkan ("autocannon"); cetak fungsi (hasil) {
stdout.write (autocannon.printresult (hasil));} autocannon ({url: "http: // localhost: 3000"}, (err, hasil) => cetak (hasil)); Agregat hasil satu atau lebih autocannon berjalan, di mana instance Autocannon telah dijalankan dengan opsi skipAggregateResult .
Ini adalah kasus penggunaan lanjutan, di mana Anda mungkin menjalankan uji beban menggunakan Autocannon di beberapa mesin dan karenanya perlu menunda menggabungkan hasilnya ke waktu yang lain.
results : Sejumlah hasil instance Autocannon, di mana instance telah dijalankan dengan opsi skipAggregateResult yang diatur ke True. DIPERLUKAN .
opts : Ini adalah subset dari opsi yang akan Anda lewati ke API Autocannon utama, sehingga Anda dapat menggunakan objek opsi yang sama seperti yang digunakan untuk menjalankan instance. Lihat Autocannon untuk deskripsi lengkap opsi. DIPERLUKAN .
url : Diperlukan
title : Default Opsional : undefined
socketPath : Opsional
connections : Default Opsional : 10 .
sampleInt : Default Opsional : 1
pipelining : Default Opsional : 1
workers : Default Opsional : undefined
Karena instance Autocannon adalah EventEmitter , ia memancarkan beberapa acara. Ini di bawah ini:
start : dipancarkan setelah semuanya telah diatur dalam instance Autocannon Anda dan telah dimulai. Berguna untuk jika menjalankan instance selamanya.
tick : dipancarkan setiap detik Autocannon ini menjalankan tolok ukur. Berguna untuk menampilkan statistik, dll. Digunakan oleh fungsi track . Acara tick menyebarkan objek yang berisi nilai counter dan bytes , yang dapat digunakan untuk laporan yang diperluas.
done : dipancarkan saat autocannon menyelesaikan tolok ukur. melewati results sebagai argumen untuk panggilan balik.
response : Dipancarkan ketika Autocannons HTTP-Client mendapat respons HTTP dari server. Ini memberikan argumen berikut ke panggilan balik:
client : http-client itu sendiri. Dapat digunakan untuk memodifikasi header dan badan yang akan dikirim klien ke server. API di bawah ini.
statusCode : Kode Status HTTP dari respons.
resBytes : Panjang byte respons.
responseTime : Waktu yang dibutuhkan untuk mendapatkan respons setelah memulai permintaan.
reqError : dipancarkan dalam kasus kesalahan permintaan misalnya batas waktu.
error : dipancarkan jika ada kesalahan selama fase pengaturan Autocannon.
Objek hasil yang dipancarkan oleh done dan diteruskan ke callback autocannon() memiliki properti ini:
title : Nilai opsi title yang diteruskan ke autocannon() .
url : URL yang ditargetkan.
socketPath : Soket domain UNIX atau jendela bernama pipa yang ditargetkan, atau undefined .
requests : Objek histogram yang berisi statistik tentang jumlah permintaan yang dikirim per detik.
latency : Objek histogram yang mengandung statistik tentang latensi respons.
throughput : Objek histogram yang berisi statistik tentang throughput data respons per detik.
duration : Jumlah waktu tes yang berlangsung, dalam hitungan detik .
errors : Jumlah kesalahan koneksi (termasuk batas waktu) yang terjadi.
timeouts : Jumlah batas waktu koneksi yang terjadi.
mismatches : Jumlah permintaan dengan tubuh yang tidak cocok.
start : Objek tanggal yang mewakili saat tes dimulai.
finish : Objek tanggal yang mewakili saat tes berakhir.
connections : Jumlah koneksi yang digunakan (nilai opts.connections ).
pipelining : Jumlah permintaan pipa yang digunakan per koneksi (nilai opts.pipelining ).
non2xx : Jumlah kode status respons non-2xx yang diterima.
resets : Berapa kali pipa permintaan diatur ulang karena setupRequest mengembalikan nilai palsu.
statusCodeStats : Meminta penghitung per kode status (misalnya { "200": { "count": "500" } } )
Objek histogram untuk requests , latency dan throughput adalah objek HDR-histogram-persentil-OBJ dan memiliki bentuk ini:
min : Nilai terendah untuk statistik ini.
max : Nilai tertinggi untuk statistik ini.
average : nilai rata -rata (rata -rata).
stddev : Deviasi standar.
p* : Nilai persentil xxth untuk statistik ini. Properti persentil adalah: p2_5 , p50 , p75 , p90 , p97_5 , p99 , p99_9 , p99_99 , p99_999 .
Client Objek ini dilewatkan sebagai parameter pertama dari kedua fungsi setupClient dan peristiwa response dari instance Autocannon. Anda dapat menggunakan ini untuk memodifikasi permintaan yang Anda kirim saat membandingkan. Ini juga merupakan EventEmitter , dengan acara dan params mereka yang tercantum di bawah ini.
client.setHeaders(headers) : Digunakan untuk memodifikasi header dari permintaan iterator klien ini saat ini. headers harus menjadi Object , atau undefined jika Anda ingin menghapus header Anda.
client.setBody(body) : Digunakan untuk memodifikasi badan permintaan iterator klien ini saat ini. body harus berupa String atau Buffer , atau undefined jika Anda ingin melepas tubuh.
client.setHeadersAndBody(headers, body) : Digunakan untuk memodifikasi baik header dan bodi iterator klien ini saat ini. headers dan body harus mengambil bentuk yang sama seperti di atas.
client.setRequest(request) : Digunakan untuk memodifikasi seluruh permintaan yang saat ini dilakukan oleh klien ini. Dapat memiliki headers , body , method , atau path sebagai atribut. Default ke nilai -nilai yang diteruskan ke instance Autocannon saat dibuat. Note: call this when modifying multiple request values for faster encoding
client.setRequests(newRequests) : Digunakan untuk menimpa seluruh array permintaan yang diteruskan ke dalam contoh pada inisiasi. Note: call this when modifying multiple requests for faster encoding
Client Acara yang dapat dipancarkan Client tercantum di sini:
headers : Dipancarkan ketika permintaan yang dikirim dari klien ini telah menerima header balasannya. Ini menerima Object sebagai parameter.
body : Dipancarkan ketika permintaan yang dikirim dari klien ini telah menerima tubuh balasan. Ini menerima Buffer sebagai parameter.
response : dipancarkan ketika klien telah menerima tanggapan yang lengkap untuk permintaan yang dibuatnya. Ini disahkan argumen berikut:
statusCode : Kode Status HTTP dari respons.
resBytes : Panjang byte respons.
responseTime : Waktu yang dibutuhkan untuk mendapatkan respons setelah memulai permintaan.
reset : dipancarkan ketika pipa permintaan diatur ulang karena setupRequest mengembalikan nilai palsu.
Contoh Menggunakan Autocannon Events dan Klien API dan Acara:
'Gunakan strict'const autocannon = membutuhkan (' autocannon ') const instance = autocannon ({
URL: 'http: // localhost: 3000',
setupclient: setupclient}, (err, result) => handleresults (hasil)) // hasil yang diteruskan ke panggilan balik sama dengan yang dipancarkan dari eventsInstance.on ('selesai', handleresults) instance.on ('centang' , () => console.log ('cetak')) instance.on ('response', handleresponse) setupclient fungsi (klien) {
client.on ('body', console.log) // console.log Badan respons ketika fungsi} function handleresponse (klien, statuscode, resbytes, responseTime) {
console.log (`dapatkan respons dengan kode $ {statuscode} di $ {responsetime} milliseconds`)
console.log (`respons: $ {resbytes.toString ()}`)
// Perbarui tubuh atau header
client.setHeaders ({baru: 'header'})
Client.SetBody ('Badan Baru')
client.setheadersandbody ({new: 'header'}, 'body baru')} function handleresults (hasil) {
// ...} Autocannon ditulis dalam JavaScript untuk runtime Node.js dan terikat CPU. Kami telah memverifikasi bahwa ini menghasilkan hasil yang sebanding dengan wrk saat membandingkan aplikasi Node.js menggunakan modul http . Namun demikian, ia menggunakan CPU secara signifikan lebih banyak daripada alat lain yang dikompilasi ke biner seperti wrk . Autocannon dapat menjenuhkan CPU, misalnya proses autocannon mencapai 100%: dalam kasus tersebut, kami sarankan menggunakan wrk2 .
Sebagai contoh, mari kita pertimbangkan menjalankan dengan 1000 koneksi di server dengan 4 core dengan hyperthreading:
wrk menggunakan 2 utas (secara default) dan tambahan tambahan untuk mengumpulkan metrik dengan total beban CPU 20% + 20% + 40%.
autocannon menggunakan satu utas pada 80% beban CPU.
Keduanya menjenuhkan proses node.js di sekitar 41k req/detik, namun, autocannon dapat jenuh lebih cepat karena berhadapan tunggal.
Perhatikan bahwa wrk tidak mendukung perpipaan HTTP/1.1. Akibatnya, autocannon dapat membuat lebih banyak beban di server daripada WRK untuk setiap koneksi terbuka.
Proyek ini disponsori oleh Nearform.
Logo dan identitas yang dirancang oleh Cosmic Fox Design: https://www.behance.net/cosmicfox.
WRK dan WRK2 memberikan inspirasi besar.
Jika Anda menggunakan Autocannon atau Anda memiliki pertanyaan, beri tahu kami: Gitter
Glen Keane | GitHub
Salman Mitha | GitHub | NPM
Hak Cipta Matteo Collina dan kontributor lainnya, dilisensikan di bawah MIT.