أداة القياس HTTP/1.1 مكتوبة في العقدة ، مستوحاة بشكل كبير من WRK و WRK2 ، بدعم من أنابيب HTTP و HTTPS. في صندوق بلدي ، يمكن لـ AutoCannon إنتاج المزيد من الحمل من wrk و wrk2 ، انظر القيود لمزيد من التفاصيل.
تثبيت
الاستخدام
API
شكر وتقدير
رخصة
npm i autocannon -g
أو إذا كنت ترغب في استخدام واجهة برمجة التطبيقات أو التبعية:
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 ٪). نظرًا لأننا ركضنا لمدة 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 // default} ، console.log) // async/awaitaSync fOO () {
const نتيجة = انتظار autocannon ({url: 'http: // localhost: 3000' ، connections: 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} ، console.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/tpath/toup-request.js'}
]} ، console.log)ابدأ Autocannon ضد الهدف المعطى.
opts : خيارات التكوين لمثيل Autocannon. هذا يمكن أن يكون للسمات التالية. مطلوب .
body : عندما يكون الحاضر ، سوف يتجاوز opts.body . خياري
headers : عندما يكون الحاضر ، سوف تخطى opts.headers . خياري
method : عند الحضور ، سوف تخطى opts.method . خياري
path : عندما يكون الحاضر ، سوف تخطى opts.path . خياري
setupRequest : Function قد توفرها لتحفيز كائن request RAW ، على سبيل المثال request.method = 'GET' . يستغرق المعلمات request (كائن) context (الكائن) ، ويجب إرجاع الطلب المعدل. عندما تُرجع قيمة كاذبة ، ستعيد تشغيل Autocannon من الطلب الأول. عند استخدام workers ، تحتاج إلى توفير مسار ملف يقوم بتصدير وظيفة بدلاً من ذلك (راجع قسم العمال لمزيد من التفاصيل) اختياري
onResponse : Function قد تقدمها لمعالجة الاستجابة المستلمة. يستغرق المعلمات context (كائن) headers كائن) status (Number) ، body (سلسلة) (كائن القيمة المفتاح). عند استخدام workers ، تحتاج إلى توفير مسار ملف يقوم بتصدير وظيفة بدلاً من ذلك (راجع قسم العمال لمزيد من التفاصيل) اختياري
url : الهدف المعطى. يمكن أن يكون http أو https. يُسمح بأكثر من عنوان URL ، ولكن يوصى بأن يكون عدد الاتصالات مضاعفًا صحيحًا لعنوان URL. مطلوب .
socketPath : مسار إلى مقبس مجال UNIX أو نوافذ مسماة أنبوب. لا يزال هناك حاجة إلى url لإرسال رأس ومسار المضيف الصحيحين. خياري .
workers : عدد مواضيع العمال لاستخدامها لإطلاق الطلبات.
connections : عدد الاتصالات المتزامنة. افتراضي اختياري : 10 .
duration : عدد الثواني لتشغيل Autocannon. يمكن أن يكون timeString. افتراضي اختياري : 10 .
amount : Number يوضح عدد الطلبات التي يجب تقديمها قبل إنهاء الاختبار. هذا يتجاوز المدة ويأخذ الأسبقية ، لذلك لن ينتهي الاختبار حتى يتم إكمال عدد الطلبات اللازمة لإكمال. خياري .
sampleInt : عدد المللي ثانية إلى الانقراض بين أخذ العينات. هذا يتحكم في فاصل العينة ، وبالتالي العدد الإجمالي للعينات ، مما يؤثر على التحليلات الإحصائية. الافتراضي: 1.
timeout : عدد الثواني لانتظار الرد من قبل. افتراضي اختياري : 10 .
pipelining : عدد الطلبات التي يتم إنشاؤها لكل اتصال. سوف يتسبب في رمي واجهة برمجة تطبيقات Client عندما يكون أكبر من 1. افتراضي اختياري : 1 .
bailout : عتبة عدد الأخطاء عند تقديم الطلبات إلى الخادم قبل أن تنفد هذه الحالة. سيأخذ هذا المثيل جميع النتائج الحالية حتى الآن وتجميعها في النتائج. إذا لم يمر أي منها هنا ، فسيتجاهل المثيل الأخطاء ولا ينقذ أبدًا. افتراضي اختياري : undefined .
method : طريقة HTTP للاستخدام. افتراضي اختياري default: 'GET' .
title : String يتم إضافتها إلى نتائج تحديد الهوية. افتراضي اختياري : undefined .
body : String أو Buffer يحتوي على جسم الطلب. أدخل معرفات واحدة أو أكثر تم إنشاؤها عشوائيًا في الجسم من خلال تضمين [<id>] حيث يجب إدراج المعرف الذي تم إنشاؤه عشوائيًا (يجب أيضًا تعيين IdReplaction على True). يمكن أن يكون هذا مفيدًا في نقاط الاختبار بعد اختبار نقاط النهاية حيث يجب أن يكون أحد الحقول أو أكثر فريدة من نوعها. اترك غير محدد لجسم فارغ. افتراضي اختياري : undefined .
form : String أو Object يحتوي على خيارات multipart/form-data أو مسار إلى ملف JSON الذي يحتوي عليها
headers : Object يحتوي على رؤوس الطلب. افتراضي اختياري : {} .
initialContext : كائن ترغب في تهيئة سياقك معه. تحقق من مثال على تهيئة السياق. خياري
setupClient : Function سيتم تمريرها كائن Client لكل اتصال ليتم إجراء. يمكن استخدام هذا لتخصيص كل رؤوس اتصال فردية وجسم باستخدام واجهة برمجة التطبيقات الموضحة أدناه. التغييرات التي تجريها على العميل في هذه الوظيفة ستؤدي الأسبقية على body الافتراضي headers التي تمر بها هنا. هناك مثال على ذلك في مجلد العينات. افتراضي اختياري : function noop () {} . عند استخدام workers ، تحتاج إلى توفير مسار ملف يصدر وظيفة بدلاً من ذلك (راجع قسم العمال لمزيد من التفاصيل).
verifyBody : Function سيتم اجتيازها هيئة الاستجابة لكل طلب مكتمل. يتم حساب كل طلب ، الذي لا تُرجع وظيفة verifyBody من قيمة الحقيقة ، في mismatches . هذه الوظيفة سوف لها الأسبقية على expectBody . هناك مثال على ذلك في مجلد العينات. عند استخدام workers ، تحتاج إلى توفير مسار ملف يصدر وظيفة (راجع قسم العمال لمزيد من التفاصيل).
maxConnectionRequests : Number يوضح طلبات MAX لإجراء اتصال لكل اتصال. amount يأخذ الأسبقية إذا تم تعيين كلاهما. خياري
maxOverallRequests : Number يوضح Max طلبات لجعلها بشكل عام. لا يمكن أن يكون أقل من connections . maxConnectionRequests لها الأسبقية إذا تم تعيين كلاهما. خياري
connectionRate : Number يوضح معدل الطلبات التي يجب تقديمها في الثانية من كل اتصال فردي. لا يوجد معدل الحد افتراضيا. خياري
overallRate : Number يوضح معدل الطلبات التي يجب تقديمها في الثانية من جميع الاتصالات. connectionRate يأخذ الأسبقية إذا تم تعيين كلاهما. لا يوجد معدل الحد افتراضيا. خياري
ignoreCoordinatedOmission : Boolean التي تعطل تصحيح الكمون للتعويض عن قضية الإغفال المنسق. لا معنى له عندما لم يتم تحديد أي معدل للطلبات ( connectionRate أو overallRate ). افتراضي اختياري : false .
reconnectRate : Number يجعل الاتصالات الفردية تفصل وإعادة الاتصال بالخادم كلما أرسل هذا العدد من الطلبات. خياري
requests : Array من Object التي تمثل تسلسل الطلبات التي يجب تقديمها أثناء القياس. يمكن استخدامها بالاقتران مع body headers method المعلمة أعلاه. تحقق من مجلد العينات للحصول على مثال على كيفية استخدام ذلك. خياري . يمكن أن يكون للكائنات الموجودة هذه السمات:
har : Object من محتوى هار المحسّن. سوف AutoCannon إضافية وتستخدم entries.request التراجع: سيتم تجاهل requests method form والخيارات body . ملاحظة : يجب عليك التأكد من أن الإدخالات تستهدف نفس نطاق خيار url . خياري
idReplacement : A Boolean الذي يمكّن استبدال علامات [<id>] ضمن هيئة الطلب مع معرف تم إنشاؤه عشوائيًا ، مما يسمح بإرسال حقول فريدة من نوعها مع الطلبات. تحقق من مثال على الاستخدام البرنامجي الذي يمكن العثور عليه في العينات. افتراضي اختياري : false
forever : A Boolean الذي يسمح لك بإعداد مثيل لـ AutoCannon يعيد تشغيله إلى أجل غير مسمى بعد انبعاث النتائج مع الحدث done . مفيد لإعادة تشغيل المثيل بكفاءة. للتوقف عن التشغيل إلى الأبد ، يجب أن تتسبب في SIGINT أو الاتصال بوظيفة .stop() على مثيلك. افتراضي اختياري : false
servername : String تحدد اسم الخادم لتمديد TLS SNI (مؤشر اسم الخادم). افتراضي اختياري : الإعدادات الافتراضية إلى اسم مضيف عنوان URL عندما لا يكون عنوان IP.
excludeErrorStats : A Boolean الذي يسمح لك بتعطيل تتبع استجابات رمز غير 2xx في الكمون والبايت في العمليات الحسابية في الثانية. افتراضي اختياري : false .
expectBody : String تمثل هيئة الاستجابة المتوقعة. كل طلب لا يساوي جسم الاستجابة مساواة مع expectBody mismatches . إذا تم تمكينه ، فإن عدم التطابق يحسب نحو الإنقاذ. خياري
tlsOptions : Object يتم تمريره في مكالمة tls.connect (قائمة كاملة بالخيارات). ملاحظة: ينطبق هذا فقط إذا كان عنوان URL آمنًا.
skipAggregateResult : A 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 = require (' autocannon ') const مثيل = autocannon ({
url: 'http: // localhost: 3000'} ، console.log) // يتم استخدام هذا لقتل المثيل على ctrl-cprocess.once ('sigint' ، () => {
مثيلتحقق من هذا المثال لرؤيته قيد الاستخدام أيضًا.
إرجاع سلسلة نصية تحتوي على جداول النتائج.
resultObject : كائن نتيجة Autocannon. مطلوب .
opts : خيارات التكوين لإنشاء الجداول. قد تشمل هذه السمات التالية. خياري .
outputStream : الدفق الذي يتم توجيه الإخراج إليه. يتم استخدامه في المقام الأول للتحقق مما إذا كانت المحطة تدعم اللون. الافتراضي: process.stderr .
renderResultsTable : قيمة الحقيقة لتمكين إنشاء جدول النتائج. الافتراضي: true .
renderLatencyTable : قيمة الحقيقة لتمكين إنشاء جدول الكمون. الافتراضي: false .
مثال:
"استخدام صارم" ؛ const {stdout} = require ("Node: Process") ؛ const autocannon = require ("autocannon") ؛ وظيفة الطباعة (النتيجة) {
stdout.write (autocannon.printresult (نتيجة)) ؛} autocannon ({url: "http: // localhost: 3000"} ، (err ، result) => print (result)) ؛ قم بتجميع نتائج مثيل Autocannon واحد أو أكثر ، حيث تم تشغيل مثيلات AutoCannon مع خيار skipAggregateResult .
هذه حالة استخدام متقدمة ، حيث قد تقوم بإجراء اختبار تحميل باستخدام Autocannon عبر آلات متعددة وبالتالي تحتاج إلى تأجيل تجميع النتائج إلى وقت لاحق.
results : مجموعة من نتائج مثيل Autocannon ، حيث تم تشغيل الحالات مع خيار skipAggregateResult . مطلوب .
opts : هذه مجموعة فرعية من الخيارات التي ستنقلها إلى واجهة برمجة تطبيقات AutoCannon الرئيسية ، بحيث يمكنك استخدام كائن الخيارات نفسه كما هو مستخدم لتشغيل الحالات. انظر 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 أو Windows المسمى الأنابيب التي تم استهدافها أو 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 = require (' autocannon ') const مثيل = autocannon ({
عنوان URL: 'http: // localhost: 3000' ،
SetupClient: SetupClient} ، (err ، result) => معالجات (نتيجة)) // النتائج التي تم تمريرها إلى رد الاتصال هي نفسها التي تنبعث منها الأحداث التي تم إنجازها ("مندوب" ، معالجات) مثيل. ، () => console.log ('ticking')) مثيل.
client.on ('body' ، console.log) // console.log هيئة استجابة عند استلامها} معالج الوظائف (العميل ، statuscode ، resbytes ، مسؤولية) {
console.log (`حصلت على استجابة مع رمز $ {statusCode} في $ {besponsetime} milliseconds`)
console.log (`الاستجابة: $ {resbytes.toString ()}`)
// تحديث الجسم أو الرؤوس
Client.Setheaders ({new: 'header'})
client.setbody ('New Body')
client.setheadersandbody ({new: 'header'} ، 'new Body')} معالجات الوظائف (النتيجة) {
// ...} تتم كتابة AutoCannon في JavaScript لوقت تشغيل Node.js وهو مرتبط بوحدة المعالجة المركزية. لقد تحققنا من أنها تعطي نتائج مماثلة مع wrk عند قيام تطبيقات Node.js باستخدام وحدة http . ومع ذلك ، فإنه يستخدم وحدة المعالجة المركزية أكثر بكثير من الأدوات الأخرى التي تجمع إلى ثنائي مثل wrk . يمكن لـ AutoCannon تشبع وحدة المعالجة المركزية ، على سبيل المثال ، تصل عملية Autocannon إلى 100 ٪: في هذه الحالات ، نوصي باستخدام wrk2 .
على سبيل المثال ، دعنا ننظر في تشغيل مع 1000 اتصال على خادم مع 4 نوى مع فرط التنthrekending:
يستخدم wrk مؤشر ترابط (افتراضيًا) وواحد مساعد لجمع المقاييس مع حمولة إجمالية من وحدة المعالجة المركزية بنسبة 20 ٪ + 20 ٪ + 40 ٪.
يستخدم autocannon مؤشر ترابط واحد في تحميل وحدة المعالجة المركزية 80 ٪.
كلاهما يشبع عملية node.js في حوالي 41 كيلو متر/ثانية ، ومع ذلك ، يمكن أن تشبع autocannon عاجلاً لأنها واحدة من الخيوط.
لاحظ أن wrk لا يدعم أنابيب HTTP/1.1. نتيجة لذلك ، يمكن autocannon إنشاء المزيد من التحميل على الخادم أكثر من WRK لكل اتصال مفتوح.
وقد رعاية هذا المشروع بلطف من قبل Nearform.
الشعار والهوية التي صممها تصميم الثعلب الكوني: https://www.behance.net/cosmicfox.
قدم WRK و WRK2 مصدر إلهام كبير.
إذا كنت تستخدم Autocannon أو لديك أي أسئلة ، فأخبرنا: Gitter
غلين كين | جيثب
سلمان ميثا | جيثب | NPM
حقوق الطبع والنشر ماتيو كولينا وغيرها من المساهمين ، مرخصة بموجب معهد ماساتشوستس للتكنولوجيا.