اختبار الحمل

اختبار الحمل (Load Testing) نوع من اختبار الأداء يفحص سلوك النظام تحت الحمل المتوقع أن يتحمّله. ويصفه ISTQB بأنه اختبار تحت أحمال متوقعة، من الاستخدام المنخفض إلى المعتاد إلى الذروة، يولّدها عدد مضبوط من المستخدمين أو العمليات المحاكاة. والسؤال محدد: عند الحمل المتوقع، هل تبقى أزمنة الاستجابة ومعدل الأخطاء واستهلاك الموارد ضمن ما اتُّفق عليه؟

مثال: بلغ متوسط أكثر ساعة ازدحاماً في متجر إلكتروني العام الماضي ⁦100⁩ طلب في الثانية، ويتوقع قسم الأعمال نمواً بنسبة ⁦20%⁩. يصعد اختبار الحمل تدريجياً إلى ⁦120⁩ طلباً في الثانية، ويثبت عندها ⁦30⁩ دقيقة، ويتحقق مثلاً من أن ⁦p95⁩ للبحث يبقى ضمن ⁦300⁩ مللي ثانية وأن أقل من ⁦0.5%⁩ من الطلبات تفشل. أما تجاوز الذروة المتوقعة فهو اختبار الإجهاد (Stress Testing)، موضوع الدرس التالي.

لماذا يهم

كثير من عيوب الأداء لا يظهر إلا تحت حمل متزامن وأحجام بيانات واقعية: مجمّع اتصالات (Connection pool) ينفد، أو قفل تنتظره مئة عملية دفع، أو استعلام سريع على عشرة صفوف وبطيء على مليون صف. والاختبارات الوظيفية ترسل طلباً واحداً في كل مرة، وعلى بيانات اختبار قليلة عادةً، فلا تصادف هذه العيوب. وإن اكتشفتها أول ذروة حقيقية، فالثمن مبيعات ضائعة أو حجوزات فاشلة أو انقطاع في الخدمة.

وبالنسبة إلى المختبِر، يحوّل اختبار الحمل عبارة «يجب أن يكون النظام سريعاً» إلى دليل: حمل محدد، ونتائج مقيسة، وحكم وفق معايير اتُّفق عليها مسبقاً. وهو يدعم قرار الإصدار، ويكشف انحدار الأداء، ويعطي المطورين تشغيلاً قابلاً للتكرار بدلاً من شكوى مبهمة.

الحمل المتوقع: الرقم الذي تختبر عنده

الحمل المتوقع هو الحركة التي يجب أن يتحمّلها النظام، ويُوصف بنموذج عبء العمل (Workload model) من درس المستخدمين المتزامنين ونماذج عبء العمل: أيّ المعاملات، وبأيّ مزيج، وبأيّ معدل. ثبّته قبل كتابة السكربت، وسجّل مصدر كل رقم.

  • بيانات الإنتاج: أكثر ساعة ازدحاماً في الأشهر الأخيرة لكل معاملة، من أدوات التحليلات أو سجلات الوصول أو المراقبة، لا المجموع اليومي موزّعاً على ⁦24⁩ ساعة.
  • التوقعات: الحملات التسويقية والمواسم ويوم صرف الرواتب وفترات التسجيل. اضرب الذروة المقيسة في معامل النمو المتفق عليه.
  • المستويات: اختبر على الأقل ساعة الازدحام المعتادة والذروة المتوقعة، وكلاهما حمل صُمّم النظام ليتحمّله.
  • لا توجد بيانات سابقة بعد: قدّر الحمل من عدد المستخدمين وعدد مرات تنفيذهم للعمليات، واكتب التقدير في الخطة على أنه افتراض.

جرّبها: مولّد بيانات اختبار الأداء

مخطط الحمل: الصعود التدريجي والحالة المستقرة والهبوط التدريجي

