ما الذي يقيسه اختبار تحميل API فعليًا

السعة: عدد الطلبات في الثانية قبل أن يتدهور زمن الاستجابة. وتُعرف الإجابة بتوليد حركة مرور متزامنة ومراقبة أزمنة الاستجابة ومعدلات الأخطاء.

الصحة: هل تحتوي الاستجابة على المحتوى الصحيح. وتُعرف الإجابة بالتحقق من أجسام الاستجابات مقابل توقّع محدد.

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

ما الذي تخبرك به مجموعة الاختبارات الوظيفية عن التحميل، وما الذي لا تخبرك به

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

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

ثلاثة أمور تستحق التحقق منها قبل إجراء اختبار التحميل أصلًا

هل هي صحيحة عند طلب واحد في الثانية

  • اختبار تحميل نقطة نهاية معطوبة يقيس مدى سرعتك في أن تكون مخطئًا.

هل يُنظّف بعده

  • تشغيل تحميل يُنشئ سجلات ويتركها سيُغيّر سلوك التشغيل التالي.

هل البيئة تمثيلية

  • نتائج التحميل الصادرة عن بيئة تحتوي على عُشر البيانات ليست تنبؤًا، بل مجرد رقم.

الصحة في ظل ظروف واقعية

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

الطرفية

npm install -g @testsprite/testsprite-cli
testsprite setup

الإعداد نفسه متاح في لوحة تحكم TestSprite إن كنت تفضّل عدم تثبيت أي شيء محليًا. أما بقية واجهة CLI فتجدها في مستودع CLI.

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

قراءة نتيجة التحميل بأمانة

تتعرّض نتائج التحميل للمبالغة في التفسير أكثر من أي مخرجات اختبار أخرى تقريبًا، وعادةً في اتجاهين.

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

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

شغّل اختبارات الصحة مع كل تغيير

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

  • GitHub App هو webhook تضبطه في لوحة تحكم TestSprite. يستمع إلى حدث النشر الذي ينتجه خط الإنتاج لديك بالفعل، فلا يتغيّر شيء في مستودعك.

  • GitHub Actions يضع الخطوة داخل سير عملك الخاص، ويُضبط من الطرفية.

موضع TestSprite حول تشغيل اختبار التحميل

يغطي TestSprite طبقة الصحة التي تجعل رقم السعة ذا معنى. فهو يختبر واجهة API مقابل السلوك الذي تتوقعه، بما في ذلك الحالات الحدّية وحالات التصريح، ويُبلّغ عمّا عاد فعليًا لا عن سرعة عودته فحسب.

تُولَّد التغطية من جولة اكتشاف على الخدمة العاملة إضافة إلى أي مواصفات لديك، فتُدرَج المدخلات غير المألوفة دون أن يكتبها أحد. يُبقي Auto-Authentication الجلسات حيّة طوال التشغيل، وتنقل Dynamic Variables القيم بين الاستدعاءات، وتشتقّ Dependency Chains ترتيب التنفيذ مما تحتاجه كل حالة وما تنتجه، ويزيل Auto-Cleanup ما أنشأه التشغيل بالضبط.

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

هل يُجري TestSprite اختبارات التحميل؟

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

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

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

أيهما يأتي أولًا؟

الصحة. فاختبار تحميل نقطة نهاية تُعيد نتيجة خاطئة يُنتج رقمًا واثقًا لا يدل على شيء.

كم مرة ينبغي أن نُجري اختبار التحميل؟

قبل الإصدارات وبعد التغييرات المعمارية. فاختبار التحميل المستمر مكلف ونادرًا ما يخبرك بجديد بين هاتين اللحظتين.

وماذا عن اختبار التحميل داخل CI؟

قد ينجح فحص تحميل بحجم اختبار الدخان. أما اختبار السعة الكامل داخل CI فيعني عادةً إما مستوى تحميل بلا معنى وإما خط إنتاج بطيئًا جدًا.

الخلاصة

السريع والخاطئ يظل خاطئًا.

يجيب اختبار تحميل API عن سؤال السعة، ولا يجيب عمّا إذا كانت الاستجابات صحيحة، واختبار التحميل الذي يفحص رموز الحالة وحدها سينجح بينما لا تُعيد واجهة API أي شيء مفيد. استخدم أداة مخصّصة للسعة، وتحقق من الصحة بشكل منفصل، وابدأ بالصحة أولًا.