ملخص سريع
تحاكي خدمات SoapUI الوهمية نقاط نهاية SOAP أو REST محليًا، ولكنها تتطلب عملية Java قيد التشغيل، وتكوين إرسال يدوي، ولا يمكن مشاركتها عبر الفريق دون جهاز مشترك. تُنشئ المحاكاة الذكية من Apidog استجابات وهمية من مخطط API الخاص بك، وتعمل في السحابة، وتتم مشاركتها تلقائيًا مع فريقك.
مقدمة
تحل خدمات المحاكاة مشكلة شائعة في تطوير واجهات برمجة التطبيقات: فأنت ترغب في اختبار كيفية تعامل رمز العميل الخاص بك مع خدمة ما قبل أن تكون هذه الخدمة جاهزة، أو ترغب في اختبار الحالات الحدية (الأخطاء، الاستجابات البطيئة) دون التسبب فيها في نظام حقيقي.
تتوفر ميزة خدمة المحاكاة في SoapUI منذ الإصدارات الأولى وهي تعمل. إنها تشغل خادم HTTP محليًا يستجيب للطلبات وفقًا للقواعد التي تقوم بتكوينها. المشكلة هي أن هذه العملية المحلية تخلق احتكاكًا: تتوقف عند إغلاق SoapUI، ولا يمكن لأعضاء الفريق الآخرين الوصول إليها بدون حيل الشبكة، وواجهة التكوين مرهقة.
يغطي هذا الدليل كيفية عمل خدمات SoapUI الوهمية، وكيفية إعدادها، والمشاكل الشائعة التي تواجهها الفرق، وكيفية مقارنة نهج Apidog.
كيف تعمل خدمات SoapUI الوهمية
يُنشئ SoapUI خدمات وهمية من واجهات SOAP أو REST الموجودة في مشروعك. خدمة المحاكاة:
- يستمع على منفذ محلي تقوم بتكوينه (على سبيل المثال،
http://localhost:8088/MockService) - يعترض الطلبات الواردة
- يطابق الطلب مع "استجابة وهمية" باستخدام منطق الإرسال
- يُرجع الاستجابة المكونة
بالنسبة لخدمات SOAP، يمكن لـ SoapUI إنشاء استجابات وهمية تلقائيًا من ملف WSDL الخاص بك، مما يُنشئ استجابات مؤقتة لكل عملية. وهذا مفيد لمحاكاة خدمة قبل وجودها أو قبل أن تتمكن من الوصول إلى نقطة النهاية الحقيقية.
إعداد خدمة SoapUI الوهمية (خطوة بخطوة)
لواجهة SOAP
- في مشروع SoapUI الخاص بك، انقر بزر الماوس الأيمن على واجهة SOAP في شجرة المشروع.
- اختر "إنشاء خدمة وهمية (MockService)".
- في مربع الحوار، قم بتكوين:
- اسم الخدمة (على سبيل المثال، "OrderService Mock")
- رقم المنفذ (الافتراضي هو 8088؛ قم بالتغيير إذا كان هذا المنفذ قيد الاستخدام)
- المسار (على سبيل المثال،
/orders)
- انقر موافق. ينشئ SoapUI عقدة MockService في شجرة المشروع الخاص بك.
- قم بتوسيع عقدة MockService. سترى "عملية وهمية (MockOperation)" لكل عملية SOAP في الواجهة.
- انقر نقرًا مزدوجًا على MockOperation لفتح محرر الاستجابة الوهمية.
- قم بتحرير XML استجابة SOAP لإرجاع القيم التي تريد محاكاتها.
- انقر على زر التشغيل الأخضر في محرر MockService لبدء الخادم المحلي.
أصبحت محاكاتك تعمل الآن على http://localhost:8088/orders. وجه رمز العميل الخاص بك إلى عنوان URL هذا.
لواجهة REST
- انقر بزر الماوس الأيمن على واجهة REST أو مورد في شجرة المشروع.
- اختر "إضافة إلى خدمة وهمية (MockService)" أو "إنشاء خدمة وهمية (MockService)".
- قم بتكوين المنفذ والمسار كما هو موضح أعلاه.
- لكل مورد/طريقة، قم بتكوين نص الاستجابة الوهمية ورمز الحالة.
- ابدأ خدمة المحاكاة.
تكوين الإرسال
بشكل افتراضي، تُرجع خدمة المحاكاة في SoapUI أول استجابة وهمية تجدها. إذا كنت تريد استجابات مختلفة لمدخلات مختلفة، فقم بتكوين "نص إرسال" (Groovy) أو استخدم نوع الإرسال "SEQUENCE".
إرسال تسلسلي: يُرجع الاستجابات بترتيب ثابت في المكالمات المتتالية. تحصل المكالمة 1 على الاستجابة A، وتحصل المكالمة 2 على الاستجابة B.
إرسال بالنص البرمجي: يفحص نص Groovy البرمجي الطلب ويُرجع اسم استجابة بناءً على المنطق.
مثال على نص إرسال:
def request = mockRequest.getRequestContent()
if (request.contains("orderId>12345")) {
return "OrderFoundResponse"
} else {
return "OrderNotFoundResponse"
}
يمكنك إنشاء استجابات وهمية متعددة بأسماء (مثل "OrderFoundResponse," "OrderNotFoundResponse") ويقوم نص الإرسال باختيار أي منها يتم إرجاعه بناءً على محتوى الطلب الوارد.
المشاكل الشائعة في خدمة SoapUI الوهمية
المشكلة 1: توقف الخدمة الوهمية عند إغلاق SoapUI
تعمل خدمة المحاكاة في SoapUI كجزء من عملية SoapUI JVM. عند إغلاق SoapUI، تتوقف المحاكاة. يفقد أعضاء الفريق الذين يستخدمون المحاكاة الوصول إليها.
حلول بديلة:
- أبقِ SoapUI مفتوحًا على جهاز مخصص أو جهاز افتراضي
- استخدم خيار خادم المحاكاة عبر سطر الأوامر في SoapUI:
mockservicerunner.sh -p 8088 -s "OrderService Mock" project.xml - استخدم جهازًا مشتركًا دائمًا يُشغل المحاكاة
لا شيء من هذه الحلول أنيق. يساعد خيار سطر الأوامر، لكنه لا يزال يتطلب جهازًا مثبتًا عليه SoapUI و Java.
المشكلة 2: مشاركة الخدمة الوهمية عبر الفريق
يمكن الوصول إلى المحاكاة على localhost:8088 فقط للشخص الذي يقوم بتشغيلها. لكي يتمكن أعضاء الفريق من الوصول إلى نفس المحاكاة، تحتاج إلى وصول شبكة إلى هذا الجهاز (قواعد جدار الحماية، إعداد VPN) أو تشغيل المحاكاة على خادم مشترك.
المشكلة 3: تتعطل نصوص الإرسال مع XML المعقدة
تستخدم نصوص الإرسال في SoapUI مطابقة سلاسل Groovy على نص XML الخام. تحتوي مظاريف SOAP على مساحات أسماء، ويمكن أن تظهر نفس القيمة المنطقية ببادئات مساحة اسم مختلفة اعتمادًا على العميل. تتعطل النصوص التي تبحث عن سلاسل حرفية مثل <orderId>12345</orderId> عندما يختلف البادئة.
يتطلب الإصلاح تحليل XML مناسبًا في نص الإرسال باستخدام فئة GroovyUtils في SoapUI، مما يزيد من التعقيد.
المشكلة 4: الحالة لا تستمر بين المكالمات
خدمات المحاكاة في SoapUI عديمة الحالة بشكل افتراضي. إذا كنت ترغب في محاكاة سير عمل إنشاء ثم قراءة (POST للإنشاء، GET للاسترداد)، فأنت بحاجة إلى نص إرسال Groovy يقوم بتخزين الحالة في متغير مشترك. هذا يعمل ولكنه هش.
المشكلة 5: SSL لخدمات المحاكاة
يتطلب تكوين HTTPS لخدمة محاكاة SoapUI إعداد مخزن مفاتيح، وتكوين إعدادات SSL في SoapUI، وتوجيه العملاء إلى الشهادة الصحيحة. هذا أكثر تعقيدًا بكثير من المحاكاة التي تعتمد على HTTP فقط.
المحاكاة الذكية من Apidog: كيف تقارن
يبدأ نهج المحاكاة في Apidog من تصميم واجهة برمجة التطبيقات، وليس من عملية قيد التشغيل.
عند تحديد نقطة نهاية API في Apidog (طريقة، مسار، مخطط طلب، مخطط استجابة)، تُنشئ Apidog تلقائيًا نقطة نهاية وهمية في السحابة. لا يلزم أي تكوين.
يبدو عنوان URL للمحاكاة كما يلي: https://{your-project}.mock.apidog.io/orders/{id}
عنوان URL هذا:
- يعمل دائمًا (لا توجد عملية محلية للبدء أو الإيقاف)
- يمكن الوصول إليه من قبل كل عضو في الفريق لديه صلاحية الوصول إلى المشروع
- توليد الاستجابات من المخطط الذي حددته
كيف تُنشئ Apidog استجابات وهمية
تقرأ Apidog مخطط الاستجابة الخاص بك (مخطط JSON أو تعريف استجابة OpenAPI) وتُنشئ بيانات وهمية واقعية. يعيد المخطط الذي يشير إلى أن orderId هو سلسلة بتنسيق UUID قيمة UUID عشوائية. ويعيد المخطط الذي يشير إلى أن amount هو رقم بين 0 و 10000 رقمًا ضمن هذا النطاق.
يمكنك أيضًا تكوين قواعد محاكاة مخصصة لحقول محددة. قم بتعيين orderId لإرجاع "test-123" دائمًا عندما تحتاج إلى قيمة يمكن التنبؤ بها.
نقاط نهاية SOAP في محاكاة Apidog
صُممت المحاكاة الذكية من Apidog لنقاط نهاية REST مع استجابات JSON. أما بالنسبة لنقاط نهاية SOAP، فإن إعداد المحاكاة يدوي: تقوم بإنشاء طلب في Apidog، وتكوين استجابة مخصصة بظرف SOAP، وتستخدم خادم المحاكاة في Apidog لإرجاعها.
هذا أقل تلقائية من إنشاء المحاكاة المستندة إلى WSDL في SoapUI، لكنه يعمل للفرق التي تحتاج إلى محاكاة SOAP بسيطة دون تشغيل عملية Java محلية.
المحاكاة ذات الحالة
تدعم Apidog نصوص استجابة مخصصة لسلوك المحاكاة ذات الحالة. يمكنك فحص نص الطلب في نص محاكاة JavaScript وإرجاع استجابات مختلفة بناءً على محتوى الطلب، على غرار نصوص إرسال SoapUI ولكن بلغة JavaScript.
مقارنة جنبًا إلى جنب
| الميزة | محاكاة SoapUI | محاكاة Apidog الذكية |
|---|---|---|
| يتطلب Java | نعم | لا |
| يعمل دائمًا | فقط مع مشغل سطر الأوامر | نعم (سحابي) |
| يمكن للفريق الوصول إليه | شبكات يدوية | نعم، عبر رابط مشترك |
| توليد WSDL تلقائيًا | نعم | لا |
| يعتمد على مخطط REST | لا | نعم |
| استجابات ديناميكية | إرسال Groovy | نصوص محاكاة JavaScript |
| دعم HTTPS | إعداد مخزن مفاتيح يدوي | مدمج |
| المحاكاة ذات الحالة | عبر متغيرات Groovy | عبر نصوص JavaScript |
| مجاني | نعم | نعم |
متى تستخدم كل منهما
استخدم خدمات محاكاة SoapUI عندما:
- تحتاج إلى محاكاة خدمة SOAP قائمة على WSDL وتريد استجابات وهمية مُنشأة تلقائيًا
- يعمل فريقك دون اتصال بالإنترنت أو خلف قيود شبكة صارمة
- أنت بالفعل متعمق في بيئة SoapUI ولا ترغب في تغيير الأدوات
استخدم المحاكاة الذكية من Apidog عندما:
- يقوم فريقك بمحاكاة نقاط نهاية REST ويحتاج إلى وصول مشترك بدون إعداد شبكة
- تريد خوادم محاكاة تظل تعمل دون تدخل يدوي
- تبدأ مشروعًا جديدًا وتحدد عقد واجهة برمجة التطبيقات قبل التنفيذ
- تريد تجنب تثبيت وصيانة بيئة Java لخدمات المحاكاة
الأسئلة الشائعة
هل يمكنني تشغيل خدمات المحاكاة في SoapUI بدون واجهة رسومية (بدون GUI)؟نعم. يتضمن SoapUI mockservicerunner.sh (لنظامي Linux/macOS) و mockservicerunner.bat (لنظام Windows). قم بتشغيلها باستخدام مسار ملف المشروع واسم الخدمة. لا يزال يتعين عليك تثبيت Java، ولكن لا تحتاج إلى أن تكون الواجهة الرسومية مفتوحة.
هل يدعم Apidog خدمات محاكاة SOAP؟جزئيًا. يمكنك تكوين استجابات مخصصة باستخدام SOAP XML في خادم المحاكاة الخاص بـ Apidog. لا تحصل على إنشاء تلقائي لاستجابات وهمية بناءً على WSDL. بالنسبة للفرق التي لديها واجهات SOAP مفهومة جيدًا، فإن الإعداد اليدوي قابل للإدارة.
هل يمكن لخدمات المحاكاة في SoapUI محاكاة الاستجابات البطيئة؟نعم. في تكوين استجابة المحاكاة، قم بتعيين قيمة "تأخير" بالمللي ثانية. يدعم Apidog أيضًا تكوين تأخير الاستجابة لمحاكاة ظروف الشبكة البطيئة.
كم عدد طلبات المحاكاة التي يمكن لـ Apidog التعامل معها؟يتعامل خادم المحاكاة السحابي الخاص بـ Apidog مع أحمال التطوير والاختبار النموذجية. لاختبار الأداء عالي الحجم، قد يكون استخدام أداة خادم محاكاة مخصصة أكثر ملاءمة.
ماذا يحدث إذا احتاج عضوان في الفريق إلى استجابات محاكاة مختلفة لنقطة النهاية نفسها؟في SoapUI، يقوم كل شخص بتشغيل المحاكاة المحلية الخاصة به ويمكنه تكوينها بشكل مستقل. في Apidog، يمكنك إنشاء بيئات متعددة أو استخدام معلمات الاستعلام لتحديد سيناريوهات استجابة مختلفة. تتيح لك ميزة "Mock expects" في Apidog مطابقة شروط طلب معينة لاستجابات محددة.
هل تتطلب المحاكاة في Apidog تعريف واجهة برمجة التطبيقات بالكامل أولاً؟يساعد مخطط الاستجابة Apidog على إنشاء بيانات واقعية، ولكن يمكنك إنشاء استجابات وهمية يدوية بدون مخطط كامل. حدد نقطة النهاية، وقم بتعيين نص استجابة مخصص، وستعمل المحاكاة.
خدمة المحاكاة في SoapUI عملية ولكنها مرتبطة بعملية Java محلية. بالنسبة للفرق الحديثة التي تحتاج إلى محاكاة مستمرة ومشتركة، يزيل نهج Apidog القائم على السحابة تكلفة التنسيق الإضافية.