يصف مخطط الحمل (Load profile) كيف يتغيّر الحمل المطبّق مع الزمن. ومن مراحله الثلاث، واحدة فقط هي مرحلة القياس. وفي مثال المتجر: صعود إلى ⁦120⁩ طلباً في الثانية خلال ⁦10⁩ دقائق، ثم ثبات ⁦30⁩ دقيقة، ثم هبوط خلال ⁦5⁩ دقائق.

  • الصعود التدريجي (Ramp-up): يرتفع الحمل تدريجياً كما تفعل الحركة الحقيقية، بينما تصل الذاكرة المؤقتة ومجمّعات الاتصالات والتوسع التلقائي إلى وضعها المعتاد. والبدء بالحمل الكامل يصنع ذروة مفاجئة لم يطلبها أحد، ويقيس نظاماً بارداً.
  • الحالة المستقرة (Steady state): يُثبَّت الحمل عند الهدف. ويكون النظام مستقراً عندما تساوي الإنتاجية (Throughput) الحمل المطبّق وتبقى أزمنة الاستجابة واستهلاك الموارد ثابتة؛ أما زمن استجابة يواصل الارتفاع والحمل ثابت فيعني أن العمل يتراكم في طابور، وهذه نتيجة تُسجَّل. ثبّت الحمل مدة تكفي لعينات كثيرة من كل معاملة، وهي عادةً عشرات الدقائق؛ أما التشغيل لساعات طويلة فهو اختبار التحمّل (Soak Testing).
  • الهبوط التدريجي (Ramp-down): يعود الحمل إلى الصفر، ويجب أن تعود أزمنة الاستجابة والطوابير واستهلاك الموارد إلى خط الأساس. فالنظام الذي يبقى بطيئاً بعدها لم يتعافَ.
يصعد اختبار الحمل للمتجر تدريجياً إلى الذروة المتوقعة البالغة ⁦120⁩ طلباً في الثانية خلال ⁦10⁩ دقائق، ويثبت عندها ⁦30⁩ دقيقة، ثم يهبط خلال ⁦5⁩ دقائق؛ والحالة المستقرة وحدها يُحكم عليها وفق معايير النجاح.
  1. اختبار الحمل عند الذروة المتوقعةالمتجر الإلكتروني، الإصدار ⁦4.2⁩، بمزيج الإنتاج من البحث وصفحة المنتج وإتمام الشراء

    الخط المرجعي:الذروة المتوقعة: ⁦120⁩ طلباً في الثانية (⁦100⁩ في العام الماضي × نمو ⁦1.2⁩)

    1. 1الصعود التدريجي 0–10 min⁦0 → 120⁩ طلباً في الثانية؛ إحماء لا يُحكم عليه
    2. 2الحالة المستقرة 10–40 minثبات عند ⁦120⁩ طلباً في الثانية؛ يُحكم عليها وفق معايير النجاح
    3. 3الهبوط التدريجي 40–45 min⁦120 → 0⁩ طلب في الثانية؛ تحقّق من العودة إلى خط الأساس

رُسمت مرحلتا الصعود والهبوط خطين مستقيمين؛ وقد ترفع الأداة الحمل على خطوات صغيرة بدلاً من ذلك.

جرّبها: مولّد اختبارات الطلبات المتزامنة

معايير النجاح: يُتفق عليها قبل التشغيل

