بينما أعمل على مشروع مفتوح المصدر غيثب المبني لإظهار عملية إطار Selenium WebDriver بجافا، وبمجرد نمو المشروع، كانت هناك حاجة لإنشاء متعدد testng.xml لتشغيل تجارب مختلفة.
هذه الملفات المتعددة تم إنشاؤها لفصل الاختبارات وضع كل الاختبارات المتعلقة بموقع ويب محدد في ملف واحد testng.xml (لقد إستخدمت مواقع عرض مختلفة لعرض الإجراءات المختلفة التي يمكن توطينها باستخدام Selenium WebDriver).
فكرت في إلقاء بعض الضوء على استخدام ملفات testng.xml متعددة وكيفية تنفيذ الاختبارات. لأن مافين هو أداة البناء التي تستخدم، يتطلب ملف واحد testng.xml لتشغيل جميع الاختبارات في المشروع. ويوجد أيضًا حالات كان عليا إصلاح الاختبارات الفاشلة بتشغيل ملف testng.xml واحد.
في هذا المشروع، قمت بإنشاء 9 ملفات testng.xml مختلفة تحتوي على اختبارات متعددة، وأنا أجري جميع الاختبارات في هذه 9 ملفات testng.xml مختلفة باستخدام ملف testng.xml واحد. نعم، هذا ممكن!
لذا، إنضموا إلى رحلتي حيث سأقوم بإظهار كيفية تنفيذ ملفات testng.xml متعددة باستخدام ملف testng.xml واحد. سأقوم أيضًا بإلقاء بعض الضوء على تنفيذ ملف testng.xml واحد من ال9 المتاحة وتشغيله من الخط الأوامر باستخدام مافين.
تشغيل ملفات testng.xml متعددة باستخدام ملف testng.xml واحد.
لنحن الأول نركز على جميع الاختبارات مع جميع 9 الملفات testng.xml المختلفة. حل هذه المشكلة هو استخدام ال<suite-files> </suitefiles>
تاج في ملفك testng.xml وتقدم مسار الملف الآخر testng.xml بين هذه التاج. هذا هو مثال الملف لإظهار ما أتحدث عنه:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium 4 POC Tests ">
<suite-files>
<suite-file path="testng-saucedemo.xml"/>
<suite-file path="testng-automationpractice.xml"/>
<suite-file path="testng-theinternet.xml"/>
<suite-file path="testng-juice-shop.xml"/>
<suite-file path="testng-lambdatestecommerce.xml"/>
<suite-file path="testng-seleniumgrid-theinternet.xml"/>
<suite-file path="testng-lambdatest-selenium-playground.xml"/>
<!-- <suite-file path="testng-seleniumgrid-juiceshop.xml"/>-->
</suite-files>
</suite>
حين نقوم بتنفيذ هذا الملف، سيتم تنفيذ الtestng.xml المتعلقة بالترتيب الذي تم تحديثه بين التاج <suite-files>
. إذًا، "testng-saucedemo.xml"
سيتم تنفيذها أولاً، ومن ثم، "testng-automationpractice.xml"
سيتم تنفيذها، وهكذا إلى الأخير.
جميع الملفات testng.xml التي توفر في المثال تحتوي على اختبارات متعددة. لذا، ستتم تنفيذ جميع الاختبارات داخل الtestng.xml المتعلقة وبعد الانتهاء، سيتم اختيار الملف القادم للتنفيذ.
يتضمن محتويات الملف testng-saucedemo.xml التالية:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Sauce Demo Website Tests" parallel="tests" thread-count="4" verbose="2">
<test name="selenium 4 Tests with Chrome Browser">
<parameter name="browser" value="chrome"/>
<classes>
<class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
<methods>
<include name="loginSauceDemoTest"/>
<include name="logOutSauceDemoTest"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Firefox Browser">
<parameter name="browser" value="firefox"/>
<classes>
<class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
<methods>
<include name="loginSauceDemoTest"/>
<include name="logOutSauceDemoTest"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Edge Browser" enabled="false">
<parameter name="browser" value="edge"/>
<classes>
<class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
<methods>
<include name="loginSauceDemoTest"/>
<include name="logOutSauceDemoTest"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
<test name="selenium 4 Tests with Opera Browser" enabled="false">
<parameter name="browser" value="opera"/>
<classes>
<class name="io.github.mfaisalkhatri.tests.saucedemo.SauceDemoTests">
<methods>
<include name="loginSauceDemoTest"/>
<include name="logOutSauceDemoTest"/>
</methods>
</class>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
بمجرد تنفيذ جميع الاختبارات المحددة في هذا الملف الXML (لا يهم إذا كانت تم اختبارها بنجاح أو فشل) وإنتهاء التنفيذ، سيتم اختيار الملف القادم لتنفيذ مجموعة أخرى من الاختبارات.
تعد التنفيذ من خلال المجموعات التي في التنافر غير مدعوم من قبل testng.
تنفيذ ملف واحد من testng.xml بواسطة Maven.
يوجد خيار في المحارب التجاري (IDE) لتشغيل تجاربك باستخدام ملف testng.xml بواسطة تنقل المؤقت إلى أي مكان منه واختيار خيار تشغيل التجارب. ومع ذلك، عندما يتوجب عملية تنفيذ التجارب في قناة CI/CD، لا يعمل هذا الخيار جيداً، لأنك تحتاج إلى تنفيذ التجارب بواسطة أوامر في القناة الautomated.
تكوين مشروعك لتشغيل ملف suite-xml بواسطة السطر الأول
يتوجب إعداد التكوين التالي لتمكيننا من تشغيل ملف testng.xml بواسطة Maven.
تحديث ماسيفور ملف البلاق (Maven Surefire plugin) في ملفك pom.xml:
ألق نظرة على 标签 <SuiteXmlFile>
في الصورة الأعلى. قيمة الميزانية suiteXmlFile
تم تعيينها كـ ${suite-xml}
. سنضع قيمة التعيين الافتراضية لهذه الاعلانة في قطعة الخصائص من ملف pom.xml وهي كالتالي:
المسار الافتراضي لـ testng.xml معدل الملف الذي استخدمناه في القسم السابق من هذا المدونة وقمنا بتحديث مسار suite-files
فيه.
لذا، إذا أجرينا أوامر المافون mvn clean install
أو mvn clean test
، سيقوم Maven باخذ الملف الافتراضي testng.xml بسبب المسار الذي تم تحديده في قطعة الخصائص وتنفيذ جميع التجارب.
الآن، السؤال الذي يأتي للمختبرة هو: “ما الذي يجب أن أفعل إذا أردت تنفيذ ملف testng.xml آخر، هل من الممكن فعل ذلك ؟”
الإجابة هي “نعم”: يمكننا تشغيل أي ملف testng.xml في مشروعنا بإضافة ال-Dsuite-xml=<مسار ملف testng.xml>
في أوامرنا mvn
الأوامر.
تذكر، قمنا من قبل بتنظيم هذه الconfiguration في قطعة الموفرة الموافقة للمافن pom.xml.
كل ما علينا فعله هو تقديم القيم لخصائص الخاص بالملف suite-xml
في الخط السريع، ويمكن ذلك باستخدام الخيار -D
في أوامر المافن mvn
:
mvn clean test -Dsuite-xml=<testng.xml file path>
دعونا نحاول الآن إستخدام الخط السريع وتشغيل ملفات testng.xml مختلفة بواسطة المافن من خلال الخط السريع، كما تعلمنا مؤخراً.
سنقوم بتشغيل ملف testng-internet.xml
، ونراقب أنه يحتذى بتحديد الملف الافتراضي testng.xml الموجود بالفعل والقيام بتشغيل الملف الذي نقدمه في الأوامر. يتوجب علينا تقديم مسار كامل حيث يوجد testng.xml، وفي حالتنا، يوجد في مجلد test-suite
، لذا المسار الكامل هو test-suites\testng-theinternet.xml
. هذه هي الأوامر التي سنقوم بتشغيلها (تأكد من أنك في مجلد المشروع الجذري في نافذة خط السريع التي تقوم بتشغيل الأوامر المافن):
mvn clean test -Dsuite-xml=test-suite\testng-theinternet.xml

“-Dsuite-xml” option can be used
تم تنفيذ الاختبارات بنجاح وتم طباعة الناتج على الوسط. يقول الناتج 32 اختبار تم تنفيذه وتم مرورهم بنجاح.
للتأكد من اختيار الملف الXML الصحيح وتنفيذ الاختبارات، دعونا نقوم بتنفيذ الاختبارات للملف testng-theinternet.xml
بواسطة المحتوى التعليمي ونراحد العدد الذي تم تنفيذه من الاختبارات.
يمكننا رؤية أن 32 اختبار تم تنفيذه وتم مروره بنجاح، وهذا يؤكد أن الأختبارات التي قمنا بتنفيذها بواسطة أمر mvn
تم تنفيذها بشكل صحيح لملف testng.xml الذي أعطيناه.
الخلاصة
يمكننا وجود متعدد من ملفات testng.xml لتقسيم الاختبارات حسب الموديولات / المواقع التي يوجد في مشروعنا وهذه المجموعة من الملفات testng.xml يمكن تنفيذها بواسطة ملف واحد testng.xml.
بمثابة، يمكننا تنفيذ ملف testng.xml من خلال خط الأوامر باستخدام موديل بلوتسير المافن.
Source:
https://dzone.com/articles/working-with-multiple-testngxml-files