لتشغيل اختبارات Apidog CLI API في CircleCI، أضف ملف .circleci/config.yml يستخدم صورة Docker مثل cimg/node، وثبّت apidog-cli عبر npm، ثم شغّل apidog run باستخدام رمز الوصول، ومعرف سيناريو الاختبار، ومعرف البيئة. خزّن هذه القيم كمتغيرات بيئة في CircleCI، وانشر تقارير JUnit وHTML باستخدام store_test_results وstore_artifacts.
هذه المقالة تركز على التنفيذ: كيف تجعل اختبارات API تعمل تلقائيًا داخل CircleCI مع كل عملية دفع. إذا كنت لا تزال تقارن بين أدوات CI، فراجع مقارنة CircleCI بـ Jenkins. هنا نفترض أنك اخترت CircleCI وتريد تشغيل مجموعة اختبارات واجهاتك تلقائيًا.
ما هو CircleCI وكيف يعمل
CircleCI هي خدمة تكامل وتسليم مستمر قائمة على السحابة. تراقب مستودع Git، وعند كل commit أو push تشغل الخطوات التي عرّفتها في ملف YAML داخل المستودع.
الملف الأساسي هو:
.circleci/config.yml
يقرأه CircleCI مع كل عملية دفع ويحوله إلى pipeline. تنسيق التكوين الحالي هو 2.1، ويتيح لك تعريف الوظائف، والمنفذين، ومسارات العمل.
المفاهيم الثلاثة التي تحتاجها هنا:
-
Jobs: وحدات العمل. كل وظيفة تحتوي على خطوات مثل
checkout، تثبيت الحزم، وتشغيل الاختبارات. -
Executors: بيئة التشغيل. في هذا الدليل سنستخدم Docker executor مع صورة
cimg/node. - Workflows: تحدد أي jobs تعمل، وبأي ترتيب، وعلى أي فروع.
لاختبار API، ستنشئ job واحدة تثبّت Apidog CLI وتشغّل سيناريوهات الاختبار، ثم workflow يشغّل هذه job عند الدفع إلى المستودع.
لماذا تشغل اختبارات API في CircleCI
تشغيل اختبارات API داخل CI يساعدك على اكتشاف المشاكل قبل النشر:
- تغيير غير مقصود في schema.
- حقل response تمت إعادة تسميته.
- كسر في تدفق المصادقة.
- endpoint لم يعد يعيد status code المتوقع.
تم تصميم واجهة سطر الأوامر Apidog CLI لهذا النمط من العمل: تبني سيناريو الاختبار في Apidog، ثم تشغله headless داخل CI باستخدام أمر واحد.
إذا كنت تريد سياقًا أوسع حول وضع اختبارات API داخل pipeline، فراجع 12 من أفضل ممارسات CI/CD لاختبار واجهات برمجة التطبيقات.
المتطلبات الأساسية
قبل كتابة ملف CircleCI، جهّز القيم التالية من Apidog:
رمز الوصول
access token
أنشئه من إعدادات حساب Apidog. سيستخدمه CLI للمصادقة داخل CircleCI. راجع دليل مصادقة Apidog CLI إذا أردت تفاصيل أكثر حول إنشاء الرمز والتعامل مع أسرار CI.معرف سيناريو الاختبار
test scenario ID
افتح سيناريو الاختبار في Apidog وانسخ المعرف من عنوان URL أو من إعدادات السيناريو.معرف البيئة
environment ID
يحدد أي base URL ومتغيرات بيئة سيستخدمها CLI، مثل staging أو production.
ستحتاج أيضًا إلى:
- حساب CircleCI.
- مشروع CircleCI متصل بمستودع Git.
- مستودع يحتوي على مجلد
.circleci.
تخزين الأسرار كمتغيرات بيئة
لا تضع رمز الوصول مباشرة داخل config.yml. هذا الملف يتم رفعه إلى Git، وأي secret داخله يمكن أن يتسرب.
استخدم أحد الخيارين:
الخيار 1: متغيرات بيئة المشروع
من واجهة CircleCI:
- افتح المشروع.
- اذهب إلى Project Settings.
- افتح Environment Variables.
- أضف المتغيرات التالية:
APIDOG_ACCESS_TOKEN
APIDOG_TEST_SCENARIO_ID
APIDOG_ENVIRONMENT_ID
الخيار 2: Contexts
استخدم Context إذا كانت عدة مستودعات تشترك في نفس أسرار Apidog.
من CircleCI:
- افتح Organization Settings.
- اختر Contexts.
- أنشئ context باسم مثل
apidog-secrets. - أضف نفس المتغيرات الثلاثة.
سنبدأ بمتغيرات المشروع، ثم نعرض مثال context لاحقًا.
ملف config.yml الكامل
أنشئ الملف التالي داخل المستودع:
.circleci/config.yml
ثم أضف التكوين التالي:
version: 2.1
jobs:
api-tests:
docker:
- image: cimg/node:20.11
steps:
- checkout
- run:
name: Install Apidog CLI
command: npm install -g apidog-cli
- run:
name: Run Apidog API tests
command: |
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
-t $APIDOG_TEST_SCENARIO_ID \
-e $APIDOG_ENVIRONMENT_ID \
-r cli,junit,html \
--out-dir ./reports
- store_test_results:
path: ./reports
- store_artifacts:
path: ./reports
workflows:
test-api:
jobs:
- api-tests
بعد ذلك:
git add .circleci/config.yml
git commit -m "Run Apidog API tests in CircleCI"
git push
سيقرأ CircleCI الملف ويشغّل job الاختبار.
شرح التكوين خطوة بخطوة
1. اختيار المنفذ
docker:
- image: cimg/node:20.11
نستخدم صورة cimg/node لأن Apidog CLI يتم تثبيته عبر npm. الصورة تحتوي على Node.js وnpm وأدوات أساسية جاهزة.
يمكنك تغيير الإصدار حسب نسخة Node المعتمدة في فريقك:
docker:
- image: cimg/node:18.19
أو:
docker:
- image: cimg/node:20.11
2. سحب الكود
- checkout
هذه الخطوة تسحب المستودع إلى بيئة job. حتى لو كان الاختبار يعتمد أساسًا على Apidog، يظل checkout مفيدًا إذا كنت تستخدم ملفات بيانات مثل CSV أو JSON من المستودع.
3. تثبيت Apidog CLI
- run:
name: Install Apidog CLI
command: npm install -g apidog-cli
هذا يثبّت CLI عالميًا داخل حاوية CircleCI. بعد هذه الخطوة يصبح الأمر apidog متاحًا في الخطوات التالية.
4. تشغيل اختبارات API
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
-t $APIDOG_TEST_SCENARIO_ID \
-e $APIDOG_ENVIRONMENT_ID \
-r cli,junit,html \
--out-dir ./reports
معنى كل خيار:
--access-token
يستخدم رمز الوصول للمصادقة مع Apidog.-t
يحدد سيناريو الاختبار المطلوب تشغيله.-e
يحدد البيئة التي سيعمل عليها السيناريو.-
-r cli,junit,html
يطلب ثلاثة أنواع من التقارير:-
cli: عرض النتيجة داخل سجل CircleCI. -
junit: ملف XML يمكن لـ CircleCI قراءته كاختبارات. -
html: تقرير HTML قابل للتصفح.
-
--out-dir ./reports
يحدد مكان حفظ التقارير.
نشر تقارير الاختبار في CircleCI
نشر نتائج JUnit
- store_test_results:
path: ./reports
هذه الخطوة تجعل CircleCI يقرأ ملفات JUnit XML من مجلد ./reports ويعرضها في تبويب الاختبارات داخل واجهة البناء.
هذا مفيد لأنك سترى:
- أسماء الاختبارات الفاشلة.
- مدة التنفيذ.
- عدد الاختبارات الناجحة والفاشلة.
- تفاصيل الفشل بدل البحث داخل logs طويلة.
نشر تقرير HTML كـ artifact
- store_artifacts:
path: ./reports
هذه الخطوة ترفع مجلد التقارير كـ artifacts. بعد انتهاء البناء يمكنك فتح تبويب Artifacts وتنزيل تقرير HTML أو عرضه.
للمزيد حول أنواع التقارير، راجع دليل تقارير اختبار Apidog CLI.
تشغيل الاختبارات على فروع محددة فقط
إذا كنت لا تريد تشغيل اختبارات API الكاملة على كل feature branch، أضف filters إلى workflow:
workflows:
test-api:
jobs:
- api-tests:
filters:
branches:
only:
- main
- develop
الآن ستعمل job فقط عند الدفع إلى:
maindevelop
وتُتخطى على بقية الفروع.
استخدام Context بدل متغيرات المشروع
إذا كان لديك أكثر من مستودع يستخدم نفس Apidog token، استخدم CircleCI Context.
مثال:
workflows:
test-api:
jobs:
- api-tests:
context:
- apidog-secrets
في هذا المثال، تقرأ job المتغيرات التالية من context باسم apidog-secrets:
APIDOG_ACCESS_TOKEN
APIDOG_TEST_SCENARIO_ID
APIDOG_ENVIRONMENT_ID
ميزة هذا الأسلوب أنك تغيّر الرمز في مكان واحد، وتستفيد كل المشاريع من القيمة الجديدة.
تشغيل اختبارات معتمدة على البيانات
إذا كان سيناريو الاختبار يحتاج إلى بيانات متعددة، يمكنك استخدام ملف CSV أو JSON مع الخيار -d.
مثال:
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
-t $APIDOG_TEST_SCENARIO_ID \
-e $APIDOG_ENVIRONMENT_ID \
-d ./data/users.csv \
-r cli,junit \
--out-dir ./reports
هنا سيستخدم Apidog CLI ملف:
./data/users.csv
ويشغل السيناريو بناءً على صفوف البيانات.
يمكن أن يكون الملف داخل المستودع مثلًا:
data/users.csv
مثال مبسط:
email,password
user1@example.com,secret123
user2@example.com,secret456
لمزيد من التفاصيل حول تنظيم ملفات البيانات، راجع دليل الاختبار المعتمد على البيانات.
التحكم في سلوك الفشل
يمكنك تحديد ماذا يحدث عند فشل خطوة داخل السيناريو باستخدام:
--on-error
القيم المدعومة:
-
continue: تابع التنفيذ بعد الفشل. -
end: أوقف التشغيل عند الفشل. -
ignore: تجاهل الفشل.
مثال:
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
-t $APIDOG_TEST_SCENARIO_ID \
-e $APIDOG_ENVIRONMENT_ID \
--on-error end \
-r cli,junit,html \
--out-dir ./reports
استخدم end عندما تريد fail fast داخل CI، خاصة في الفروع الحرجة مثل main.
استهداف فرع محدد داخل Apidog
إذا كان مشروعك يستخدم فروع Apidog، يمكنك تحديد المشروع والفرع:
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
--project <id> \
--branch <name> \
-t $APIDOG_TEST_SCENARIO_ID \
-e $APIDOG_ENVIRONMENT_ID \
-r cli,junit,html \
--out-dir ./reports
استبدل:
<id>
<name>
بمعرف المشروع واسم الفرع المطلوب.
رفع ملخص التقرير إلى Apidog
إذا أردت رفع ملخص التقرير إلى سحابة Apidog، أضف:
--upload-report
مثال:
apidog run \
--access-token $APIDOG_ACCESS_TOKEN \
-t $APIDOG_TEST_SCENARIO_ID \
-e $APIDOG_ENVIRONMENT_ID \
-r cli,junit,html \
--out-dir ./reports \
--upload-report
كيف يتناسب هذا مع سير عمل Apidog
الفكرة الأساسية أن Apidog يمتلك تعريف الاختبار، وCircleCI يمتلك وقت ومكان التشغيل.
داخل Apidog:
- تبني سيناريو الاختبار.
- تضيف assertions على status codes وresponse body.
- تحدد البيئة والمتغيرات.
- تحفظ السيناريو.
داخل CircleCI:
- تثبّت Apidog CLI.
- تشغّل نفس السيناريو باستخدام
apidog run. - تنشر تقارير JUnit وHTML.
يمكنك أيضًا إنشاء أو تشغيل سيناريو اختبار من سطر الأوامر حسب طريقة عمل فريقك.
هذا التقسيم يقلل تكرار كود الاختبار. عندما يضيف أحد أعضاء الفريق assertion جديدًا داخل Apidog، سيبدأ CircleCI بتشغيله في البناء التالي بدون تعديل YAML.
إذا أردت مقارنة CircleCI بأدوات CI أخرى مناسبة لفرق API، راجع أدوات التكامل المستمر لفرق واجهات برمجة التطبيقات.
هل تريد تشغيل API suite مع كل push؟ حمّل Apidog، أنشئ سيناريو اختبار، ثم أضف ملف config.yml أعلاه إلى مستودعك.
الأسئلة المتكررة
ما هو CircleCI؟
CircleCI هي منصة تكامل وتسليم مستمر قائمة على السحابة. تتصل بمستودع Git، وتقرأ ملف .circleci/config.yml، ثم تشغل خطوات البناء والاختبار والنشر تلقائيًا عند دفع الكود.
ما هو استخدام CircleCI؟
تستخدم الفرق CircleCI لأتمتة الاختبار والنشر. من الاستخدامات الشائعة:
- تشغيل unit tests.
- تشغيل integration tests.
- اختبار عقود API.
- بناء صور Docker.
- نشر الإصدارات إلى staging أو production.
في هذا الدليل، استخدمناه لتشغيل اختبارات Apidog CLI API مع كل push.
هل CircleCI مجاني؟
لدى CircleCI خطة مجانية تتضمن رصيد بناء شهريًا، وغالبًا تكفي للمشاريع الصغيرة والمستودعات الشخصية. الفرق الأكبر التي تحتاج إلى تزامن أعلى، أو وقت بناء أطول، أو موارد أكبر، تستخدم الخطط المدفوعة. راجع صفحة تسعير CircleCI الحالية لمعرفة الحدود الدقيقة.
هل CircleCI مفتوح المصدر؟
لا. CircleCI منتج تجاري مستضاف، وليس مفتوح المصدر. يمكنك تكوينه بملف YAML وتشغيله على بنية CircleCI التحتية أو عبر مشغّل مستضاف ذاتيًا. إذا كنت تحتاج إلى خادم CI مفتوح المصدر بالكامل، فغالبًا ستقارن مع Jenkins.
كيف يعمل CircleCI؟
عند دفع commit، يكتشف CircleCI التغيير، يقرأ .circleci/config.yml، يشغّل المنفذ المحدد مثل حاوية Docker cimg/node، ثم ينفذ خطوات كل job بالترتيب. بعد الانتهاء، يعرض النتائج داخل CircleCI ويرسل الحالة إلى موفر Git.
للحصول على الصورة الأوسع حول CI/CD، راجع دليل ما هو CI/CD.
Top comments (0)