باستخدام SoapUI مع Selenium لاختبار خدمة الويب

⚡ ملخص ذكي

SoapUI مع Selenium تتيح هذه الأداة فحص خدمة الويب والمتصفح الذي يستخدمها. Groovy هو الجسر، لأن SoapUI يدير Groovy بشكل طبيعي و Groovy يصل إلى كل Java مكتبة Selenium السفن.

  • 🔘 أداتان، طبقتان: SoapUI يُفعّل نقطة نهاية SOAP أو REST، بينما Selenium يقوم برنامج WebDriver بتشغيل المتصفح الذي يستدعيه.
  • ☑️ Groovy هو الغراء: SoapUI وتدعم Groovy على نطاق واسع، و Groovy يحمل الكل Java مجموعة المكتبة، لذلك Selenium يعمل الكود دون تغيير.
  • ✅ فئة العدائين: SoapUIيفتح برنامج TestCaseRunner ملف المشروع، ويختار مجموعة اختبار وحالة اختبار، ثم ينفذها من Java.
  • 🧪 البيانات الديناميكية: تقوم الدالة setProjectProperties() بتمرير قيم مثل المدينة والرمز البريدي في وقت التشغيل بدلاً من تمريرها من ملف خصائص ثابت.
  • 🛠️ المتطلبات الأساسية: استخدم Groovy SDK، وهو JDK، Selenium و SoapUI يجب تثبيت كل شيء قبل التشغيل الأول.
  • 📊 مسار الأدلة: يتم تسجيل كل إجراء في ملف soapui.log الموجود في مجلد bin الخاص بدليل التثبيت.

باستخدام SoapUI مع Selenium لاختبار خدمات الويب من خلال Groovy

SoapUI هو المصدر المفتوح الأكثر شيوعًا الاختبار الوظيفي أداة ل اختبار API. ويقدم كاملة تغطية الاختبار ويدعم جميع البروتوكولات والتقنيات القياسية.

ما هو SOAP؟

صابون هو بروتوكول بسيط قائم على لغة XML. يسمح للتطبيقات بتبادل المعلومات عبر بروتوكول HTTP. وهو يستخدم خدمات الويب. Descriptلغة ION (WSDL) للتواصل، ويمكن للتطبيقات الأخرى التفاعل معها خدمات ويب من خلال واجهة WSDL هذه.

خدمات الويب SOAP مقابل REST SoapUI

SoapUI بدأ كعميل SOAP، ولا يزال اسمه يشير إلى ذلك، ولكنه يختبر نقاط نهاية REST أيضًا. معرفة النمط الذي تشير إليه يحدد كيفية بناء الاختبار.

البعد صابون REST
نوع العقد يصف ملف WSDL كل عملية، لذلك SoapUI يمكن إنشاء الطلبات تلقائيًا. عادةً ما يكون تعريف OpenAPI أو Swagger، أو لا يوجد تعريف رسميtracر على الإطلاق.
تنسيق الرسالة مغلف XML فقط. عادةً ما يكون JSON، على الرغم من السماح بـ XML وتنسيقات أخرى.
النقل في أغلب الأحيان يتم استخدام بروتوكول HTTP، لكن بروتوكول SOAP مستقل عن وسيلة النقل. بروتوكول نقل النص التشعبي (HTTP)، مع الطريقة و URL يحمل النية.
الادعاءات في SoapUI يتطابق XPath و XQuery مع غلاف الاستجابة. تتطابق تأكيدات JSONPath والنصوص البرمجية مع الحمولة.
الاستخدام النموذجي الخدمات المصرفية والاتصالات وغيرها من الصناعاتtracعمليات تكامل المؤسسات التي تعتمد بشكل كبير على المعاملات. الخدمات العامة والموجهة للهواتف المحمولة حيث تبقى الحمولة خفيفة.

يستخدم الشرح الموضح أدناه خدمة طقس SOAP، ولكن نفس فئة التشغيل تُشغّل حالة اختبار REST دون أي تغيير في Java رمز.

ما هو الصابون؟

صابوني هي أداة مفتوحة المصدر لاختبار خدمات الويب متعددة المنصات. يتميز إصدار SOAPUI-Pro بوظائف إضافية للشركات التي تتعامل مع خدمات الويب الحيوية. تلعب خدمات الويب دورًا هامًا في تطبيقات الإنترنت.

⚠️ ملاحظة بخصوص اسم المنتج: تم إيقاف إنتاج سمارت بير SoapUI برو كمنتج مستقل، ثم دمجناه مع LoadUI Pro و ServiceV Pro في ReadyAPIتحتفظ النسخة المجانية بـ SoapUI الاسم ولا يزال متاحًا بشكل فعال. الخطوات أدناه تعمل في كليهما، والموجودة SoapUI المشاريع المفتوحة في ReadyAPI.