معايير النجاح (Pass criteria) هي ما يمنح اختبار الحمل نتيجته المتوقعة. وتأتي من المتطلبات غير الوظيفية أو أهداف مستوى الخدمة (SLO) أو معايير القبول، وتغطي خاصية كفاءة الأداء في ISO/IEC 25010 (السلوك الزمني، واستخدام الموارد، والسعة)، ويُتفق عليها مع مالك المنتج والمطورين قبل التشغيل الأول، لا بعد رؤية الأرقام.

  • زمن الاستجابة لكل معاملة بالمئينات (Percentiles): ⁦p95 ≤ 300 ms⁩ للبحث و⁦p95 ≤ 800 ms⁩ لإتمام الشراء.
  • معدل الأخطاء: استجابات HTTP ⁦5xx⁩ واستجابات ⁦4xx⁩ غير المتوقعة وانتهاء المهلة وأخطاء الاتصال وفحوص المحتوى الفاشلة، أقل من ⁦0.5%⁩ مثلاً.
  • الإنتاجية المتحققة: ⁦95%⁩ على الأقل من الحمل المخطط البالغ ⁦120⁩ طلباً في الثانية. فالتشغيل الذي لم يبلغ الهدف لا يثبت شيئاً عنه.
  • سقوف للموارد تحفظ هامش أمان، مثل استخدام معالج قاعدة البيانات أقل من ⁦75%⁩.
  • صلاحية الاختبار نفسه: لم يكن مولّد الحمل (Load generator) مُثقلاً (المعالج أقل من ⁦80%⁩)، وفُحص محتوى الاستجابات لا رمز الحالة ⁦200⁩ وحده.
  • النافذة: احكم على الحالة المستقرة فقط. فأدوات الحمل كثيراً ما تحسب عتباتها المدمجة على كل العينات، بما فيها مرحلتا الصعود والهبوط، لذا اقتصر أولاً على عينات نافذة الحالة المستقرة.

التخطيط لاختبار الحمل وتنفيذه

اكتب خطة قصيرة وراجعها مع أصحاب النظام والبيئة، ثم نفّذ على خطوات صغيرة، حتى تثق بالسكربت والبيانات والقياسات قبل التشغيل الكامل.

  • الخطة: النطاق، والمعاملات ومزيجها، ومستويات الحمل، ومخطط الحمل، ومعايير النجاح، ومعايير الإيقاف، مثل «توقّف إذا تجاوزت الأخطاء ⁦5%⁩ لمدة دقيقتين».
  • البيئة والبيانات: حجم وإعدادات تشبه الإنتاج، دون مشاركة أثناء التشغيل، مع المراقبة؛ وما يكفي من المستخدمين والمنتجات المختلفة لتتصرف الذاكرة المؤقتة والقيود الفريدة بواقعية؛ ومزوّدو الدفع والرسائل النصية بمحاكاة أو في بيئاتهم التجريبية (Sandbox).
  • الإذن: لا تطبّق الحمل إلا على أنظمة تملكها أو لديك إذن مكتوب باختبارها، ومن أجهزة توليد حمل منفصلة، وأبلغ فريق العمليات قبل البدء.
  • التشغيل التمهيدي (Smoke run) ثم الكامل: مستخدم افتراضي أو اثنان لبضع دقائق يثبتان أن السكربت يسجّل الدخول ويستخدم البيانات ويتلقى استجابات صحيحة؛ ثم خط أساس بحمل منخفض، ثم مخطط الحمل كاملاً وأنت تراقب لوحات المتابعة.
  • التقييم والتكرار: احكم على الحالة المستقرة، وكرّر التشغيل لتتأكد أن النتيجة قابلة للتكرار، وسجّل نسخة البناء والإعدادات والبيانات والنافذة الزمنية.

جرّبها: مولّد بيانات اختبار التحميل جرّبها: محلّل زمن الاستجابة جرّبها: قياس أداء طلبات HTTP

مثال تطبيقي: متجر إلكتروني قبل موسم التخفيضات

يُختبر الإصدار ⁦4.2⁩ قبل موسم تخفيضات. الذروة المتوقعة ⁦100 × 1.2 = 120⁩ طلباً في الثانية: ذروة العام الماضي مضروبة في معامل النمو. الخطة ونتائج التشغيل الأول في الكتلة أدناه، ويقرؤها المختبِر بهذا الترتيب:

  • الصلاحية أولاً: تحققت إنتاجية ⁦119.6⁩ طلباً في الثانية، وكان مولّد الحمل عند ⁦41%⁩ من المعالج، فيمكن الوثوق بالأزمنة.
  • المعايير: ينجح البحث ومعدل الأخطاء؛ ويفشل إتمام الشراء، إذ بلغ ⁦p95⁩ لديه ⁦1,140⁩ مللي ثانية مقابل ⁦800⁩.
  • الاتجاه: بدأ ⁦p95⁩ لإتمام الشراء قرب ⁦600⁩ مللي ثانية وارتفع كل دقيقة والحمل ثابت، أي أن طلبات إتمام الشراء كانت تتراكم في طابور.
  • الإبلاغ والتأكيد: تقرير عيب يذكر مستوى الحمل والنافذة والمقياس والرسوم البيانية ونسخة البناء. ويتتبّع المطورون السبب إلى مجمّع اتصالات قاعدة البيانات في خدمة إتمام الشراء، وسقفه ⁦20⁩ اتصالاً؛ وبعد الإصلاح يُعاد تشغيل المخطط نفسه بالبيانات نفسها (اختبار التأكيد) وتُقارن النتائج بالتشغيل الأول.
