اختبار الأداء والحِمل: JMeter و Gatling
يعمل لواحد؛ هل يصمد لألف؟ كيف نقيس السرعة والتحمّل؟ ⏱ نحو 45 دقيقة.
- تفهم اختبار الأداء والحِمل والإجهاد.
- تعرف مقاييس زمن الاستجابة والإنتاجية.
- تقرأ المئين
p95بدل المتوسط. - تحلّل نتائج حِملٍ وتقيسها بعتبة.
١هل يصمد تحت الضغط؟
تطبيقٌ يعمل لمستخدمٍ واحد قد ينهار أمام ألف. اختبار الأداء يقيس كيف يتصرّف النظام تحت الحِمل: كم يستغرق الردّ؟ كم طلبًا يحتمل في الثانية؟ متى ينهار؟ هذا اختبارٌ غير وظيفيّ: لا يسأل «هل النتيجة صحيحة؟» بل «بأيّ سرعةٍ وتحمّل؟».
| النوع | يقيس | سؤاله |
|---|---|---|
| اختبار الحِمل Load | السلوك تحت حِملٍ متوقَّع | هل يصمد لـ 500 مستخدمًا؟ |
| اختبار الإجهاد Stress | نقطة الانهيار | متى يسقط؟ |
| اختبار الذروة Spike | قفزة حِملٍ مفاجئة | ماذا لو تضاعف الزوّار فجأة؟ |
٢المقاييس التي تهمّ
| المقياس | معناه |
|---|---|
| زمن الاستجابة Response time | كم يستغرق طلبٌ واحد |
| الإنتاجية Throughput | عدد الطلبات في الثانية |
المئين p95 / p99 | زمن استجابة أبطأ 5% / 1% من الطلبات |
| معدّل الأخطاء Error rate | نسبة الطلبات الفاشلة تحت الحِمل |
المتوسط يخدع: قد يكون الزمن المتوسط جيّدًا بينما يعاني 5% من المستخدمين بطئًا شديدًا. لذلك نقيس المئين p95: «95% من الطلبات أسرع من هذا الحدّ». هو الأصدق لتجربة المستخدم.
٣نحلّل نتائج حِملٍ ببايثون
بعد تشغيل أداة الحِمل نحصل على أزمنة استجابة. نحلّلها: المتوسط، و p95، ونتحقّق من عتبة القبول:
# أزمنة استجابة (مللي ثانية) من اختبار حِملtimes = [80, 95, 110, 90, 400, 105, 88, 120, 500, 99, 92, 115, 87, 130, 450, 101, 93, 108, 97, 102] n = len(times)avg = sum(times) / nordered = sorted(times)p95 = ordered[int(0.95 * n) - 1] # عتبة أبطأ 5%errors = sum(1 for t in times if t > 1000) # نعدّ ما تجاوز ثانية فشلًا print("المتوسط:", round(avg, 1), "مللي")print("p95:", p95, "مللي")print("ضمن العتبة (p95 < 300)؟", p95 < 300)print("معدّل الأخطاء:", round(errors / n * 100, 1), "%")
لاحظ الفرق: المتوسط معقول (~140)، لكن p95 قفز بسبب طلباتٍ بطيئة (400، 500). التحليل يكشف أن بعض المستخدمين يعانون رغم «معدّلٍ جيّد».
توقّع وتحقّق
اختبار الأداء نوعه:
عدد الطلبات في الثانية هو:
الأصدق لتجربة المستخدم:
أداة اختبار حِمل شائعة:
الخلاصة
- اختبار الأداء غير وظيفيّ: يقيس السرعة والتحمّل لا صحّة النتيجة.
- أنواعه: حِمل (المتوقَّع)، إجهاد (نقطة الانهيار)، ذروة (قفزة مفاجئة).
- المئين
p95/p99أصدق من المتوسط لتجربة المستخدم. JMeterوGatlingيولّدان الحِمل؛ ونحلّل النتائج بعتباتٍ للقبول.
تحدٍّ برمجي: حلّل الحِمل
متقدممن أزمنة الاستجابة، اطبع المتوسط مقرّبًا لمنزلة واحدة، وعدد الطلبات التي تجاوزت 200 مللي (البطيئة).
- احسب المتوسط واطبعه (منزلة واحدة).
- اطبع عدد القيم > 200.
ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:
times = [90, 120, 250, 100, 300, 110, 95, 220]# اطبع المتوسط (منزلة واحدة) ثم عدد الطلبات > 200
💡 تلميح 1
avg = sum(times) / len(times).💡 تلميح 2
sum(1 for t in times if t > 200).حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.
times = [90, 120, 250, 100, 300, 110, 95, 220]avg = sum(times) / len(times)print(round(avg, 1))print(sum(1 for t in times if t > 200))