ما هي تفاصيل Selenium?

Selenium ليس برنامجًا واحدًا، بل مجموعة من الأدوات للتحكم في المتصفح كما يفعل الإنسان. عنصران أساسيان هنا:

  • Selenium — أداة اختبار تعمل على أتمتة المتصفحات عبر العديد من المنصات.
  • Selenium ويب درايفر — يقوم بإجراء مكالمات مباشرة إلى المتصفحات، باستخدام الدعم الأصلي لكل متصفح للأتمتة.

لماذا الجمع SoapUI و Selenium في اختبار واحد

عادةً ما يكون فحص الخدمة وفحص الشاشة مهمتين منفصلتين تُنفذان بواسطة مجموعتين منفصلتين من البرامج، ولهذا السبب يميل الخلل في الوصلة بينهما إلى الظهور في كلتيهما. أما تشغيلهما معًا فيسد هذه الفجوة.

  • أثبت الرحلة ذهابًا وإيابًا. يجب أن يظهر الحجز المُرسل عبر المتصفح في استجابة الخدمة. ولا يمكن التأكد من صحة كلا الجزأين إلا من خلال اختبار مُدمج.
  • قم بإعداد الحالة بسرعة. إنشاء عميل من خلال واجهة برمجة التطبيقات يستغرق ثانية واحدة؛ أما إنشاء حقول نموذج من واحد إلى اثني عشر حقلاً فيستغرق دقيقة واحدة ويفشل في كثير من الأحيان.
  • حدد موقع العطل. عندما تعرض واجهة المستخدم المجموع الخاطئ، فإن تأكيد واجهة برمجة التطبيقات في نفس التشغيل يخبرك على الفور ما إذا كانت الخدمة أو الصفحة هي المخطئة.
  • أعد استخدام مجموعة بيانات واحدة. تُستخدم أزواج الرمز البريدي والمدينة في المثال أدناه لتغذية استدعاء الخدمة، ويمكن استخدامها بنفس القدر لتغذية تأكيدات المتصفح.
  • قصّ التغطية المكررة. لا تحتاج قواعد التحقق التي تم إثباتها بالفعل على مستوى طبقة الخدمة إلى اختبار بطيء للمتصفح لكل منها.

المقابل هو اختبار أكثر تعقيدًا: أداتان، ومجموعتان من التبعيات، وفترة تشغيل أطول. احتفظ بالاختبارات المجمعة لعدد قليل من الرحلات التي تتجاوز الحدود بالفعل، واترك الباقي كاختبارات مستقلة. API أو عمليات فحص المتصفح البحتة.

Selenium مع SoapUI

أبسط وأسهل طريقة للتكامل Selenium مع SoapUI هو استخدام Groovy، التي SoapUI يدعم بشكل واسع.

Groovy هي لغة برمجة نصية كائنية التوجه تتضمن جميع Java المكتبات، لذلك كل Java يمكن استخدام الكلمة المفتاحية والدالة في Groovy يتم تشغيل البرنامج النصي مباشرةً. يعمل على JVM (Java الآلة الافتراضية)، وهو ما يسمح بـ Groovy ادخل إلى الداخل SoapUI و Java Selenium اختبار مشاركة نفس الفئات.

المتطلبات المسبقة للاستخدام Selenium مع SoapUI

قم بتثبيت ما يلي قبل كتابة أي كود:

⚠️ ملاحظة حول الإصدار: Groovy الإصدار 5.0 هو الإصدار المستقر الحالي ويتطلب JDK 11 أو أحدث، لذا قم بتثبيت JDK أولاً ودعه يعمل. Groovy اتبع النسخة. Selenium يُضاف إلى Java المشروع كـ Maven أو Gradle بدلاً من كونه مجلدًا تم تنزيله، و SoapUI يجب أن يكون ملف jar موجودًا في نفس مسار الفئة الخاص باختبارك - هذه النقطة الوحيدة هي التي تفشل عندها معظم المحاولات الأولى.

اتصل ب SoapUI مُشغِّل حالات الاختبار في Selenium

الكود أدناه يستدعي SoapUI حالة اختبار. تُحدد هذه الحالة خصائص مدينة ورمزها البريدي، وعند تنفيذها تسترجع قيمة كل مدينة ورمزها البريدي، ثم تُبلغ عن عدد حالات الفشل لكل زوج غير متطابق. يتم تشغيل هذا الكود في Selenium.

ملاحظة: يُستخدم هنا الخيار usePropertyFileFlag=true بدلاً من ملف خصائص ثابت لتخزين الرمز البريدي والمدينة. ويتم تمرير الرمز البريدي والمدينة ديناميكيًا أثناء التشغيل بواسطة الدالة setProjectProperties().

