طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 245 · ضمان جودة تطبيقات الويب
الدرس 16 · الوحدة 8: سيناريوهات اختبار شاملة

اختبار الأداء والحِمل: JMeter و Gatling

يعمل لواحد؛ هل يصمد لألف؟ كيف نقيس السرعة والتحمّل؟ ⏱ نحو 45 دقيقة.

بعد هذا الدرس ستستطيع أن:
  • تفهم اختبار الأداء والحِمل والإجهاد.
  • تعرف مقاييس زمن الاستجابة والإنتاجية.
  • تقرأ المئين p95 بدل المتوسط.
  • تحلّل نتائج حِملٍ وتقيسها بعتبة.

١هل يصمد تحت الضغط؟

تطبيقٌ يعمل لمستخدمٍ واحد قد ينهار أمام ألف. اختبار الأداء يقيس كيف يتصرّف النظام تحت الحِمل: كم يستغرق الردّ؟ كم طلبًا يحتمل في الثانية؟ متى ينهار؟ هذا اختبارٌ غير وظيفيّ: لا يسأل «هل النتيجة صحيحة؟» بل «بأيّ سرعةٍ وتحمّل؟».

النوعيقيسسؤاله
اختبار الحِمل Loadالسلوك تحت حِملٍ متوقَّعهل يصمد لـ 500 مستخدمًا؟
اختبار الإجهاد Stressنقطة الانهيارمتى يسقط؟
اختبار الذروة Spikeقفزة حِملٍ مفاجئةماذا لو تضاعف الزوّار فجأة؟

٢المقاييس التي تهمّ

المقياسمعناه
زمن الاستجابة Response timeكم يستغرق طلبٌ واحد
الإنتاجية Throughputعدد الطلبات في الثانية
المئين p95 / p99زمن استجابة أبطأ 5% / 1% من الطلبات
معدّل الأخطاء Error rateنسبة الطلبات الفاشلة تحت الحِمل

المتوسط يخدع: قد يكون الزمن المتوسط جيّدًا بينما يعاني 5% من المستخدمين بطئًا شديدًا. لذلك نقيس المئين p95: «95% من الطلبات أسرع من هذا الحدّ». هو الأصدق لتجربة المستخدم.

٣نحلّل نتائج حِملٍ ببايثون

بعد تشغيل أداة الحِمل نحصل على أزمنة استجابة. نحلّلها: المتوسط، و p95، ونتحقّق من عتبة القبول:

main.py
# أزمنة استجابة (مللي ثانية) من اختبار حِمل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), "%")
Shell×
>>> %Run main.py
المتوسط: 153.1 مللي
p95: 450 مللي
ضمن العتبة (p95 < 300)؟ False
معدّل الأخطاء: 0.0 %
>>>

لاحظ الفرق: المتوسط معقول (~140)، لكن p95 قفز بسبب طلباتٍ بطيئة (400، 500). التحليل يكشف أن بعض المستخدمين يعانون رغم «معدّلٍ جيّد».

توقّع وتحقّق

اختبار الأداء نوعه:

عدد الطلبات في الثانية هو:

الأصدق لتجربة المستخدم:

أداة اختبار حِمل شائعة:

الخلاصة

تحدٍّ برمجي: حلّل الحِمل

متقدم

من أزمنة الاستجابة، اطبع المتوسط مقرّبًا لمنزلة واحدة، وعدد الطلبات التي تجاوزت 200 مللي (البطيئة).

المطلوب:
  • احسب المتوسط واطبعه (منزلة واحدة).
  • اطبع عدد القيم > 200.

ابدأ من هذا الكود، واضغط ▶ شغّل هنا لتكتب حلّك وتجرّبه مباشرة:

main.py
times = [90, 120, 250, 100, 300, 110, 95, 220]# اطبع المتوسط (منزلة واحدة) ثم عدد الطلبات > 200
المطلوب×
160.6
3
💡 تلميح 1
avg = sum(times) / len(times).
💡 تلميح 2
sum(1 for t in times if t > 200).

حاول بنفسك أولًا؛ للمسألة أكثر من حلّ صحيح.

main.py
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))
انتقل إلى تقييم الدرساختيار من متعدد، وصح وخطأ، وأكمل الفراغ، وتتبّع الناتج.ابدأ التقييم ←

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس