إذا كنت تريد إنشاء اختبارات API دون كتابة كل حالة يدويًا، فغالبًا ستصادف Keploy. الفكرة العملية بسيطة: شغّل تطبيقك، دع Keploy يراقب حركة المرور الحقيقية، ثم حوّل هذه الحركة إلى اختبارات قابلة لإعادة التشغيل. السؤال المهم للمطورين هو: كيف يعمل ذلك فعليًا، ومتى تستخدمه داخل مسار الاختبار لديك؟
في هذا الدليل سنغطي ما يلي: ما هو Keploy، كيف يستخدم eBPF للتسجيل وإعادة التشغيل، كيف تثبته وتشغله، كيف تضيفه إلى CI، وما القيود التي يجب الانتباه لها قبل اعتماده.
ما هو Keploy
Keploy منصة مفتوحة المصدر بترخيص Apache-2.0 لإنشاء اختبارات API، واختبارات تكامل، واختبارات end-to-end من سلوك تطبيقك الحقيقي.
بدل أن تكتب كل اختبار يدويًا، يراقب Keploy الطلبات والاستجابات والتوابع التي يستدعيها تطبيقك، ثم يحولها إلى:
- حالات اختبار قابلة لإعادة التشغيل.
- Mocks / Stubs للتوابع الخارجية مثل قواعد البيانات أو الخدمات اللاحقة.
يوفر Keploy مسارين رئيسيين:
- التسجيل وإعادة التشغيل: يلتقط تفاعلات API الحقيقية ثم يعيد تشغيلها كاختبارات تراجعية.
- توليد الاختبارات بالذكاء الاصطناعي: ينشئ مجموعات اختبار من OpenAPI، أو Postman Collection، أو cURL، أو نقطة نهاية حية.
المشروع متاح على GitHub: github.com/keploy/keploy، والوثائق الرسمية هنا: keploy.io/docs.
كيف يعمل Keploy باستخدام eBPF
عند تشغيل:
keploy record -c "CMD_TO_RUN_APP"
لا تحتاج إلى إضافة SDK أو تعديل كود التطبيق. يعتمد Keploy على eBPF، وهي تقنية في نواة Linux تسمح بمراقبة أحداث النظام والشبكة بشكل آمن.
عمليًا، هذا يعني:
- لا تغييرات في الكود: لا decorators، لا middleware، ولا instrumentation داخل التطبيق.
- مستقل عن اللغة: يعمل مع Go، Python، Node.js، Rust، Java وغيرها لأن الالتقاط يتم على طبقة الشبكة.
- يلتقط التوابع: لا يسجل فقط طلب API واستجابته، بل يلتقط أيضًا الاستدعاءات الصادرة مثل استعلامات قاعدة البيانات أو الرسائل عبر Kafka/RabbitMQ.
عند تسجيل طلب واحد، يحفظ Keploy عادةً:
- الطلب الوارد إلى API.
- الاستجابة المتوقعة.
- كل استدعاء تابع حدث أثناء معالجة الطلب.
- Mocks لهذه التوابع حتى يمكن تشغيل الاختبار لاحقًا بدون قاعدة بيانات أو خدمة خارجية حية.
ثم عند تشغيل:
keploy test -c "CMD_TO_RUN_APP"
يعيد Keploy إرسال الطلبات المسجلة إلى تطبيقك، ويستبدل التوابع الحقيقية بالـ mocks المسجلة، ثم يقارن الاستجابة الجديدة بالاستجابة الأصلية. إذا اختلفت النتائج، يعتبر ذلك تغيرًا في السلوك.
متى تستخدم Keploy؟
استخدم Keploy عندما يكون لديك تطبيق يعمل بالفعل وتريد تحويل سلوكه الحالي إلى اختبارات تراجعية بسرعة.
سيناريو عملي:
- شغّل التطبيق عبر Keploy.
- نفّذ بعض طلبات API يدويًا أو عبر اختبارات موجودة.
- دع Keploy يسجل الطلبات، الاستجابات، والتوابع.
- أعد تشغيل هذه الحالات لاحقًا في CI للتحقق من عدم كسر السلوك.
مثال:
# سجّل حركة المرور أثناء اختبار API
keploy record -c "node server.js"
# أعد تشغيل الحالات المسجلة
keploy test -c "node server.js" --delay 10
هذا مفيد خصوصًا عند:
- إضافة تغطية تراجعية لمشروع قائم.
- توثيق السلوك الحالي قبل إعادة الهيكلة.
- اختبار خدمات تعتمد على قواعد بيانات أو خدمات خارجية يصعب تجهيزها في CI.
توليد الاختبارات بالذكاء الاصطناعي
إلى جانب التسجيل من حركة المرور، يمكن لـ Keploy توليد اختبارات API من مصادر مثل:
- OpenAPI Specification.
- Postman Collection.
- أمر cURL.
- نقطة نهاية حية.
هذا مفيد عندما تريد بدء الاختبارات من عقد API بدلًا من حركة مرور حقيقية فقط.
مثال على حالات مناسبة:
- لديك ملف OpenAPI وتريد توليد حالات اختبار أولية.
- تريد تغطية endpoints لم يتم استدعاؤها أثناء التسجيل اليدوي.
- تريد مزيجًا من اختبارات مبنية على السلوك الحقيقي واختبارات مبنية على العقد.
إذا كنت تقارن أدوات توليد الاختبارات من المخططات، يمكنك أيضًا الرجوع إلى مولدات حالات الاختبار بالذكاء الاصطناعي ودليل توليد نصوص الاختبار من OpenAPI.
تثبيت Keploy
على نظام مدعوم، استخدم أمر التثبيت الرسمي:
curl --silent -O -L https://keploy.io/install.sh && source install.sh
بعد التثبيت، تحقق من توفر الأمر:
keploy
إذا ظهر لك إخراج CLI، يمكنك البدء بالتسجيل والاختبار.
أوامر Keploy الأساسية
1. تسجيل اختبارات من تطبيقك
الصيغة العامة:
keploy record -c "CMD_TO_RUN_APP"
مثال مع Node.js:
keploy record -c "node server.js"
مثال مع Go:
keploy record -c "go run main.go"
مثال مع Python:
keploy record -c "python app.py"
بعد تشغيل الأمر:
- افتح تطبيقك أو API.
- أرسل طلبات حقيقية عبر curl أو Postman أو أي عميل API.
- سيحفظ Keploy حالات الاختبار والـ mocks الناتجة.
مثال طلب أثناء التسجيل:
curl http://localhost:3000/users/1
2. إعادة تشغيل الاختبارات
الصيغة العامة:
keploy test -c "CMD_TO_RUN_APP" --delay 10
مثال:
keploy test -c "node server.js" --delay 10
الخيار --delay 10 يعني أن Keploy سينتظر 10 ثوانٍ قبل إرسال الطلبات المسجلة، حتى يأخذ التطبيق وقتًا كافيًا للإقلاع.
إذا كان تطبيقك بطيئًا في البدء، ارفع القيمة:
keploy test -c "node server.js" --delay 30
إذا كان سريعًا، يمكنك تقليلها:
keploy test -c "node server.js" --delay 5
دورة عمل عملية مع Keploy
دورة الاستخدام الأساسية تكون كالتالي:
# 1. ثبّت Keploy
curl --silent -O -L https://keploy.io/install.sh && source install.sh
# 2. شغّل تطبيقك تحت وضع التسجيل
keploy record -c "node server.js"
# 3. أرسل طلبات API أثناء التسجيل
curl http://localhost:3000/users/1
curl -X POST http://localhost:3000/users \
-H "Content-Type: application/json" \
-d '{"name":"Ali"}'
# 4. أعد تشغيل الاختبارات المسجلة
keploy test -c "node server.js" --delay 10
بعد ذلك يمكنك تثبيت الاختبارات الناتجة داخل المستودع وتشغيلها عند كل تغيير.
اللغات والبروتوكولات ومخازن البيانات المدعومة
نظرًا لأن Keploy يلتقط الحركة على طبقة الشبكة، فهو يدعم نطاقًا واسعًا من اللغات والبروتوكولات.
| الفئة | مدعوم |
|---|---|
| اللغات | Go, Java, Node.js, Python, Rust, C#, C/C++, TypeScript، والمزيد |
| البروتوكولات | HTTP/REST, gRPC, GraphQL, Kafka, RabbitMQ |
| مخازن البيانات | PostgreSQL, MySQL, MongoDB, Redis |
هذا لا يعني أن كل حالة استخدام ستكون تلقائية بالكامل، لكنه يوضح سبب قدرة Keploy على العمل عبر مكدسات تقنية مختلفة دون الحاجة إلى SDK لكل لغة.
تشغيل Keploy في CI
لإضافة Keploy إلى CI، اتبع النمط التالي:
- سجّل حالات الاختبار محليًا أو في بيئة مخصصة.
- أضف ملفات الاختبارات والـ mocks الناتجة إلى المستودع.
- شغّل
keploy testداخل pipeline. - افشل البناء إذا فشلت إعادة التشغيل.
مثال مبسط:
keploy test -c "node server.js" --delay 10
في CI، ميزة الـ mocks مهمة لأنها تقلل الحاجة إلى تشغيل قاعدة بيانات أو خدمات خارجية لكل اختبار، طالما أن التوابع المطلوبة تم تسجيلها مسبقًا.
مثال خطوة عامة داخل pipeline:
- name: Run Keploy tests
run: |
keploy test -c "node server.js" --delay 10
الفكرة هي أن فشل Keploy يجب أن يعامل مثل فشل اختبار وحدة أو اختبار تكامل: إذا تغيرت الاستجابة عن السلوك المسجل، يجب مراجعة التغيير.
قيود يجب مراعاتها
Keploy مفيد، لكنه ليس مناسبًا لكل سيناريو. انتبه إلى هذه النقاط قبل اعتماده:
- يعتمد على Linux و eBPF: لأن الالتقاط يتم على مستوى نواة Linux، قد تحتاج إلى بيئة Linux وصلاحيات مناسبة.
- الاختبارات الناتجة تحتاج مراجعة: حركة المرور الحقيقية قد تحتوي على حالات مؤقتة أو ضوضاء. لا تعتمد كل شيء تلقائيًا دون تنظيف.
- ليس منصة كاملة لدورة حياة API: يركز Keploy على التسجيل، التوليد، وإعادة التشغيل. لا يغطي كل جوانب تصميم API، التوثيق، التعاون، أو إدارة المواصفات.
- السلوك المسجل ليس دائمًا عقدًا صحيحًا: إذا سجلت bug، فقد يتحول إلى اختبار يحمي هذا الـ bug. لذلك راجع الحالات قبل اعتمادها.
أين يتناسب Apidog كبديل للاختبار المخطط له
إذا كانت حاجتك أوسع من تحويل حركة المرور الحقيقية إلى اختبارات تراجعية، فقد تحتاج إلى منصة API كاملة. Apidog يغطي تصميم API، التصحيح، المحاكاة، التوثيق، والاختبار في مكان واحد.
الفرق العملي:
- Keploy مناسب عندما تريد التقاط سلوك وقت التشغيل الحقيقي بدون تعديل الكود.
- Apidog مناسب عندما تريد تصميم اختبارات API قابلة للصيانة، وتشغيلها من CLI و CI، مع إدارة التوثيق والبيئات والتعاون.
يمكن تشغيل اختبارات Apidog عبر واجهة سطر الأوامر CLI لـ Apidog، مع دعم الاختبار المعتمد على البيانات باستخدام CSV أو JSON، وتوليد تقارير CLI و HTML و JSON.
كما يدعم Apidog توليد حالات الاختبار بواسطة الذكاء الاصطناعي من مخطط API ونقاط النهاية، لكن بدون التقاط حركة المرور الحية عبر eBPF. هذه القدرة الأخيرة هي مجال Keploy.
للمقارنة التفصيلية، راجع Apidog مقابل Keploy. وإذا كنت تريد الانتقال من Keploy إلى Apidog CLI، راجع شرح عملية الترحيل.
إذا كنت تريد بناء اختبارات API مؤلفة وقابلة للصيانة، يمكنك تنزيل Apidog والبدء من دليل اختبار API باستخدام Apidog.
الأسئلة الشائعة
هل Keploy مجاني ومفتوح المصدر؟
نعم. Keploy مفتوح المصدر بترخيص Apache-2.0، والكود متاح على GitHub ويمكنك استضافته ذاتيًا.
هل يتطلب Keploy تعديل كود التطبيق؟
لا. في مسار التسجيل وإعادة التشغيل، يلتقط Keploy حركة المرور عبر eBPF على طبقة الشبكة، لذلك لا تحتاج إلى SDK أو تغييرات في الكود.
ماذا يفعل الخيار --delay في keploy test؟
يحدد عدد الثواني التي ينتظرها Keploy قبل إرسال الطلبات المسجلة. مثال: --delay 10 ينتظر 10 ثوانٍ حتى يكتمل إقلاع التطبيق.
هل يستطيع Keploy محاكاة قاعدة البيانات أثناء الاختبار؟
نعم. عند التسجيل، يلتقط Keploy استدعاءات التوابع مثل استعلامات قاعدة البيانات، ثم ينشئ mocks لها حتى تعمل إعادة التشغيل بدون قاعدة بيانات حية.
هل Keploy بديل لأداة تصميم وتوثيق API؟
لا. Keploy أداة اختبار وتوليد اختبارات. لتصميم API، التوثيق، المحاكاة للمستهلكين، والتعاون، تحتاج إلى منصة دورة حياة API مثل Apidog.
الخلاصة
Keploy يحول سلوك API الحقيقي إلى اختبارات قابلة لإعادة التشغيل. يستخدم eBPF لالتقاط الطلبات، الاستجابات، واستدعاءات التوابع دون تعديل الكود، ثم يعيد تشغيلها كاختبارات تراجعية.
استخدمه عندما تريد تغطية سريعة من حركة مرور حقيقية. راجع الاختبارات الناتجة قبل اعتمادها، وشغّلها في CI لاكتشاف الانحرافات. وإذا كنت تحتاج إلى اختبارات API مخططة وقابلة للصيانة داخل منصة API كاملة، فقارن Keploy مع Apidog حسب احتياجات فريقك.


Top comments (0)