تعليمات تشغيل الكود:

  1. المؤسساات الناشئة SoapUI.
  2. ابدأ حالة اختبار جديدة.
  3. أضف تعليقا جديدا Groovy خطوة.
  4. انسخ والصق نموذج التعليمات البرمجية في الخطوة.
  5. انقر على تشغيل.
  6. يمكنك ان ترى Firefox بدء التشغيل والتنقل إلى Googleبعد ذلك، يمكنك رؤية SoapUI سجلات الإدخالات.
  7. يتم تشغيل الكود باستخدام JUnit.

Code مثال

@when("<I use the weather service to get the weather information")						
    public void i_use_the_weather_service_to_get_the_information() {
        Set<Entry<String, string>> set = zipAndCities.entrySet();
        while (iterator,hasNext)) {
            Entry<String, String> entry = iterator.next();
            String zipCode = entry.getkey();
            String city = entry.getValue();
            String[] prop = {"usePropertyFileFlag=true","zipCode=" +zipCode, "city=" +city};									
            
            try{
                SoapUITestCaseRunner soapUITestCaseRunner = new	SoapUITestCaseRunner();
                soapUITestCaseRunner.setProjectFile("src/test/resources/WeatherSoapTest-soapui-project.xml");					
                soapUITestCaseRunner.setProjectProperties(prop);
                soapUITestCaseRunner.setTestSuite("TestSuite1");
                soapUITestCaseRunner.setTestCase("TestCase1");
                soapUITestCaseRunner.run();
                
            } catch (Exception e) {
                System.err.println("checking" + zipCode + " failed!");
                failureCount++;
                zipCodes.append(zipCode + " [" + city +"] ");
                e.printStackTrace();
            }finally{					
                totalCount++;
            }
}
}
}

⚠️ Code ملاحظة: تمت إعادة إنتاج هذا المقتطف تمامًا كما نُشر، وهو عبارة عن جزء وليس فئة قابلة للتجميع. قبل أن يتم تجميعه، يجب عليك تعريف المُكرِّر الذي تم الحصول عليه من set.iterator()، صحيح بينما (المكرر، لديه التالي)) إلى بينما (يحتوي المُكرِّر على عنصر تالٍ) و entry.getkey() إلى entry.getKey()، اكتب التعليق بأحرف كبيرة كما يلي @متىقم بإزالة الحرف الزائد في بداية نص الخطوة، واستخدم خيط بدلا من سلسلة في تعريف المجموعة. يتم الاحتفاظ بالنص الأصلي حتى يبقى المثال المنشور سليماً.

تتيح لك شاشة العرض الرئيسية إلقاء نظرة سريعة على جميع حالة اختبارتم تنفيذ الأمر. ستجد قائمة بالرموز البريدية والمدن التي تم جلبها وتمريرها إلى SoapUI حالة الاختبار 1.

عرض الطلب SoapUI ملف تسجيل

تسجل ملفات السجل كل إجراء يحدث في نظام التشغيل أو تطبيق البرنامج. لعرض SoapUI ملف السجل، انتقل إلى الدليل الرئيسي، حيث ستجد ملفًا باسم ملف سجل soapui.log.

SoapUI قائمة دليل التثبيت مع عرض ملف soapui.log

In SoapUIيوجد ملف السجل في مجلد bin داخل دليل التثبيت، على سبيل المثال C:\Program Files\SmartBear\soapUI-Pro-4.0.1\bin. يختلف مجلد الإصدار في التثبيت الحالي، و ReadyAPI بدلاً من ذلك، يقوم برنامج التثبيت بالكتابة إلى مجلد bin الخاص به.

مجلد bin الخاص بـ SoapUI دليل التثبيت حيث يتم تخزين ملف السجل

عند فتح ملف السجل هذا بالنقر عليه، سيبدو مشابهًا للقطة الشاشة أدناه.

محتويات ملف soapui.log الذي يعرض إدخالات تشغيل الاختبار المسجلة

في SoapUI و Selenium التكامل غالباً ما يفشل

معظم الأعطال في هذه المرحلة تكون بسبب مشاكل في التوصيلات الكهربائية وليست مشاكل في الاختبار. هذه هي المشاكل التي يجب فحصها أولاً.

