تعمل معظم اختبارات API كسلسلة خطية: تسجيل الدخول، ثم الدفع، ثم التحقق من الإيصال. لكن إذا فشل تسجيل الدخول برمز 401، فلن يكون تنفيذ طلب الدفع مفيدًا، وقد ينتج عنه فشل ثانٍ يخفي سبب المشكلة الحقيقي. الحل هو أن يقرأ السيناريو استجابة تسجيل الدخول، ويقرر هل يستمر أم ينتقل إلى مسار فشل واضح.
هذا النوع من القرار هو تحكم في التدفق (Flow Control). في هذا الدليل ستبني تفرع if/else داخل سيناريو اختبار في Apidog: نفّذ تسجيل الدخول، تحقق من رمز الحالة، ثم نفّذ الدفع فقط إذا نجحت المصادقة. إذا كنت جديدًا على سيناريوهات Apidog، راجع كيفية كتابة سيناريو اختبار باستخدام Apidog. وللمفاهيم العامة، يقدم دليل MDN للعبارات الشرطية مقدمة مناسبة.
ما هو التحكم في التدفق؟
داخل وحدة Tests في Apidog، تنشئ سيناريو اختبار (Test Scenario) وتضيف إليه خطوات اختبار (Test Steps). يمكن أن تكون الخطوة:
- طلب API.
- عنصر تحكم في التدفق، مثل تفرع أو حلقة أو انتظار.
تسمح عناصر التحكم في التدفق للسيناريو باتخاذ قرارات بدل تنفيذ كل الطلبات بالترتيب نفسه. يركز هذا المقال على التفرع الشرطي (Conditional Branching)، وهو مكافئ if/else.
راجع وثائق Apidog حول التحكم في التدفق والتفرع الشرطي للتفاصيل الكاملة.
التفرع ليس حلقة.
التفرع يختار مسارًا مرة واحدة، بينما الحلقة تكرر مجموعة خطوات. لتكرار طلب عبر عناصر مصفوفة، استخدمForEachكما في البرنامج التعليمي لحلقات ForEach.
بناء سيناريو: الدفع فقط بعد نجاح تسجيل الدخول
الهدف النهائي:
تسجيل الدخول
└─ إذا كانت الحالة 200 → تنفيذ الدفع
└─ وإلا → تسجيل الفشل أو إيقاف السيناريو
الخطوة 1: إنشاء سيناريو اختبار
- افتح وحدة Tests في Apidog.
- انقر على
+بجانب شريط البحث. - أنشئ Test Scenario جديدًا.
- اختر الدليل والأولوية، ثم أكمل الإنشاء.
الخطوة 2: إضافة طلب تسجيل الدخول
أضف طلبًا مخصصًا كأول خطوة في السيناريو:
POST https://api.your-store.com/v1/login
Content-Type: application/json
{
"email": "dana@example.com",
"password": "correct-horse-battery-staple"
}
شغّل الطلب منفردًا أولًا وتأكد من شكل الاستجابة. مثال لاستجابة ناجحة:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"userId": "usr_10482"
}
الخطوة 3: الدخول إلى وضع التنظيم
انقر على أي خطوة للدخول إلى وضع التنظيم (Orchestrate Mode).
- اللوحة اليسرى تعرض تدفق السيناريو.
- اللوحة اليمنى تعرض إعدادات الخطوة المحددة.
- لإعادة ترتيب الخطوات، اسحب أيقونة
≡.
الخطوة 4: إضافة تفرع شرطي
- انقر على
إضافة خطوة(Add Step). - اختر
التفرع الشرطي(Conditional Branching). - أنشئ شرطًا يعتمد على استجابة تسجيل الدخول.
في هذا السيناريو، الشرط المطلوب هو:
حالة استجابة تسجيل الدخول = 200
تشمل عوامل المقارنة المتاحة في Apidog:
-
يساوي/لا يساوي -
موجود/غير موجود -
أقل من/أكبر من -
يحتوي على/لا يحتوي على يطابق باستخدام Regex-
فارغ/ليس فارغًا -
في القائمة/ليس في القائمة
الخطوة 5: قراءة بيانات خطوة تسجيل الدخول
لديك طريقتان لتمرير بيانات الاستجابة إلى الشرط.
الطريقة الأولى: Retrieve pre-step data
انقر داخل قيمة الشرط، ثم اختر أيقونة العصا السحرية، وبعدها:
Retrieve pre-step data
ينشئ Apidog مرجعًا لبيانات خطوة سابقة بهذا الشكل:
{{$.<step id>.response.body.<field path>}}
مثلًا، لقراءة token من الخطوة رقم 1:
{{$.1.response.body.token}}
ملاحظات مهمة:
- تعمل هذه الطريقة داخل وحدة Tests فقط.
- تُحل القيمة عند تشغيل السيناريو كاملًا، وليس عند تشغيل خطوة منفردة.
- إذا ظهرت القيمة فارغة أثناء اختبار خطوة واحدة، شغّل السيناريو كاملًا.
الطريقة الثانية: استخراج متغير
إذا احتجت إلى استخدام القيمة في وحدات متعددة أو في عدة خطوات:
- افتح Post-processors لطلب تسجيل الدخول.
- أضف
Extract Variable. - استخدم JSONPath لاستخراج الحقل، مثل:
$.token
- احفظه باسم مثل
token. - استخدمه لاحقًا بهذه الصيغة:
{{token}}
راجع كيفية تمرير البيانات بين خطوات الاختبار لمزيد من التفاصيل.
الخطوة 6: إضافة مسار Else
مرر المؤشر فوق كتلة If ثم انقر على + Else.
رتب المسارين كالتالي:
- داخل If: أضف طلب الدفع.
- داخل Else: أضف خطوة تُظهر سبب الفشل بوضوح، مثل طلب تسجيل أو إشعار، أو تأكيد يفشل عمدًا.
مثال لطلب دفع يستخدم الرمز المستخرج:
POST https://api.your-store.com/v1/payments
Authorization: Bearer {{token}}
Content-Type: application/json
{
"amount": 2500,
"currency": "USD"
}
هذا النمط مشابه لاستخدام رؤوس المصادقة في وثائق Stripe API.
الآن أصبح منطق السيناريو واضحًا:
إذا نجح تسجيل الدخول → نفّذ الدفع
وإلا → أبلغ عن فشل تسجيل الدخول
الخطوة 7: الحفظ والتشغيل
- انقر على
حفظ الكل(Save All). - شغّل السيناريو كاملًا.
- اختبر بيانات اعتماد صحيحة للتأكد من تنفيذ
If. - اختبر بيانات اعتماد خاطئة للتأكد من تنفيذ
Else.
حالات عملية إضافية
التفرع بناءً على حقل في جسم الاستجابة
لا تقتصر الشروط على رمز الحالة. إذا أعادت API استجابة مثل:
{
"status": "active",
"role": "admin"
}
يمكنك استخدام:
{{$.1.response.body.status}}
ثم تطبيق شرط:
يساوي "active"
أو اختبار دور المستخدم عبر عامل في القائمة:
["admin", "editor"]
دمج التفرع مع ForEach
يمكنك وضع تفرع داخل حلقة ForEach لتخطي عناصر محددة، مثل المنتجات غير المتوفرة.
مراجع الحلقة تكون بالشكل التالي:
{{$.<loop step id>.index}}
{{$.<loop step id>.element.<field path>}}
يبدأ index من 0. راجع البرنامج التعليمي لحلقات ForEach لتفاصيل الاستخدام.
إيقاف الحلقة مبكرًا
استخدم Break If condition داخل الحلقة لإيقافها فور تحقق شرط معين. يمكنك إضافة العنصر أكثر من مرة داخل الحلقة عند الحاجة.
التعامل مع أخطاء الطلبات داخل الحلقات
تحتوي الحلقات على عنصر On Error ثابت. تحدد إعداداته ما يحدث عند فشل طلب داخل الحلقة:
-
Ignore: الانتقال إلى الطلب التالي. -
Continue: تخطي بقية خطوات الدورة الحالية. -
Break execution: إيقاف الحلقة ثم متابعة السيناريو بعدها. -
End execution: إنهاء السيناريو كاملًا.
إضافة انتظار بين الخطوات
إذا كانت API تحتاج وقتًا لمعالجة عملية إنشاء قبل قراءتها، أضف خطوة Wait وحدد التأخير بالمللي ثانية.
استخدام القيم داخل السكريبتات
داخل سكريبتات ما قبل أو ما بعد المعالجة، لا تستخدم {{variable}} مباشرة. استخدم:
pm.variables.get("$.2.response.body.token")
عدّل رقم الخطوة ومسار الحقل حسب السيناريو. للمزيد، راجع:
لا يمكن للسيناريو الإشارة إلى نفسه كسيناريو اختبار أصلي، لتجنب حلقات التنفيذ اللانهائية.
تشغيل السيناريو في CI باستخدام Apidog CLI
بعد بناء السيناريو، يمكنك تشغيله من سطر الأوامر داخل CI.
ثبّت الأداة وسجل الدخول:
npm install -g apidog-cli
apidog login --with-token <YOUR_ACCESS_TOKEN>
شغّل السيناريو:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r cli
المعاملات الأساسية:
-
-t: معرف سيناريو الاختبار. -
-e: معرف البيئة. -
-r: نوع التقرير.
يمكنك استخدام أكثر من مُبلغ:
apidog run --access-token $APIDOG_ACCESS_TOKEN -t <scenario_id> -e <env_id> -r html,cli
أنواع التقارير المتاحة تشمل:
clihtmljunit
يُحل التفرع في CLI بالطريقة نفسها داخل التطبيق: يقرأ المشغل استجابة تسجيل الدخول، ثم ينفذ مسار If أو Else. راجع:
الأسئلة الشائعة
ما الفرق بين التفرع الشرطي والحلقة؟
التفرع يختار مسارًا مرة واحدة بناءً على شرط، مثل تنفيذ الدفع فقط بعد نجاح تسجيل الدخول. أما For وForEach فتكرران مجموعة خطوات.
لماذا تظهر قيمة Retrieve pre-step data فارغة؟
تأكد من أمرين:
- أنت تعمل داخل وحدة Tests.
- تشغّل السيناريو كاملًا، لا خطوة منفردة.
هل يمكن التفرع بناءً على حقل في جسم الاستجابة؟
نعم. استخدم مرجعًا مثل:
{{$.1.response.body.status}}
أو استخرج القيمة إلى متغير ثم استخدم عامل مقارنة مناسبًا.
كيف أقرأ متغيرًا داخل سكريبت؟
استخدم:
pm.variables.get("$.2.response.body.token")
بدلًا من صيغة {{variable}}.
هل توجد متطلبات خاصة لاستخدام التفرع؟
لا تذكر وثائق Apidog قيودًا خاصة على التحكم في التدفق أو التفرعات أو الحلقات أو تمرير البيانات، ولا تفرق هذه الميزات بين السحابة والاستضافة الذاتية.
الخلاصة
الاختبار الخطي يخبرك أن شيئًا فشل، لكن الاختبار المتفرع يحدد مكان الفشل ويمنع تنفيذ طلبات لاحقة لا يمكن أن تنجح. أضف Conditional Branching، اقرأ استجابة خطوة سابقة أو متغيرًا مستخرجًا، ثم اربط مساري If وElse.
بعد التحقق من السيناريو داخل التطبيق، شغّله في CI باستخدام apidog run للحفاظ على المنطق نفسه في خط الأنابيب. جرّب Apidog مجانًا وحوّل اختبارات API الخطية إلى سيناريوهات تتخذ قرارات فعلية.



Top comments (0)