Load test plan: online store, release 4.2, perf environment
Expected peak:  100 req/s (busiest hour last year) x 1.2 growth = 120 req/s
Mix:            search 70 %, product page 20 %, checkout 10 %
Profile:        ramp-up 0 -> 120 req/s in 10 min, steady state 30 min
                (minutes 10-40), ramp-down 5 min
Pass criteria:  search p95 <= 300 ms, checkout p95 <= 800 ms,
                error rate < 0.5 %, throughput >= 114 req/s
Validity:       load generator CPU < 80 %, response content checked

Run 1, steady state (min 10-40)   Target      Result      Verdict
  throughput                      >= 114      119.6       pass
  search p95                      <= 300 ms   210 ms      pass
  checkout p95                    <= 800 ms   1,140 ms    fail
  error rate                      < 0.5 %     0.2 %       pass
  load generator CPU (max)        < 80 %      41 %        valid

أخطاء شائعة

  • تخمين الحمل («لنجرّب ⁦1,000⁩ مستخدم») بدلاً من استخراجه من بيانات الإنتاج والتوقعات.
  • البدء بالحمل الكامل دون صعود تدريجي، والإبلاغ عن ذروة البداية على أنها أداء النظام.
  • الحكم على التشغيل كله بما فيه مرحلتا الصعود والهبوط، أو تحديد معايير النجاح بعد رؤية النتائج.
  • عدّ كل استجابة HTTP ⁦200⁩ نجاحاً، فتجعل صفحاتُ الخطأ السريعة الأرقامَ تبدو جيدة.
  • إعلان النجاح دون التحقق من بلوغ الإنتاجية المخطط لها ومن أن مولّد الحمل لم يكن عنق الزجاجة.
  • التشغيل مرة واحدة في بيئة مشتركة، دون تسجيل نسخة البناء والإعدادات والبيانات.

من منظور ضمان الجودة

تُجرى اختبارات الحمل قبل الإصدارات التي تنطوي على مخاطر أداء، وقبل الذروات المعروفة مثل موسم التخفيضات أو يوم صرف الرواتب أو فترة التسجيل، وبعد تغييرات البنية المعمارية أو البنية التحتية أو الاستعلامات المهمة؛ وتشغّل فرق كثيرة أيضاً اختبار حمل أصغر بانتظام في خط الأنابيب (Pipeline) لتكشف الانحدار. والحمل المتوقع يأتي من مالك المنتج ومن فريق العمليات أو التحليلات، والبيئة والمراقبة من فريق العمليات، والمعايير يُتفق عليها مع مالك المنتج والمطورين.

اسأل مبكراً: ما أكثر ساعة ازدحاماً رأيناها، وماذا نتوقع بعدها؟ أيّ المعاملات أهم؟ ما المقبول عند تلك الذروة؟ أيّ الخدمات الخارجية ستتلقى حركة، ومن يجب إبلاغه؟ وقدّم حكماً لكل معيار مع دليله ونافذة الحالة المستقرة؛ وكل معيار فاشل يصبح تقرير عيب يذكر مستوى الحمل والمقياس والرسوم البيانية.

تمرين عملي

خطط لاختبار حمل لواجهة حجز واحكم على نتيجته

المطلوب