عرض سبب محتمل ماذا يجب التحقق منه
خطأ NoClassDefFoundError أو ClassNotFoundException SoapUIمُشغِّل حالات الاختبار استخدم SoapUI ملف jar غير موجود في مسار فئة الاختبار. إضافة SoapUI الاعتماد على ملف البناء، أو توجيه مسار الفئة إلى ملف jar في SoapUI مجلد lib. يظهر ملف jar مفقودًا كأي ملف عادي. Selenium استثناء في وحدة التحكم.
لا يمكن العثور على ملف المشروع تقوم الدالة setProjectFile() بحل مسار نسبي مقابل دليل العمل، وهو ما يختلف بين بيئة التطوير المتكاملة وأداة البناء. قم بتشغيله من جذر المشروع، أو مرر مسارًا مطلقًا.
لم يتم العثور على مجموعة الاختبارات أو حالة الاختبار يجب أن تتطابق الأسماء في setTestSuite() و setTestCase() مع المشروع تمامًا. انسخ الأسماء مباشرة من SoapUI شجرة المشروع؛ وهي حساسة لحالة الأحرف.
لا تصل الخدمة إلى الطلب أبدًا تم تشغيل setProjectProperties() بعد run()، أو أن الطلب لا يشير إلى الخاصية. قم بتعيين كل خاصية قبل تشغيل الدالة run()، واستخدم صيغة العنصر النائب للخاصية داخل الطلب.
المتصفح لا يبدأ يختلف إصدار برنامج التشغيل عن إصدار المتصفح المثبت. اسمحوا Selenium يقوم المدير بحل مشكلة برنامج التشغيل، أو مطابقة برنامج التشغيل مع إصدار المتصفح.
تعمل إحدى الميزات في بيئة التطوير المتكاملة (IDE) ولكنها لا تعمل من خلال برنامج التشغيل (runner). تعتمد هذه الخطوة على ميزة خاصة بالإصدار الاحترافي فقط، مثل مصدر البيانات. قم بتأكيد الترخيص، أو أعد بناء الخطوة باستخدام بدائل مفتوحة المصدر.

بمجرد أن يخرج برنامج التشغيل بشكل سليم ويظهر ملف soapui.log الإدخالات المتوقعة، يكون التكامل قد نجح ويمكن دمجه في نظام أوسع اختبار الأتمتة جناح.

الأسئلة الشائعة

يعمل الإصدار مفتوح المصدر Groovy يُتيح هذا البرنامج خطوات تشغيل حالات الاختبار، لذا لا يحتاج التكامل نفسه إلى ترخيص. (إصدار احترافي أو إصدار عادي) ReadyAPI تُعدّ ميزات مثل مصادر البيانات والمعالج القائم على البيانات من الأجزاء التي ستفشل بدونها.

نعم، وهي صورة معكوسة لهذا الشرح. Groovy يمكن للخطوة إنشاء مثيل لـ WebDriver مباشرةً، بشرط أن Selenium توضع الجرار في SoapUI مجلد lib حتى يتمكن البرنامج النصي من حلها.

SoapUI ينفذ Groovy بشكل أصلي في خطوة البرمجة النصية، بدون دورة تجميع، و Groovy يصل إلى كل Java الفئة موجودة بالفعل في مسار الفئات. عادي Java يتطلب الأمر خطوة بناء، ولهذا السبب Groovy يفوز الكود التكاملي القصير.

لفها على شكل JUnit or TestNG اختبر ودع Maven أو Gradle قم باستدعائه، تمامًا كما في المثال. يجب أن يعمل المتصفح على الجهاز الوكيل بدون واجهة رسومية، و SoapUI يجب حفظ ملف المشروع مع كود الاختبار.

تُعدّ المساعدات مفيدة لتوسيع نطاق تغطية مجموعة صغيرة من أزواج المدن والرموز البريدية، ولتحديد حقول الاستجابة التي لا تتضمن أي تأكيدات. مع ذلك، لا تزال القيم المُولّدة بحاجة إلى فحص دقيق، لأن الرمز البريدي الذي يبدو معقولاً ليس بالضرورة رمزاً صالحاً.

نعم، ضمن حدود معينة. يتولى مساعد الطيار هذه المهمة. Groovy بناء الجملة والمصطلحات الشائعة Java يتصل بشكل جيد، لكنه لا يملك سوى القليل من المعرفة بـ SoapUI كائنات البرمجة النصية مثل testRunner والسياق والسجل، لذا فإن هذه الاقتراحات تحتاج إلى مراجعة دقيقة.

قم بتخزينها كمتغيرات بيئية أو في مدير أسرار، ثم اقرأها في خصائص المشروع أثناء التشغيل، وهي نفس الآلية التي تستخدمها دالة setProjectProperties() هنا. يُعد ملف المشروع المُلتزم به والذي يحتوي على كلمة مرور نصية عادية ثغرة أمنية محتملة.

احتفظ بفحوصات مستوى البروتوكول - الحالة، والمخطط، وXPath على الغلاف - في الداخل SoapUIحيث يتم تصميم الأدوات خصيصًا لهم. تأكد في Selenium اختبر فقط ما يجب أن يعرضه المتصفح نفسه، لذا فإن الفشل يشير إلى طبقة واحدة.

تلخيص هذه التدوينة بـ: