เครื่องมือการเปรียบเทียบ HTTP/1.1 ที่เขียนขึ้นในโหนดได้รับแรงบันดาลใจอย่างมากจาก WRK และ WRK2 โดยรองรับ HTTP Pipelining และ 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 MB ใน 1 วินาทีในกรณีที่เลวร้ายที่สุด (ช้าที่สุด 1%) เนื่องจากเราวิ่งเพียง 10 วินาทีจึงมีเพียง 10 ตัวอย่างค่ามินและเปอร์เซ็นไทล์ 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 = reghed (' autocannon ') autoCannon ({{
URL: 'http: // localhost: 3000'
การเชื่อมต่อ: 10, // ค่าเริ่มต้น
Pipelining: 1, // ค่าเริ่มต้น
ระยะเวลา: 10 // ค่าเริ่มต้น}, console.log) // async/awaitasync function foo () {
const result = รอ 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 = reghed (' autocannon ') autoCannon ({{
URL: 'http: // localhost: 3000'
การเชื่อมต่อ: 10, // ค่าเริ่มต้น
Pipelining: 1, // ค่าเริ่มต้น
ระยะเวลา: 10, // ค่าเริ่มต้น
คนงาน: 4}, console.log) หมายเหตุ: เมื่ออยู่ในโหมดคนงานคุณต้องผ่านเส้นทางไฟล์สัมบูรณ์ไปยังตัวเลือกทั้งหมดที่ยอมรับ function นี่เป็นเพราะฟังก์ชั่นที่ส่งผ่านไปยังกระบวนการหลักไม่สามารถโคลนและส่งผ่านไปยังคนงาน ดังนั้นจึงต้องการไฟล์ที่ require ตัวเลือกที่มีพฤติกรรมนี้แสดงในตัวอย่างด้านล่าง
'ใช้ strict'const autocannon = reghed (' autocannon ') autoCannon ({{
-
คนงาน: 4,
SetupClient: '/full/path/to/setup-lible.js'
Verifybody: '/full/path/to/verify-body.js'
คำขอ: [{// ... onResponse: '/full/path/to/on-response.js'}, {// ... setuprequest: '/fulll/path/to/setup-request.js'}
]}, console.log)เริ่ม AutoCannon กับเป้าหมายที่กำหนด
opts : ตัวเลือกการกำหนดค่าสำหรับอินสแตนซ์ AutoCannon สิ่งนี้สามารถมีคุณลักษณะดังต่อไปนี้ ที่จำเป็น .
body : เมื่ออยู่ในปัจจุบันจะแทนที่ opts.body ไม่จำเป็น
headers : เมื่ออยู่ในปัจจุบันจะแทนที่ opts.headers ไม่จำเป็น
method : เมื่อมีอยู่จะแทนที่ opts.method ไม่จำเป็น
path : เมื่ออยู่ในปัจจุบันจะแทนที่ opts.path ไม่จำเป็น
setupRequest : Function ที่คุณอาจให้เพื่อการกลายพันธุ์วัตถุ request ดิบเช่น request.method = 'GET' ต้องใช้พารามิเตอร์ request (วัตถุ) และ context (วัตถุ) และต้องส่งคืนคำขอที่แก้ไขแล้ว เมื่อมันส่งคืนค่าเท็จ autocannon จะรีสตาร์ทจากคำขอครั้งแรก เมื่อใช้ workers คุณจะต้องจัดหาเส้นทางไฟล์ที่เริ่มต้นการส่งออกฟังก์ชั่นแทน (ตรวจสอบส่วนของคนงานเพื่อดูรายละเอียดเพิ่มเติม) เป็นทางเลือก
onResponse : Function ที่คุณอาจให้ในการประมวลผลการตอบสนองที่ได้รับ ต้องใช้ status (หมายเลข), body (สตริง) context (วัตถุ) พารามิเตอร์และ headers (วัตถุคีย์-ค่า) เมื่อใช้ workers คุณจะต้องจัดหาเส้นทางไฟล์ที่เริ่มต้นการส่งออกฟังก์ชั่นแทน (ตรวจสอบส่วนของคนงานเพื่อดูรายละเอียดเพิ่มเติม) เป็นทางเลือก
url : เป้าหมายที่กำหนด สามารถเป็น http หรือ https อนุญาตให้ใช้ URL มากกว่าหนึ่ง URL แต่ขอแนะนำให้จำนวนการเชื่อมต่อเป็นจำนวนเต็มหลาย URL ที่จำเป็น .
socketPath : เส้นทางไปยังซ็อกเก็ตโดเมน UNIX หรือหน้าต่างชื่อท่อ url ยังคงต้องส่งส่วนหัวโฮสต์และเส้นทางที่ถูกต้อง ไม่จำเป็น .
workers : จำนวนเธรดคนงานที่จะใช้เพื่อยิงคำขอ
connections : จำนวนการเชื่อมต่อพร้อมกัน ตัวเลือก เริ่มต้น: 10 .
duration : จำนวนวินาทีในการรัน autocannon สามารถกำหนดเวลาได้ ตัวเลือก เริ่มต้น: 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 ที่สร้างแบบสุ่ม (ต้องตั้งค่า idreplacement เป็น 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>] ภายในร่างกายคำขอด้วย ID ที่สร้างแบบสุ่มทำให้สามารถส่งฟิลด์ที่ไม่ซ้ำกันได้พร้อมคำขอ ตรวจสอบตัวอย่างของการใช้งานโปรแกรมที่สามารถพบได้ในตัวอย่าง ตัวเลือก เริ่มต้น: false
forever : Boolean ที่ช่วยให้คุณตั้งค่าอินสแตนซ์ของ autocannon ที่รีสตาร์ทอย่างไม่มีกำหนดหลังจากปล่อยผลลัพธ์ด้วยเหตุการณ์ done มีประโยชน์สำหรับการรีสตาร์ทอินสแตนซ์ของคุณอย่างมีประสิทธิภาพ ในการหยุดทำงานตลอดไปคุณต้องทำให้ SIGINT หรือเรียกฟังก์ชั่น .stop() บนอินสแตนซ์ของคุณ ตัวเลือก เริ่มต้น: false
servername : String ที่ระบุชื่อเซิร์ฟเวอร์สำหรับส่วนขยาย SNI (ตัวบ่งชี้ชื่อเซิร์ฟเวอร์) ส่วนขยาย TLS ตัวเลือกเริ่ม ต้น : ค่าเริ่มต้นไปยังชื่อโฮสต์ของ 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
ติดตามความคืบหน้าของ autocannon ของคุณโดยทางโปรแกรม
instance : อินสแตนซ์ของ autocannon ที่จำเป็น .
opts : ตัวเลือกการกำหนดค่าสำหรับการติดตาม สิ่งนี้สามารถมีคุณลักษณะดังต่อไปนี้ ไม่จำเป็น .
outputStream : สตรีมไปยัง ค่าเริ่มต้น: process.stderr
renderProgressBar : คุณค่าความจริงเพื่อเปิดใช้งานการแสดงผลของแถบความคืบหน้า ค่าเริ่มต้น: true
renderResultsTable : ค่าความจริงเพื่อเปิดใช้งานการแสดงผลของตารางผลลัพธ์ ค่าเริ่มต้น: true
renderLatencyTable : ค่าความจริงเพื่อเปิดใช้งานการแสดงผลของตารางเวลาแฝงขั้นสูง ค่าเริ่มต้น: false
progressBarString : string ที่กำหนดรูปแบบของเอาต์พุตการแสดงผลความคืบหน้า ต้องเป็นอินพุตที่ถูกต้องสำหรับโมดูลแถบความคืบหน้า ค่าเริ่มต้น: 'running [:bar] :percent'
ตัวอย่างที่เพิ่งพิมพ์ตารางผลลัพธ์เมื่อเสร็จสิ้น:
'ใช้ Strict'Const autoCannon = reghed (' autocannon ') const อินสแตนซ์ = autoCannon ({{{
URL: 'http: // localhost: 3000'}, console.log) // สิ่งนี้ใช้ในการฆ่าอินสแตนซ์บน ctrl-cprocess.once ('sigint', () => {
instance.stop ()}) // เพียงแค่แสดงผล ulesoutocannon.track (อินสแตนซ์, {renderprogressbar: false})ตรวจสอบตัวอย่างนี้เพื่อดูว่าใช้งานเช่นกัน
ส่งคืนสตริงข้อความที่มีตารางผลลัพธ์
resultObject : วัตถุผลลัพธ์ของ autocannon ที่จำเป็น .
opts : ตัวเลือกการกำหนดค่าสำหรับการสร้างตาราง สิ่งเหล่านี้อาจรวมถึงคุณลักษณะต่อไปนี้ ไม่จำเป็น .
outputStream : สตรีมที่ส่งออก ส่วนใหญ่จะใช้เพื่อตรวจสอบว่าเทอร์มินัลรองรับสีหรือไม่ ค่าเริ่มต้น: process.stderr
renderResultsTable : ค่าความจริงเพื่อเปิดใช้งานการสร้างตารางผลลัพธ์ ค่าเริ่มต้น: true
renderLatencyTable : คุณค่าความจริงเพื่อเปิดใช้งานการสร้างตารางเวลาแฝง ค่าเริ่มต้น: false
ตัวอย่าง:
"ใช้เข้มงวด"; const {stdout} = ต้องการ ("โหนด: กระบวนการ"); const autocannon = reghed ("autocannon"); ฟังก์ชั่นพิมพ์ (ผลลัพธ์) {
stdout.write (autocannon.printresult (ผลลัพธ์));} autocannon ({url: "http: // localhost: 3000"}, (เอ่อ, ผลลัพธ์) => พิมพ์ (ผลลัพธ์)); รวมผลลัพธ์ของอินสแตนซ์ AutoCannon หนึ่งอินสแตนซ์หรือมากกว่านั้นซึ่งอินสแตนซ์ของ 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 : ปล่อยออกมาทุกวินาที autocannon นี้กำลังใช้เกณฑ์มาตรฐาน มีประโยชน์สำหรับการแสดงสถิติ ฯลฯ ที่ใช้โดยฟังก์ชั่น 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 : ค่าของตัวเลือก 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-histogram-percentiles-OBJ และมีรูปร่างนี้:
min : ค่าต่ำสุดสำหรับสถิตินี้
max : ค่าสูงสุดสำหรับสถิตินี้
average : ค่าเฉลี่ย (เฉลี่ย)
stddev : ค่าเบี่ยงเบนมาตรฐาน
p* : ค่าเปอร์เซ็นไทล์ XXTH สำหรับสถิตินี้ คุณสมบัติเปอร์เซ็นไทล์คือ: p2_5 , p50 , p75 , p90 , p97_5 , p99 , p99_9 , p99_99 , p99_999
Client วัตถุนี้ถูกส่งผ่านเป็นพารามิเตอร์แรกของทั้งฟังก์ชัน 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 = reghed (' autocannon ') const อินสแตนซ์ = autoCannon ({{{
URL: 'http: // localhost: 3000'
SetupClient: SetupClient}, (ERR, ผลลัพธ์) => handlerEsults (ผลลัพธ์)) // ผลลัพธ์ที่ส่งผ่านไปยังการโทรกลับนั้นเหมือนกับที่ปล่อยออกมาจากเหตุการณ์ที่เกิดขึ้นในขั้นต้น , () => console.log ('ticking')) อินสแตนซ์ ('การตอบกลับ', handleresponse) ฟังก์ชั่น setupClient (ไคลเอนต์) {
client.on ('body', console.log) // console.log ร่างกายตอบสนองเมื่อได้รับฟังก์ชั่น handleresponse (ไคลเอน
console.log (`ได้รับการตอบกลับด้วยรหัส $ {StatusCode} ใน $ {ResponsEtime} Milliseconds`)
console.log (`การตอบสนอง: $ {resbytes.toString ()}`)
// อัปเดตร่างกายหรือส่วนหัว
client.setheaders ({new: 'header'})
client.setbody ('ร่างกายใหม่')
client.setheadersandbody ({new: 'header'}, 'body ใหม่')} ฟังก์ชั่น handleresults (ผลลัพธ์) {
- AutoCannon เขียนด้วย JavaScript สำหรับรันไทม์ Node.js และเป็น CPU-bound เราได้ตรวจสอบแล้วว่าให้ผลลัพธ์ที่เปรียบเทียบได้กับ wrk เมื่อแอปพลิเคชันการเปรียบเทียบ Node.js โดยใช้โมดูล http อย่างไรก็ตามมันใช้ CPU มากกว่าเครื่องมืออื่น ๆ ที่รวบรวมเป็นไบนารีเช่น wrk AutoCannon สามารถทำให้ CPU อิ่มตัวเช่นกระบวนการ autocannon ถึง 100%: ในกรณีเหล่านั้นเราขอแนะนำให้ใช้ wrk2
ตัวอย่างเช่นลองพิจารณาการทำงานกับ 1,000 การเชื่อมต่อบนเซิร์ฟเวอร์ที่มี 4 คอร์ที่มี hyperthreading:
wrk ใช้ 2 เธรด (โดยค่าเริ่มต้น) และหนึ่งเสริมเพื่อรวบรวมตัวชี้วัดด้วยโหลดรวมของ CPU 20% + 20% + 40%
autocannon ใช้เธรดเดียวที่โหลด CPU 80%
ทั้งสองอิ่มตัวกระบวนการ node.js ที่ประมาณ 41K REQ/Sec อย่างไรก็ตาม autocannon สามารถอิ่มตัวได้เร็วขึ้นเพราะมันเป็นเธรดเดี่ยว
โปรดทราบว่า wrk ไม่รองรับ HTTP/1.1 Pipelining เป็นผลให้ autocannon สามารถสร้างโหลดบนเซิร์ฟเวอร์ได้มากกว่า WRK สำหรับการเชื่อมต่อแบบเปิดแต่ละครั้ง
โครงการนี้ได้รับการสนับสนุนจากใกล้กับ
โลโก้และตัวตนที่ออกแบบโดย Cosmic Fox Design: https://www.behance.net/cosmicfox
WRK และ WRK2 เป็นแรงบันดาลใจที่ยอดเยี่ยม
หากคุณใช้ AutoCannon หรือมีคำถามใด ๆ โปรดแจ้งให้เราทราบ: Gitter
Glen Keane | คนอื่น ๆ
Salman Mitha | GitHub | NPM
ลิขสิทธิ์ Matteo Collina และผู้มีส่วนร่วมอื่น ๆ ได้รับใบอนุญาตภายใต้ MIT