Newman و Postman ليسوا منافسين. هما نصفان لعملية عمل واحدة. Postman هو تطبيق سطح المكتب حيث تصمم الطلبات وتكتب الاختبارات وتستكشف واجهات برمجة التطبيقات يدويًا. Newman هو أداة سطر الأوامر التي تأخذ المجموعات التي أنشأتها في Postman وتشغلها بدون واجهة رسومية. إذا كان Postman هو الورشة، فإن Newman هو الجهاز الذي يشغل عملك المكتمل في جدول زمني.
يأتي الارتباك عادة من السؤال "أيهما يجب أن أستخدم؟" الإجابة الصادقة هي كلاهما، في مراحل مختلفة. تقوم بالتأليف في Postman لأن الواجهة الرسومية تجعل ذلك سريعًا. تقوم بالتنفيذ في Newman لأن خط الأنابيب لا يمكنه النقر على الأزرار. تشرح هذه المقالة العلاقة بدقة، وتوضح مكان كل منهما، وتستعرض كيفية دمج Newman في مسار CI/CD.
ما هو Postman
Postman هي منصة رسومية لواجهة برمجة التطبيقات (API). تقوم بتثبيتها كتطبيق سطح مكتب، وتنشئ طلبات، وتنظمها في مجموعات ومجلدات، وتلحق بيئات تحتوي على متغيرات مثل عناوين URL الأساسية والرموز المميزة. بعد كل استجابة، يقوم Postman بتشغيل نصوص اختبار JavaScript التي تكتبها في علامة التبويب "الاختبارات" الخاصة بالطلب.
يتحقق نص اختبار Postman من الاستجابة:
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Order total is a positive number", function () {
const body = pm.response.json();
pm.expect(body.total).to.be.a("number");
pm.expect(body.total).to.be.above(0);
});
تم تصميم Postman للعمل التفاعلي. يقوم المطور الذي يقوم بتصحيح أخطاء نقطة نهاية جديدة بإرسال طلبات، وفحص الاستجابات، وتعديل الرؤوس، والتكرار في ثوانٍ. يحول مهندس ضمان الجودة هذه الطلبات إلى مجموعة اختبار تراجعي محفوظة. تتشارك الفرق مساحات العمل حتى يعمل الجميع من نفس المجموعة. كل ذلك يستفيد من واجهة مرئية. يغطي دليلنا حول كيفية اختبار واجهات برمجة التطبيقات باستخدام Postman سير العمل هذا بعمق.
ما لم يُبنى Postman لأجله هو التنفيذ غير المراقب. تشغيل مجموعة يعني فتح التطبيق والنقر على "Collection Runner". هذا جيد لشخص يجلس على مكتب. ولكنه عديم الفائدة لخادم بناء.
ما هو Newman
Newman هو مشغل المجموعات الرسمي لـ Postman عبر سطر الأوامر. إنه حزمة npm مفتوحة المصدر، مجانية الاستخدام، تقوم بتنفيذ ملفات المجموعات نفسها التي ينتجها Postman. تقوم بتصدير مجموعة كملف JSON، وتسلمها إلى Newman، ويقوم Newman بتشغيل كل طلب وكل نص اختبار، ثم يبلغ عن النتائج إلى جهازك الطرفي.
قم بتثبيته باستخدام npm:
npm install -g newman
تشغيل مجموعة:
newman run orders-api.postman_collection.json \
--environment staging.postman_environment.json
يقوم Newman بتشغيل كل طلب، وينفذ نفس تأكيدات pm.test التي يقوم بها Postman، ويطبع ملخصًا. التفصيل الأساسي هو أن Newman يستخدم نفس محرك التنفيذ مثل Postman، لذلك فإن المجموعة التي تمر في الواجهة الرسومية تتصرف بشكل متطابق في سطر الأوامر. لا يوجد إعادة كتابة ولا لغة اختبار منفصلة.
يخرج Newman أيضًا برمز حالة غير صفري عند فشل أي اختبار. هذا السلوك الواحد هو ما يجعله ذا قيمة للأتمتة: يقرأ نظام البناء رمز الخروج هذا ويفشل البناء عند تأكيد خاطئ. عند النجاح، يخرج برمز صفر ويستمر خط الأنابيب.
مقارنة جنبًا إلى جنب
| الجانب | Postman | Newman |
|---|---|---|
| الواجهة | تطبيق سطح مكتب رسومي | سطر أوامر، بدون واجهة مستخدم |
| الاستخدام الأساسي | التأليف، التصحيح، الاستكشاف | التنفيذ الآلي وغير المراقب |
| حيث يعمل | جهاز المطور | خوادم CI، الأجهزة الطرفية، المجدولات |
| التكلفة | طبقة مجانية بالإضافة إلى خطط مدفوعة | مفتوح المصدر، مجاني بالكامل |
| التثبيت | مثبت سطح المكتب | حزمة npm |
| نصوص الاختبار | تُكتب وتُشغل في التطبيق | تشغل نفس النصوص بدون واجهة |
| التقارير | جزء النتائج في التطبيق | إخراج طرفي بالإضافة إلى مكونات إضافية للمُبلغين |
| الأفضل في | التكرار التفاعلي | التشغيل المتكرر والقابل للبرمجة |
ملف JSON للمجموعة هو الجسر بينهما. تقوم ببنائه مرة واحدة في Postman، ويقوم Newman بتشغيله إلى الأبد في الأتمتة.
كيف يتناسب Newman مع CI/CD
يوجد Newman بشكل أساسي لوضع اختبارات واجهة برمجة التطبيقات (API) في التكامل المستمر. النمط ثابت عبر موفري الخدمات. تقوم بتسليم ملفات المجموعة والبيئة المصدرة إلى مستودعك، وتثبت Newman في خط الأنابيب، وتشغله، وتجعل رمز الخروج يتحكم في عملية البناء.
فيما يلي سير العمل كخطوات مرقمة:
- التصدير من Postman. في Postman، قم بتصدير مجموعتك وبيئتها كملفات JSON.
- تسليمها إلى المستودع. قم بتخزينها بجانب التعليمات البرمجية الخاصة بك بحيث تكون لها إصدارات مع واجهة برمجة التطبيقات.
- تثبيت Newman في خط الأنابيب. أضف
npm install -g newmanإلى مهمة CI، أو استخدم صورة Dockerpostman/newman. - تشغيل المجموعة. استدعِ
newman runباستخدام ملفات المجموعة والبيئة. - التحكم برمز الخروج. إذا فشل أي اختبار، يخرج Newman برمز غير صفري ويقوم موفر CI بوضع علامة "فشل" على عملية البناء.
تبدو خطوة GitHub Actions هكذا:
- name: Run API tests
run: |
npm install -g newman
newman run orders-api.postman_collection.json \
--environment staging.postman_environment.json \
--reporters cli,junit \
--reporter-junit-export results.xml
علامة --reporters تستحق المعرفة. يشحن Newman مع مُبلغين مدمجين لـ CLI و JUnit XML، ويضيف مُبلغو المجتمع إخراج HTML والمزيد. يسمح JUnit XML على وجه الخصوص للوحات معلومات CI بعرض نتائج الاختبار بشكل أصلي. للحصول على شرح كامل، راجع دليلنا حول أتمتة اختبارات API في CI/CD وتفاصيل أتمتة اختبارات API باستخدام GitHub Actions.
خيارات سطر أوامر Newman المفيدة
يمتلك Newman مجموعة من العلامات التي تتعامل مع الجوانب الصعبة للتنفيذ الآلي. معرفة عدد قليل منها يصنع الفارق بين مهمة هشة ومهمة موثوقة.
توجه علامة --iteration-data برنامج Newman إلى ملف CSV أو JSON وتشغل المجموعة بأكملها مرة واحدة لكل صف، مع استبدال قيم الصف كمتغيرات. هذه هي الطريقة التي تقوم بها بتشغيل Newman المستند إلى البيانات: مجموعة واحدة، العديد من المدخلات. تعمل علامة --iteration-count ببساطة على تكرار المجموعة عددًا ثابتًا من المرات.
تخبر علامة --bail برنامج Newman بالتوقف عند الفشل الأول بدلاً من تشغيل بقية المجموعة. في مسار رد فعل سريع، هذا غالبًا ما تريده، حيث أن طلبًا واحدًا معطلًا يعني عادةً أن عملية البناء ستفشل بالفعل. تحدد علامة --timeout-request المدة القصوى التي يمكن أن يستغرقها أي طلب واحد، مما يحمي المهمة من التوقف عند خدمة غير مستجيبة.
تقوم علامة --delay-request بإدراج وقفة بين الطلبات، وهي مفيدة عندما تفرض واجهة برمجة التطبيقات حدودًا للمعدل. وتسمح لك --folder بتشغيل مجلد مسمى فقط داخل مجموعة، بحيث يمكن لمهمة اختبار سريع (smoke-test) تشغيل مجموعة فرعية صغيرة بينما تشغل مهمة الانحدار الكاملة كل شيء. لا توجد أي من هذه الخيارات في "Collection Runner" بواجهة Postman الرسومية بنفس الشكل القابل للبرمجة، وهي معًا السبب في أن Newman هو الخيار العملي للتنفيذ غير المراقب.
أخطاء شائعة عند الانتقال من Postman إلى Newman
تظهر بعض المشاكل مرارًا وتكرارًا عندما تقوم الفرق لأول مرة بنقل مجموعة من الواجهة الرسومية إلى Newman. الأكثر شيوعًا هو القيم الثابتة (hardcoded values). الطلب الذي نجح في Postman لأن متغيرًا ما كان مضبوطًا في البيئة النشطة سيفشل في Newman إذا لم يتم تمرير ملف البيئة هذا باستخدام --environment. قم دائمًا بتصدير وتوفير البيئة بشكل صريح.
الثاني هو الاعتماد على سحابة Postman. المجموعات التي تشير إلى متغيرات متزامنة مع السحابة أو تستخدم ميزات مرتبطة بجلسة Postman مسجلة الدخول قد لا تتصرف بنفس الطريقة عند تشغيلها من ملف JSON عادي. اختبر الملف المصدر محليًا باستخدام Newman قبل الوثوق به في CI.
الثالث هو نسيان أن الملفات المصدرة تصبح قديمة. ملف JSON للمجموعة في مستودعك هو لقطة. إذا قام شخص ما بتعديل المجموعة في Postman ولم يقم بإعادة التصدير، فإن خط الأنابيب يستمر في تشغيل الإصدار القديم. تحل الفرق هذه المشكلة بالانضباط، من خلال التعامل مع التصدير كتسليم مقصود، أو من خلال الانتقال إلى أداة يكون فيها تعريف الاختبار والمشغل نفس الشيء.
متى تستخدم كل منهما
استخدم Postman عندما يقوم الإنسان بالعمل. تصميم واجهة برمجة تطبيقات جديدة، تصحيح أخطاء استدعاء فاشل، استكشاف خدمة طرف ثالث، بناء وصقل مجموعة اختبار: كل هذه المهام تفاعلية وتناسب الواجهة الرسومية.
استخدم Newman عندما لا يكون هناك إنسان. تشغيل المجموعة عند كل طلب سحب، أو وفق جدول ليلي، أو كاختبار سريع بعد النشر: كل هذه المهام تحتاج إلى أداة تعمل من خلال نص برمجي وتبلغ النتائج عبر رمز خروج.
في الممارسة العملية، الحدود هي "التأليف مقابل التشغيل". لن تختار واحدًا على حساب الآخر. ستستخدم Postman للإنشاء و Newman للأتمتة، وملف المجموعة يحمل عملك بينهما. إذا كنت تفضل عدم الاحتفاظ بمشغل منفصل على الإطلاق، فإن دليلنا حول تشغيل مجموعات Postman في CI بدون Newman يغطي خيارات أخرى.
بديل موحد: Apidog
تتضمن صيانة إعداد Postman-plus-Newman تصدير المجموعات، ومزامنة ملفات JSON، وإدارة مشغل منفصل. يجمع Apidog كل ذلك في منصة واحدة. تقوم بتصميم واجهات برمجة التطبيقات، وتصحيح أخطاء الطلبات، وبناء سيناريوهات اختبار آلية باستخدام تأكيدات مرئية في نفس التطبيق، ثم تشغيل تلك السيناريوهات في CI/CD باستخدام مشغل سطر الأوامر المدمج. لا توجد خطوة تصدير ومزامنة لأن تعريفات الاختبار ومحرك التنفيذ يعيشان معًا.
يغطي Apidog أيضًا تصميم واجهة برمجة التطبيقات (API)، والخوادم الوهمية (mock servers)، واختبار الأداء في نفس مساحة العمل، لذلك فإن الاختبارات الوظيفية التي تقوم بتأليفها هي نفسها التي يشغلها مسار عملك. يمكنك تنزيل Apidog واستخدام ميزات الاختبار الخاصة به مجانًا. لمقارنة الأدوات في هذا المجال، راجع قائمتنا لأفضل بدائل Postman لاختبار API.
الأسئلة الشائعة
هل Newman بديل لـ Postman؟
لا. لا يمكن لـ Newman إنشاء أو تعديل المجموعات؛ بل يقوم بتشغيلها فقط. لا يزال يتعين عليك استخدام Postman، أو أداة أخرى، لتأليف المجموعة وكتابة نصوص الاختبار. وظيفة Newman هي تنفيذ هذا العمل المكتمل بدون واجهة رسومية. هما مكملان، وليسا قابلين للتبديل.
هل يكلف Newman مالاً؟
لا. Newman مفتوح المصدر ومجاني تمامًا. يتم توزيعه كحزمة npm. يحتوي Postman على طبقة مجانية بالإضافة إلى خطط مدفوعة للفرق الكبيرة، ولكن Newman نفسه لا يكلف شيئًا بغض النظر عن كيفية استخدامه.
هل ستتصرف اختبارات Postman الخاصة بي بنفس الطريقة في Newman؟
نعم. يستخدم Newman نفس محرك التنفيذ مثل Postman، لذلك تعمل تأكيدات pm.test ومنطق الطلب بشكل متطابق. المجموعة التي تنجح في Postman Collection Runner ستنتج نفس النتائج في Newman، وهذا ما يجعله آمنًا لـ CI.
كيف يبلغ Newman عن حالات فشل الاختبار؟
يطبع Newman ملخصًا إلى الجهاز الطرفي ويخرج برمز حالة غير صفري عند فشل أي اختبار. رمز الخروج هذا هو كيفية اكتشاف أنظمة CI للفشل. يدعم Newman أيضًا المُبلغين (reporters)، بما في ذلك JUnit XML و HTML، بحيث يمكن للنتائج تغذية لوحات المعلومات وتقارير البناء.
هل يمكنني تشغيل Newman بدون تثبيت Node.js؟
Newman هو حزمة npm، لذا يتطلب التثبيت المباشر Node.js. لتجنب ذلك، استخدم صورة Docker الرسمية postman/newman، التي تحتوي على كل شيء. يعد نهج Docker شائعًا في بيئات CI حيث لا ترغب في إدارة وقت تشغيل Node.js في مهمة البناء.
