المستويات الأربعة للاختبار الوظيفي لـ API
1. الحالة
هل أعاد 200.
يكشف انقطاعات الخدمة. ويمرّ بلا اعتراض على نتيجة فارغة كان ينبغي أن تحتوي سجلًا.
2. البنية
هل الحقول المتوقعة موجودة بالأنواع المتوقعة.
يكشف انجراف المخطط. ولا يقول شيئًا عن صحة القيم.
3. القيمة
هل الإجمالي هو المجموع فعلًا، وهل الحالة هي ما ينبغي أن ينتجه هذا الإجراء.
هنا يبدأ التقاط العيوب الحقيقية.
والمستوى الرابع هو العلاقة: بعد إنشاء طلب، هل يُظهره جلبُ بيانات العميل. أغلب العيوب المثيرة للاهتمام تسكن بين استدعاءين لا داخل استدعاء واحد، والمستوى الرابع هو الوحيد الذي ينظر هناك.
لماذا تتوقف مجموعات الاختبار عند المستوى الثاني
لأن المستويين الثالث والرابع يحتاجان إلى معرفة ما يعنيه الصواب، وهو ما يستلزم أن يقرره أحد. فالحالة والبنية يمكن اشتقاقهما آليًا من المواصفات، أما القيمة والعلاقة فتتطلبان حكمًا على المنتج.
وهذا أصعب فعلًا، وهو أيضًا كامل القيمة. فمجموعة اختبارات لا تعبّر أبدًا عن قاعدة من قواعد المنتج إنما تتحقق من أن الخدمة متصلة بطريقة معقّدة.
الحالة السلبية التي يتخطاها الناس
لكل نقطة نهاية، اسأل ما الذي ينبغي رفضه، ثم أكّد أنه يُرفض فعلًا. قيم خارج النطاق، وحقول مطلوبة مفقودة، ومعرّف يخص شخصًا آخر. والخدمات التي تعيد 200 مع كائن خطأ في جسم الاستجابة شائعة بما يكفي لأن مجموعة اختبارات لا تدرك هذا النمط ستظل تبلّغ عن نجاح إلى الأبد.
الأساس الذي تحتاجه مجموعة الاختبارات
أربعة أمور تحدد ما إذا كانت مجموعة اختبارات API ستصمد سنتها الأولى: جلسات تنتهي صلاحيتها، وقيم لا توجد إلا أثناء التشغيل، واستدعاءات يعتمد بعضها على بعض، وسجلات لا ينظّفها أحد. تتولى TestSprite هذه الأمور عبر Auto-Authentication وDynamic Variables وDependency Chains وAuto-Cleanup، الموصوفة في توثيق اختبار API.
وضبط هذه الأمور على نحو صحيح هو ما يتيح لك توجيه انتباهك إلى المستويين الثالث والرابع بدلًا من البنية التحتية.
إخراج التغطية من المياه الضحلة
تبدأ الخطط المولَّدة من مواصفة أو من جولة اكتشاف، وتتضمن فئات الاختبار الوظيفي والمخطط والتفويض ومعالجة الأخطاء والحدود، فتوجد الحالات السلبية افتراضيًا بدلًا من أن تتوقف على تذكّر أحدهم لها في نهاية دورة التطوير.
الطرفية
npm install -g @testsprite/testsprite-cli
testsprite setup
والإعداد نفسه متاح في لوحة تحكم TestSprite إن كنت تفضّل عدم تثبيت أي شيء محليًا. أما بقية واجهة CLI فتجدها في مستودع CLI.
اختيار نقاط النهاية التي تستحق المستوى الرابع
تأكيدات العلاقة هي الأعلى قيمة والأعلى تكلفة، لذا لا ينبغي أن تكون في كل مكان. والمعيار الذي ينجح هو أن تسأل عن كلفة الإجابة الخاطئة.
كل ما يحرّك أموالًا، أو يغيّر صلاحيات، أو يُبنى عليه قرار يتخذه شخص آخر، يحصل على المستوى الرابع. طلب موجود لكنه غير مرتبط بعميل، ومنحُ صلاحية نجح من جهة واحدة فقط، وتقرير متسق داخليًا لكنه يخالف السجلات الأساسية. هذه هي الإخفاقات الباهظة والصامتة.
أما نقاط النهاية التقريرية للقراءة فقط، وفحوص الصحة، وكل ما يراجع إنسانٌ مخرجاته فورًا، فلا تحتاج إلى ذلك. والتعمّد في هذا هو ما يُبقي المجموعة سريعة بما يكفي ليشغّلها الناس.
شغّلها مع كل تغيير
مساران، والاختيار بينهما يتعلق حقًا بمن يملك المسار. فربط GitHub App من لوحة التحكم لا يتطلب أي تغيير في مستودعك على الإطلاق، لأنه يتفاعل مع عملية النشر التي يصدرها بناؤك أصلًا. وإضافة خطوة GitHub Actions تضع الفحص داخل المستودع حيث يُراجَع كبقية عملية البناء.
كيف تنقلك TestSprite إلى ما بعد المستوى الثاني
تتضمن الخطط المولَّدة الحالات السلبية افتراضيًا، عبر فئات الاختبار الوظيفي والمخطط والتفويض ومعالجة الأخطاء والحدود، وهي النقطة التي تنفد عندها طاقة معظم المجموعات المكتوبة يدويًا. وأنت تصقلها بلغة عادية، وفي هذا الصقل تدخل معرفتك بالمنتج إلى المجموعة.
مستويا القيمة والعلاقة هما الجديران بانتباهك، وهما أيضًا اللذان يحتاجان إلى من يعرف المنتج. تُبقي Auto-Authentication الجلسات حية طوال التشغيل، وتنقل Dynamic Variables القيم بين الاستدعاءات، وتشتق Dependency Chains ترتيب التنفيذ مما تحتاجه كل حالة وتنتجه، ويزيل Auto-Cleanup ما أنشأه التشغيل بالضبط. فيذهب وقتك إلى معنى الصواب بدلًا من البنية التحتية.
وما تحصل عليه هو مجموعة اختبارات تؤكد على أجسام الاستجابات وعلى العلاقات بين الاستدعاءات، وتعمل مع كل تغيير، بدلًا من مسار أخضر يثبت أن الخدمة متصلة.
هل التأكيد على رمز الحالة عديم الفائدة؟
لا، إنه مجرد الحد الأدنى. أبقِ عليه وأضف تأكيدًا واحدًا على الأقل على مستوى القيمة لكل نقطة نهاية مهمة.
كيف نقرر ما يعنيه الصواب؟
اسأل عمّا يَعِد به المنتج، لا عمّا تفعله الشيفرة. وإن لم يستطع أحد الإجابة عن نقطة نهاية بعينها، فهذا الغموض نفسه يستحق الإظهار.
هل ينبغي أن تحصل كل نقطة نهاية على المستويات الأربعة؟
لا. احتفظ بالمستويين الثالث والرابع لنقاط النهاية التي تترتب على القيمة الخاطئة فيها عواقب. أما نقاط النهاية التقريرية وفحوص الصحة فلا تحتاج إليهما.
ماذا عن التأكيدات المولَّدة؟
مفيدة للمستويين الأول والثاني، فهما آليان. أما المستويان الثالث والرابع فيستفيدان من المراجعة، لأن هناك تدخل معرفة المنتج.
كم حالة سلبية لكل نقطة نهاية؟
حالة أو حالتان مهمتان أفضل من عشر تُعدّد كل مدخل سيئ ممكن. اختر حالات الرفض التي قد يثيرها عميل حقيقي.
الحالة والبنية هما الحد الأدنى، لا المهمة.
للاختبار الوظيفي لـ API أربعة مستويات من التأكيد، ومعظم المجموعات تتوقف عند الثاني. وتأكيدات القيمة والعلاقة هي حيث تُلتقط العيوب، والحالة السلبية هي التي يتخطاها الناس.