لدى الواجهة البرمجية لحجز المواعيد في سلسلة عيادات معاملتان رئيسيتان: البحث عن المواعيد المتاحة وإنشاء حجز. تعرض المادة أدناه أكثر ساعة ازدحاماً في الأشهر الثلاثة الأخيرة وأول تشغيل كامل. ويتوقع قسم الأعمال زيادة الحركة بنسبة ⁦25%⁩ في الربع القادم. المتطلب: عند الذروة المتوقعة ⁦p95 ≤ 400 ms⁩ للبحث عن المواعيد، و⁦p95 ≤ 1,000 ms⁩ للحجز، وطلبات فاشلة أقل من ⁦1%⁩.

خطط لاختبار الحمل، ثم قرّر هل نجح التشغيل الأول.

المادة
Busiest hour, last 3 months (production analytics)
  GET  /api/slots       36,000 requests
  POST /api/bookings     7,200 requests

First full run, steady state window (minutes 10-40)
  achieved throughput        11.2 req/s
  slot search p95            280 ms
  booking p95                720 ms
  error rate                 0.4 %
  load generator CPU (max)   97 %
الخطوات
  1. حوّل أكثر ساعة ازدحاماً إلى الذروة المتوقعة بالطلبات في الثانية، لكل معاملة وللمجموع.
  2. ارسم مخطط الحمل مع مدة كل مرحلة.
  3. اكتب معايير النجاح وفحوص الصلاحية والنافذة التي تنطبق عليها.
  4. اذكر ما يجب تجهيزه قبل التشغيل الكامل.
  5. احكم على التشغيل الأول وقرّر الخطوة التالية.
إظهار الإجابة النموذجية
الإجابة النموذجية

الذروة المتوقعة: البحث ⁦36,000 / 3,600 = 10⁩ طلبات في الثانية، والحجز ⁦7,200 / 3,600 = 2⁩، أي ⁦12⁩؛ ومع نمو ⁦25%⁩ تصبح ⁦12.5⁩ و⁦2.5⁩، أي ⁦15⁩ طلباً في الثانية في المجموع.

مخطط الحمل: تشغيل تمهيدي أولاً، ثم صعود إلى ⁦15⁩ طلباً في الثانية خلال ⁦10⁩ دقائق، وثبات ⁦30⁩ دقيقة (من الدقيقة ⁦10⁩ إلى الدقيقة ⁦40⁩)، ثم هبوط خلال ⁦5⁩ دقائق.

المعايير على الحالة المستقرة: ⁦p95 ≤ 400 ms⁩ للبحث، و⁦p95 ≤ 1,000 ms⁩ للحجز، وأخطاء أقل من ⁦1%⁩ تُحتسب فيها الحجوزات التي بلا رقم تأكيد. الصلاحية: إنتاجية لا تقل عن ⁦14.25⁩ طلباً في الثانية (⁦95%⁩)، واستخدام معالج مولّد الحمل أقل من ⁦80%⁩.

التجهيز: آلاف المرضى الاختباريين والمواعيد المتاحة حتى لا تتصادم الحجوزات، وإعادة ضبط بين التشغيلات، ومحاكاة مزوّد الرسائل النصية، وتشغيل المراقبة، وإبلاغ فريق العمليات.

الحكم: غير حاسم، لا ناجح. فأزمنة الاستجابة والأخطاء ضمن المعايير، لكن التشغيل لم يبلغ إلا ⁦11.2⁩ من ⁦15⁩ طلباً في الثانية، وعمل مولّد الحمل عند ⁦97%⁩ من المعالج، فكان المولّد هو عنق الزجاجة، وربما شوّهت تأخيراته الأزمنة المقيسة. أضف سعة للمولّد وكرّر التشغيل.

أسئلة شائعة

ما الفرق بين اختبار الحمل واختبار الإجهاد؟

