اختبار الحمل
اختبار الحمل (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): يعود الحمل إلى الصفر، ويجب أن تعود أزمنة الاستجابة والطوابير واستهلاك الموارد إلى خط الأساس. فالنظام الذي يبقى بطيئاً بعدها لم يتعافَ.
- اختبار الحمل عند الذروة المتوقعةالمتجر الإلكتروني، الإصدار 4.2، بمزيج الإنتاج من البحث وصفحة المنتج وإتمام الشراء
الخط المرجعي:الذروة المتوقعة: 120 طلباً في الثانية (100 في العام الماضي × نمو 1.2)
- 1الصعود التدريجي 0–10 min0 → 120 طلباً في الثانية؛ إحماء لا يُحكم عليه
- 2الحالة المستقرة 10–40 minثبات عند 120 طلباً في الثانية؛ يُحكم عليها وفق معايير النجاح
- 3الهبوط التدريجي 40–45 min120 → 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 %- حوّل أكثر ساعة ازدحاماً إلى الذروة المتوقعة بالطلبات في الثانية، لكل معاملة وللمجموع.
- ارسم مخطط الحمل مع مدة كل مرحلة.
- اكتب معايير النجاح وفحوص الصلاحية والنافذة التي تنطبق عليها.
- اذكر ما يجب تجهيزه قبل التشغيل الكامل.
- احكم على التشغيل الأول وقرّر الخطوة التالية.
إظهار الإجابة النموذجية
الذروة المتوقعة: البحث 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 التخصصي لاختبار الأداء: المفاهيم الأساسية وقياسات الأداء وأنشطة الاختبار ومهامه والأدوات.
- ISTQB Glossaryالتعريفات القياسية لمصطلحات الاختبار — حالة الاختبار واختبار الانحدار والخطورة والأولوية وتحليل القيم الحدّية وغيرها.
- Load test types — Grafana k6 documentationتعريفات أنواع اختبار الحمل الشائعة — الاختبار الدخاني والحمل المتوسط والإجهاد والتحمّل الطويل (Soak) والذروة المفاجئة (Spike) ونقطة الانكسار — وما يُراد من كلٍّ منها كشفه.
- ISO/IEC 25010:2023 — Systems and software Quality Requirements and Evaluation (SQuaRE) — Product quality modelنموذج جودة المنتج: الملاءمة الوظيفية وكفاءة الأداء والتوافق وقابلية التفاعل والموثوقية والأمان وقابلية الصيانة والمرونة.
تدرّب بأدوات متقن
ولّد سكربتات اختبار التزامن (k6 وJMeter JMX وLocust وArtillery وNode.js) بإعدادات افتراضية آمنة لنقطة نهاية مستهدفة.
ولّد مدخلات اختبار الأداء بتوزيعات واقعية: أزمنة التفكير، ومزيج الطلبات، وأحجام الحمولات، ومنحنيات التدرّج.
ولّد مجموعات معاملات كبيرة (مستخدمين ورموزاً ومعرّفات وحمولات) لاختبارات التحميل في k6 وJMeter وGatling وLocust.
قِس زمن استجابة نقطة نهاية عبر عدة عيّنات: الحد الأدنى والأقصى والمتوسط والوسيط وp95.
شغّل قياس أداء صغيراً وآمناً على نقطة نهاية عامة (بعدد طلبات وتزامن محدودَين) واحصل على الإنتاجية ومئينيات زمن الاستجابة.
للتعمّق أكثر
تقدّمك في هذا الموضوع
سجّل الدخول لتتابع تقدّمك
علّم الموضوعات مكتملة، وتابع من حيث توقفت، وافتح امتحانات التخصص.