المقدمة
لقد جلب لنا الإصدار v0.27.0 محرك تنفيذ جديد والعديد من المنفذين الجدد لتلبية متطلباتك الخاصة. يتضمن أيضًا واجهة برمجة تطبيقات برمجة جديدة مع العديد من الخيارات المختلفة لضبط ومحاكاة تحميل النظام قيد الاختبار (SUT). هذه نتيجة عام ونصف من العمل على طلب السحب # 1007 سيئ السمعة .
لإنشاء استعلامات بمعدل ثابت ، يمكننا استخدام
constant-arrival-rateالمؤدي. يقوم هذا العداء بإجراء الاختبار مع التكرارات بتردد ثابت للوقت المحدد. يسمح هذا لـ k6 بتغيير عدد المستخدمين الظاهريين النشطين (VUs) ديناميكيًا أثناء تنفيذ الاختبار من أجل تحقيق العدد المحدد من التكرارات لكل وحدة زمنية. في هذه المقالة ، سأشرح كيفية استخدام هذا السيناريو لإنشاء طلبات بمعدل ثابت.
أساسيات خيارات تكوين البرنامج النصي
دعنا نلقي نظرة على المعلمات الرئيسية المستخدمة في k6 لوصف تكوين اختبار في برنامج نصي يستخدم
constant-arrival-rateالمنفذ:
- executor ():
— k6. VU - — , , . rate()timeUnit( ):
k6ratetimeUnit.
:
rate: 1,timeUnit: '1s'« »rate: 1,timeUnit: '1m'« »rate: 90,timeUnit: '1m'« 90 », 1,5 /, 667 ,rate: 50,timeUnit: '1s'« 50 », 50 (requests per second — RPS), , .. 20
- duration ():
,gracefulStop. preAllocatedVUs:
.maxVUs:
, .
تشكل هذه المعلمات معًا برنامجًا نصيًا يمثل جزءًا من خيارات تكوين الاختبار. مقتطف الشفرة أدناه هو نموذج
constant-arrival-rateنصي.
في هذا التكوين ، لدينا برنامج
constant_request_rateنصي ، وهو معرف فريد يستخدم كتسمية للبرنامج النصي. يستخدم هذا السيناريو constant-arrival-rateالمنفذ ويتم تشغيله في دقيقة واحدة. كل ثانية ( timeUnit) ، سيتم تنفيذ تكرار واحد ( rate). تحتوي مجموعة المستخدمين الظاهري الذين تم توفيرهم مسبقًا على 20 نسخة ويمكن أن تصل إلى 100 ، اعتمادًا على عدد الطلبات والتكرارات.
اعلم أن تهيئة المستخدمين الظاهريين أثناء الاختبار يمكن أن تكون كثيفة الاستخدام لوحدة المعالجة المركزية وبالتالي تشوه نتائج الاختبار. بشكل عام ، من الأفضل أن
preAllocatedVUيكون لديك ما يكفي لإجراء اختبار الحمل. لذلك ، لا تنس تخصيص المزيد من المستخدمين الظاهريين بناءً على عدد الطلبات في اختبارك ، والمعدل الذي تريد إجراء الاختبار به.
export let options = {
scenarios: {
constant_request_rate: {
executor: 'constant-arrival-rate',
rate: 1,
timeUnit: '1s',
duration: '1m',
preAllocatedVUs: 20,
maxVUs: 100,
}
}
};
مثال لتوليد الطلبات بتردد ثابت مع constant-arrival-rate
في البرنامج التعليمي السابق ، أوضحنا كيفية حساب معدل الطلب الثابت. دعنا نلقي نظرة عليها مرة أخرى ، مع الأخذ في الاعتبار كيفية عمل البرمجة النصية:
لنفترض أنك تتوقع أن يقوم نظامك قيد الاختبار بمعالجة 1000 طلب في الثانية عند نقطة نهاية. يسمح التخصيص المسبق لـ 100 مستخدم افتراضي (بحد أقصى 200) لكل مستخدم افتراضي بإرسال ما يقرب من 5 إلى 10 طلبات (استنادًا إلى 100 ~ 200 مستخدم افتراضي). إذا استغرق كل طلب أكثر من ثانية واحدة لإكماله ، ينتهي بك الأمر بتقديم طلبات أقل من المتوقع (أكثر
dropped_iterations) ، وهي علامة على مشكلات في الأداء أو توقعات غير واقعية لنظامك قيد الاختبار. إذا كانت هذه هي الحالة ، يجب عليك إصلاح مشكلات الأداء وإعادة تشغيل الاختبار ، أو تعديل توقعاتك عن طريق التعديل timeUnit.
في هذا السيناريو ، سيقدم كل مستخدم افتراضي تم توفيره مسبقًا 10 طلبات (
rateقابلة للقسمة علىpreAllocatedVU). إذا لم يتم استلام الطلبات في غضون ثانية واحدة ، على سبيل المثال ، استغرق الأمر أكثر من ثانية واحدة للحصول على استجابة ، أو استغرق نظامك قيد الاختبار أكثر من ثانية واحدة لإكمال المهمة ، سيزيد k6 عدد المستخدمين الظاهريين للتعويض عن الطلبات الفائتة. يولد الاختبار التالي 1000 طلبًا في الثانية ويعمل لمدة 30 ثانية ، أي ما يقرب من 30000 طلب ، كما ترى في الإخراج أدناه: http_reqsو iterations. بالإضافة إلى ذلك ، استخدم k6 148 فقط من بين 200 مستخدم افتراضي.
import http from 'k6/http';
export let options = {
scenarios: {
constant_request_rate: {
executor: 'constant-arrival-rate',
rate: 1000,
timeUnit: '1s', // 1000 , ..1000
duration: '30s',
preAllocatedVUs: 100, //
maxVUs: 200, // preAllocatedVU , ,
}
}
};
export default function () {
http.get('http://test.k6.io/contacts.php');
}
ستكون نتيجة تنفيذ هذا النص كما يلي:
$ k6 run test.js
/\ |‾‾| /‾‾/ /‾/
/\ / \ | |_/ / / /
/ \/ \ | | / ‾‾\
/ \ | |‾\ \ | (_) |
/ __________ \ |__| \__\ \___/ .io
execution: local
script: test.js
output: -
scenarios: (100.00%) 1 executors, 200 max VUs, 1m0s max duration (incl. graceful stop):
* constant_request_rate: 1000.00 iterations/s for 30s (maxVUs: 100-200, gracefulStop: 30s)
running (0m30.2s), 000/148 VUs, 29111 complete and 0 interrupted iterations
constant_request_rate ✓ [======================================] 148/148 VUs 30s 1000 iters/s
data_received..............: 21 MB 686 kB/s
data_sent..................: 2.6 MB 85 kB/s
*dropped_iterations.........: 889 29.454563/s
http_req_blocked...........: avg=597.53µs min=1.64µs med=7.28µs max=152.48ms p(90)=9.42µs p(95)=10.78µs
http_req_connecting........: avg=561.67µs min=0s med=0s max=148.39ms p(90)=0s p(95)=0s
http_req_duration..........: avg=107.69ms min=98.75ms med=106.82ms max=156.54ms p(90)=111.73ms p(95)=116.78ms
http_req_receiving.........: avg=155.12µs min=21.1µs med=105.52µs max=34.21ms p(90)=147.69µs p(95)=190.29µs
http_req_sending...........: avg=46.98µs min=9.81µs med=41.19µs max=5.85ms p(90)=53.33µs p(95)=67.3µs
http_req_tls_handshaking...: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...........: avg=107.49ms min=98.62ms med=106.62ms max=156.39ms p(90)=111.52ms p(95)=116.51ms
*http_reqs..................: 29111 964.512705/s
iteration_duration.........: avg=108.54ms min=99.1ms med=107.08ms max=268.68ms p(90)=112.09ms p(95)=118.96ms
*iterations.................: 29111 964.512705/s
vus........................: 148 min=108 max=148
vus_max....................: 148 min=108 max=148
عند كتابة نص اختبار ، ضع في اعتبارك النقاط التالية:
- k6 (), . , ,
maxRedirects: 0. http ,maxRedirects. - . , , , ,
sleep(). - , , .
preAllocatedVU/maxVU, , , ,preAllocatedVU,maxVU.
WARN[0005] Insufficient VUs, reached 100 active VUs and cannot initialize more executor=constant-arrival-rate scenario=constant_request_rate
- ,
drop_iterations,iterationshttp_reqs.dropped_iterations, , . , ,preAllocatedVU. , , , . - , , . :
WARN[0008] Request Failed - تذكر أن واجهة برمجة تطبيقات البرمجة النصية لا تدعم الاستخدام العام للمدة و vus والمراحل ، على الرغم من أنه لا يزال من الممكن استخدامها. هذا يعني أيضًا أنه لا يمكنك استخدامها مع البرامج النصية.
خاتمة
قبل إصدار v0.27.0 ، لم يكن لدى k6 دعم كافٍ لتوليد الطلبات بمعدل ثابت. لذلك ، قمنا بتنفيذ حل بديل في JavaScript ، بحساب الوقت المستغرق لإكمال الطلبات لكل تكرار للبرنامج النصي. مع الإصدار 0.27.0 لم يعد هذا ضروريًا.
في هذه المقالة ، ناقشت كيف يمكن لـ k6 تحقيق معدل طلب متسق باستخدام واجهة برمجة تطبيقات البرمجة النصية الجديدة
constant-arrival-rateالمؤدي. يبسط هذا المنفذ الكود ويوفر الوسائل لتحقيق عدد ثابت من الطلبات في الثانية. هذا على النقيض من الإصدار السابق من نفس المقالة ، الذي وصفت فيه طريقة أخرى لتحقيق نفس النتائج إلى حد كبير من خلال حساب عدد المستخدمين الظاهريين ، والتكرارات ، والمدة باستخدام صيغة وبعض التعليمات البرمجية لجافا سكريبت. لحسن الحظ ، يعمل هذا النهج الجديد على النحو المنشود ولم نعد بحاجة إلى استخدام أي عمليات اختراق.
أتمنى أن تكون قد استمتعت بقراءة هذا المقال. أنا أحب أن أسمع رأيك.