Insomnia هو عميل API من Kong لإرسال الطلبات وفحص الاستجابات. يدعم HTTP وREST وGraphQL وgRPC وSOAP وWebSocket من واجهة واحدة، ويُستخدم غالبًا عندما تحتاج أداة خفيفة لاختبار واجهات API دون تعقيد أدوات الـIDE الثقيلة.
في هذا الدليل ستبني تدفق اختبار عملي داخل Insomnia: إنشاء مجموعة طلبات، إرسال طلب، فحص الاستجابة، إعداد البيئات والمتغيرات، ثم كتابة تأكيدات داخل مجموعات الاختبار وتشغيلها من سطر الأوامر باستخدام Inso. سنستخدم JSONPlaceholder حتى تتمكن من التطبيق مباشرة.
تثبيت Insomnia وإنشاء أول طلب
نزّل Insomnia من الموقع الرسمي لـ Kong وثبّته على نظامك. عند التشغيل الأول يمكنك تسجيل الدخول أو العمل محليًا بدون حساب. في الوضع المحلي يخزن Insomnia بياناتك على جهازك، بينما تبقى المزامنة السحابية اختيارية حسب إعدادات الإصدار الذي تستخدمه.
لإنشاء طلب:
- افتح Insomnia.
- اضغط Create.
- اختر Request Collection.
- سمِّ المجموعة مثلًا:
اختبارات API المستخدمين. - داخل المجموعة، اضغط زر +.
- اختر HTTP Request.
- اضبط الطريقة على
GET. - أدخل عنوان الطلب التالي:
GET https://jsonplaceholder.typicode.com/users/1
اضغط Send. ستظهر في لوحة الاستجابة:
- رمز الحالة مثل
200 - زمن الاستجابة
- حجم الاستجابة
- جسم الاستجابة بتنسيق JSON منسق
مثال استجابة مختصر:
{
"id": 1,
"name": "Leanne Graham",
"email": "Sincere@april.biz"
}
عند التعامل مع استجابات كبيرة، استخدم مرشحات JSONPath أو XPath داخل Insomnia للوصول السريع إلى القيم المهمة.
تكوين الطرق والمعلمات والمصادقة
بعد إنشاء طلب بسيط، ستحتاج غالبًا إلى ضبط الجسم، الاستعلام، الرؤوس، والمصادقة.
إرسال جسم JSON مع POST
أنشئ طلبًا جديدًا واضبط الطريقة على POST، ثم من تبويب Body اختر JSON وأدخل:
{
"name": "Daniel Okafor",
"email": "daniel.okafor@example.com"
}
عند اختيار نوع الجسم JSON، يضيف Insomnia رأس Content-Type: application/json تلقائيًا.
إضافة Query Parameters
بدل كتابة المعلمات يدويًا داخل الرابط:
GET https://api.example.com/users?page=1&limit=10
استخدم تبويب Query وأضف:
| Name | Value |
|---|---|
| page | 1 |
| limit | 10 |
هذا يجعل تشغيل أو تعطيل أي معلمة أسهل أثناء الاختبار.
إضافة Headers
من تبويب Headers أضف أي رؤوس تحتاجها واجهة API، مثل:
Accept: application/json
X-Request-Id: test-001
إعداد المصادقة
من تبويب Auth اختر نوع المصادقة المناسب، مثل:
- Bearer Token
- Basic Auth
- API Key
- OAuth 1.0 / OAuth 2.0
- AWS IAM
لواجهة API تستخدم Bearer Token، اختر Bearer Token وضع الرمز. الأفضل ألا تكتبه مباشرة داخل الطلب، بل استخدم متغير بيئة:
Authorization: Bearer {{ _.auth_token }}
إذا كنت تحدد رموز الحالة المتوقعة في اختباراتك، يمكنك الرجوع إلى هذا الدليل حول رموز حالة HTTP التي يجب أن تستخدمها واجهات برمجة تطبيقات REST.
إعداد البيئات والمتغيرات
البيئات في Insomnia تساعدك على عدم تكرار القيم مثل base_url أو auth_token، وتسهّل التبديل بين التطوير، الاختبار، والإنتاج.
افتح قائمة البيئة من أعلى الشريط الجانبي، ثم اختر Manage Environments. داخل Base Environment أو بيئة فرعية، أضف:
{
"base_url": "https://jsonplaceholder.typicode.com",
"auth_token": "your-token-here"
}
بعدها استخدم المتغير داخل الطلب:
GET {{ _.base_url }}/users/1
عند تغيير البيئة النشطة، سيستخدم كل طلب القيم الخاصة بهذه البيئة تلقائيًا.
مثال عملي لبيئتين
بيئة التطوير:
{
"base_url": "https://dev-api.example.com",
"auth_token": "dev-token"
}
بيئة الإنتاج:
{
"base_url": "https://api.example.com",
"auth_token": "prod-token"
}
نفس الطلب يعمل على البيئتين دون تعديل الرابط:
GET {{ _.base_url }}/users/1
استخدام Template Tags
يدعم Insomnia علامات القوالب لإنشاء أو استخراج قيم ديناميكية، مثل:
- Timestamp
- UUID
- قيمة من استجابة طلب سابق
مثال عملي: إذا كان لديك طلب تسجيل دخول يعيد:
{
"token": "abc123"
}
يمكنك استخدام Template Tag لاستخراج $.token من استجابة تسجيل الدخول ثم استخدامه في الطلبات المحمية:
Authorization: Bearer <token-from-login-response>
بهذا يمكن لـ Insomnia تشغيل طلب تسجيل الدخول عند الحاجة، استخراج الرمز، ثم تمريره للطلبات التالية دون كتابة كود ربط إضافي.
للاطلاع على طريقة تنظيم الفحوصات المرتبطة بسيناريوهات API، راجع مثال حالة اختبار API.
كتابة مجموعات الاختبار مع التأكيدات
إرسال الطلب يدويًا جيد أثناء التطوير، لكن الاختبار الفعلي يحتاج تأكيدات قابلة للتكرار. في Insomnia يتم ذلك عبر Test Suites أو تبويب Unit Tests حسب الإصدار.
لإنشاء اختبار:
- افتح المجموعة.
- انتقل إلى Tests.
- أنشئ Test Suite.
- أضف اختبارًا جديدًا.
- اختر الطلب الذي سيستهدفه الاختبار من القائمة.
- اكتب التأكيدات باستخدام JavaScript وChai.
اختبار بسيط للتحقق من رمز الحالة:
const response = await insomnia.send();
expect(response.status).to.equal(200);
اختبار يفحص الجسم:
const response = await insomnia.send();
const body = JSON.parse(response.data);
expect(response.status).to.equal(200);
expect(body).to.have.property("id");
expect(body.email).to.equal("Sincere@april.biz");
اختبار للرؤوس:
const response = await insomnia.send();
expect(response.headers["content-type"]).to.include("application/json");
اختبار لقيمة داخل مصفوفة:
const response = await insomnia.send();
const body = JSON.parse(response.data);
expect(body).to.be.an("array");
expect(body.length).to.be.greaterThan(0);
expect(body[0]).to.have.property("email");
بعد كتابة الاختبارات، اضغط Run Tests. سيعرض Insomnia نتيجة كل اختبار، زمن التنفيذ، وأي رسالة فشل.
تنظيم الاختبارات
استخدم تنظيمًا بسيطًا قابلًا للتوسع:
- مجموعة اختبار لكل مورد:
Users,Posts,Orders - اختبار واحد لكل سلوك
- أسماء واضحة مثل:
GET /users/1 returns 200GET /users/999 returns 404POST /users rejects invalid email
لا تجعل اختبارًا واحدًا يتحقق من كل شيء. عند الفشل، يجب أن تعرف السبب من اسم الاختبار مباشرة.
لتحسين جودة التأكيدات، راجع دليل تأكيدات API، ولتنظيم الاختبارات مع نمو المشروع راجع مجموعات الاختبار لأتمتة اختبار API.
التشغيل من سطر الأوامر باستخدام Inso
واجهة Insomnia مناسبة أثناء التطوير، لكن CI يحتاج تشغيلًا بدون واجهة. لذلك يوفر Insomnia أداة سطر أوامر باسم Inso.
بعد تصدير المجموعة أو مزامنتها، شغّل الاختبارات من الطرفية:
inso run test "اختبارات API المستخدمين"
إذا فشل أي اختبار، يرجع Inso رمز خروج غير صفري. هذا يسمح لـ CI بإيقاف البناء تلقائيًا.
مثال مبسط داخل GitHub Actions:
name: API Tests
on:
push:
branches:
- main
jobs:
insomnia-tests:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install Inso
run: npm install -g insomnia-inso
- name: Run Insomnia tests
run: inso run test "اختبارات API المستخدمين"
يمكنك ربط هذا بأي مسار CI/CD بحيث تعمل اختبارات API عند كل دفع للكود أو قبل النشر.
للنمط العام في الأتمتة، راجع أتمتة اختبارات API في CI/CD.
تغيير السحابة في الإصدار 8، وبديل
في Insomnia 8 تحول المنتج نحو نموذج يعتمد على السحابة أولًا، حيث دفع المستخدمين لإنشاء حساب Kong وتخزين المشاريع في السحابة. لم يكن هذا مناسبًا لبعض الفرق، خاصة التي تحتاج عملًا محليًا بالكامل أو لا تسمح بخروج بيانات API من بيئتها الداخلية.
أعادت الإصدارات اللاحقة خيارات أوضح للعمل المحلي فقط أو استخدام Scratch Pad، لكن هذا التغيير جعل بعض الفرق تقيم بدائل أخرى.
إذا كنت تحتاج منصة API أوسع، فإن Apidog يستحق التجربة. يغطي التصميم، التصحيح، المحاكاة، الاختبار، والتوثيق، ويدعم استيراد صادرات Insomnia حتى لا تبدأ من الصفر. يمكنك بناء التأكيدات بصريًا دون JavaScript، مع دعم النصوص البرمجية عند الحاجة.
يمكنك تنزيل Apidog واستيراد مجموعة Insomnia للمقارنة. وللاطلاع على خيارات أخرى، راجع قائمة أدوات اختبار API المجانية عبر الإنترنت.
يبقى Insomnia خيارًا قويًا ومباشرًا، خاصة للمطورين الفرديين والفرق الصغيرة التي تريد عميل API سريعًا وبواجهة بسيطة. يعتمد الاختيار النهائي على طريقة عمل فريقك: هل تريد عميل اختبار خفيفًا فقط، أم منصة تدير دورة حياة API كاملة في مكان واحد؟
الأسئلة الشائعة
هل Insomnia مجاني للاستخدام؟
نعم، يحتوي Insomnia على طبقة مجانية مناسبة للاستخدام الفردي، وتشمل إرسال الطلبات وتشغيل مجموعات الاختبار محليًا. تضيف الخطط المدفوعة ميزات تعاون ومزامنة سحابية أوسع. يمكنك استخدام العميل الأساسي دون دفع، وتتيح الإصدارات الحديثة العمل محليًا إذا كنت لا تريد المزامنة السحابية.
ما البروتوكولات التي يدعمها Insomnia؟
يدعم Insomnia:
- HTTP
- REST
- GraphQL
- gRPC
- SOAP
- WebSocket
يختلف إعداد الطلب حسب البروتوكول، لكن فحص الاستجابة واختبارات الطلبات المستندة إلى HTTP تعمل بنمط متقارب.
كيف أكتب التأكيدات في Insomnia؟
استخدم Test Suites. افتح عرض الاختبارات داخل المجموعة، أنشئ Suite، ثم أضف اختبارًا يستدعي:
const response = await insomnia.send();
بعدها استخدم expect بأسلوب Chai للتحقق من الحالة، الرؤوس، أو جسم الاستجابة:
expect(response.status).to.equal(200);
ما الذي تغير في Insomnia 8؟
تحول Insomnia 8 إلى افتراضي يعتمد على السحابة أولًا، ما دفع المستخدمين لتسجيل الدخول إلى حساب Kong ومزامنة المشاريع. لم يناسب ذلك بعض المستخدمين الذين اعتادوا العمل المحلي الكامل. لاحقًا أصبحت خيارات العمل المحلي أوضح، لكن التغيير دفع بعض الفرق للبحث عن بدائل.
هل يمكنني تشغيل اختبارات Insomnia في CI؟
نعم. استخدم Inso من سطر الأوامر:
inso run test "<اسم المجموعة>"
إذا فشل اختبار، يرجع Inso رمز خروج غير صفري، وبالتالي يمكن لـ CI تعليم البناء على أنه فاشل تلقائيًا.
Top comments (0)