ما هو اختبار عقود API؟
عقد API هو الوصف المتفق عليه للواجهة — نقاط النهاية والمعاملات ومخططات الطلب والاستجابة ورموز الحالة — ويُكتب عادةً كمستند OpenAPI. اختبار العقد يقارن ما تعيده الخدمة فعلياً بذلك الوصف، فيُكشف الحقل المعاد تسميته أو النوع المتغيّر لدى المنتِج أو المستهلك قبل أن يعطّل الطرف الآخر.
اقرأ الدليل: ما هو اختبار API؟ وكيف تختبر REST API
كيفية استخدام مولّد حالات اختبار من OpenAPI
- الصق المواصفة (أو حمّل المثال).
- اختيارياً صفِّ النتائج على عمليات محدّدة واختر الفئات التي تريدها.
- اختر صيغة التصدير ثم ولّد.
- راجع الجدول، ثم انسخ التصدير أو نزّله لأداة إدارة الاختبارات لديك.
مزايا مولّد حالات اختبار من OpenAPI
- يحلّل OpenAPI 3.x وSwagger 2.0 بصيغة JSON أو YAML، مع حلّ مراجع $ref المحلية
- يولّد لكل عملية حالات المسار الطبيعي، والحقول المطلوبة المفقودة، والأنواع غير الصالحة، والقيم الحدّية، والمصادقة، وعدم العثور، والأخطاء الموثّقة، والطرق، وأنواع المحتوى
- أمثلة طلبات بقيم اصطناعية واقعية لمعاملات المسار والاستعلام والأجسام
- الأولويات والشروط المسبقة والخطوات والحالة المتوقّعة والنتيجة المتوقّعة في كل حالة
- تصفية حسب العملية والفئة؛ وتصدير بصيغة Markdown أو JSON أو CSV
مثال على مولّد حالات اختبار من OpenAPI
نقطة نهاية إنشاء كتاب
الإدخال:
المثال المحمّل، مع التصفية "POST /books": جسم مطلوب { title (1–200 حرف)، isbn (^[0-9]{13}$)، price 0–10000 }، وأمان bearer، والحالتان الموثّقتان 201 و409النتيجة:
24 حالة، منها:
TC-001 Create a book — valid request succeeds (201)
TC-003 Create a book — body without required field "title" (400)
TC-008 Create a book — wrong type for body field "price" (number → "abc") (400)
TC-017 Create a book — body "price" at below minimum (-1) (400)
TC-019 Create a book — no credentials (401)
TC-022 Create a book — documented 409: ISBN already exists (409)الأسئلة الشائعة حول مولّد حالات اختبار من OpenAPI
ما حالات الاختبار التي تُولَّد؟
لكل عملية: المسار الطبيعي، وحذف المعاملات الاختيارية، وغياب المعاملات وحقول الجسم المطلوبة، والأنواع غير الصالحة، والقيم الحدّية (الحدّ الأدنى/الأقصى والطول وعدد العناصر)، والوصول دون مصادقة/الممنوع، والمعرّفات غير المعروفة (404)، وحالات الخطأ الموثّقة، والطرق غير المدعومة (405)، وأنواع المحتوى غير المدعومة (415).
هل يمكنني التركيز على عملية واحدة؟
نعم — صفِّ حسب الطريقة أو المسار أو operationId أو الملخّص أو الوسم (مثل "POST /books" أو "createBook")، واختر الفئات التي تحتاجها.
ما الصيغ التي يمكنني التصدير إليها؟
Markdown (جاهز لصفحة ويكي أو طلب دمج)، وJSON (للأدوات)، وCSV (لجداول البيانات أو الاستيراد إلى أدوات إدارة الاختبارات). كما يمكن تنزيل الجدول بصيغة CSV.
هل يدعم Swagger 2.0؟
نعم. تُعالج معاملات الجسم وdefinitions وsecurityDefinitions في Swagger 2.0 جنباً إلى جنب مع OpenAPI 3.x.
ملاحظات تقنية
تُشتق الحالات الحدّية من minimum/maximum والحدود الحصرية وminLength/maxLength وmaxItems؛ وعندما لا تكون لحقل رقمي حدود، تُقترح قيم صفرية وسالبة وكبيرة جداً، ويحصل الحقل النصي العادي في الجسم على قيمة فارغة وأخرى من 10,000 حرف. ولا تُستخدم الكلمة المفتاحية pattern لاشتقاق الحالات، ولا تتجاوز الحالات الحدّية ثماني حالات لكل عملية، بترتيب الحقول. وتُقرأ متطلبات الأمان من مستوى العملية أو من المتطلبات العامة.
المراجع
- OpenAPI Specificationالمعيار لوصف واجهات REST: المسارات والعمليات والمعاملات والمخططات والاستجابات وأنظمة الأمان.
- JSON Schema Specificationالمفردات المستخدمة لوصف بنية مستندات JSON والتحقق منها (الأنواع والحقول المطلوبة والصيغ).
- RFC 9110: HTTP Semanticsمعاني أساليب HTTP وحقول الترويسات ورموز الحالة والتفاوض على المحتوى، بغضّ النظر عن إصدار البروتوكول.