يطبّق اختبار الحمل الحمل المتوقع حتى الذروة المتوقعة ويتحقق من معايير النجاح. أما اختبار الإجهاد فيتجاوز تلك الذروة عمداً ليكشف أين ينهار النظام وكيف، وهل يتعافى. وبعض المصادر يرسم الحد في موضع آخر: فتوثيق Grafana k6 يسمّي الاختبار عند الحمل المعتاد اختبار الحمل المتوسط (Average-load test)، ويعدّ الحمل الأعلى من المتوسط المعتاد اختبار إجهاد. لذا اذكر في خطتك المستويات التي تختبرها.

كم يجب أن تدوم الحالة المستقرة؟

مدة تكفي لجمع عينات كثيرة من كل معاملة، حتى النادرة منها، ولمعرفة ما إذا كانت أزمنة الاستجابة واستهلاك الموارد ثابتة أم تتجه صعوداً. وفي اختبار الحمل تكون عادةً عشرات الدقائق. فإن احتجت إلى معرفة سلوك النظام على مدى ساعات طويلة، فذلك اختبار تحمّل.

هل أضبط عدد المستخدمين الافتراضيين أم عدد الطلبات في الثانية؟

كلاهما يصلح إذا تحققت من الإنتاجية المتحققة. فمع عدد ثابت من المستخدمين الافتراضيين (النموذج المغلق) ينتظر كل منهم استجابته قبل أن يرسل الطلب التالي، فإذا تباطأ النظام انخفض معدل الطلبات وطبّق التشغيل حملاً أقل من المخطط. ويمكن للأدوات أيضاً أن تستهدف معدل وصول مباشرةً (النموذج المفتوح)، مثل منفّذات معدل الوصول (Arrival-rate executors) في k6 أو مؤقّت الإنتاجية في JMeter، بشرط توفر ما يكفي من المستخدمين الافتراضيين للحفاظ على ذلك المعدل. وقانون ليتل، من درس المستخدمين المتزامنين ونماذج عبء العمل، يحوّل بين عدد المستخدمين والمعدلات.

هل يمكنني تشغيل اختبار حمل على بيئة الإنتاج؟

فقط بموافقة صريحة من أصحاب النظام، وفي نافذة زمنية مخططة، مع حماية المستخدمين الحقيقيين وبياناتهم، وفريق العمليات يراقب. ومعظم اختبارات الحمل تُشغَّل في بيئة اختبار تشبه الإنتاج. ولا تطبّق حملاً أبداً على نظام لا تملكه أو ليس لديك إذن مكتوب باختباره، بما في ذلك الخدمات الخارجية التي يستدعيها نظامك.

المراجع

  • Certified Tester Performance Testing (CT-PT)ISTQB · 2018منهج ISTQB التخصصي لاختبار الأداء: المفاهيم الأساسية وقياسات الأداء وأنشطة الاختبار ومهامه والأدوات.
  • ISTQB GlossaryISTQBالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
  • Load test types — Grafana k6 documentationGrafana Labsتعريفات أنواع اختبار الحمل الشائعة — الاختبار الدخاني والحمل المتوسط والإجهاد والتحمّل الطويل (Soak) والذروة المفاجئة (Spike) ونقطة الانكسار — وما يُراد من كلٍّ منها كشفه.
  • ISO/IEC 25010:2023 — Systems and software Quality Requirements and Evaluation (SQuaRE) — Product quality modelISO/IEC · 2023نموذج جودة المنتج: الملاءمة الوظيفية وكفاءة الأداء والتوافق وقابلية التفاعل والموثوقية والأمان وقابلية الصيانة والمرونة.

تدرّب بأدوات متقن

ولّد مدخلات اختبار الأداء بتوزيعات واقعية: أزمنة التفكير، ومزيج الطلبات، وأحجام الحمولات، ومنحنيات التدرّج.

الأداء

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

الأداء

شغّل قياس أداء صغيراً وآمناً على نقطة نهاية عامة (بعدد طلبات وتزامن محدودَين) واحصل على الإنتاجية ومئينيات زمن الاستجابة.

الأداء

للتعمّق أكثر

تقدّمك في هذا الموضوع

جزء من مسار تعلم ضمان الجودة