TestNG البرنامج التعليمي: ما هو الشروح والإطار في Selenium
ما هي تفاصيل TestNG?
TestNG هو إطار عمل لاختبار الأتمتة حيث يرمز NG إلى "الجيل القادم". TestNG مستوحاة من JUnit الذي يستخدم التعليقات التوضيحية (@). TestNG يتغلب على عيوب JUnit وهي مصممة لجعل اختبار شامل سهل.
باستخدام TestNG، يمكنك إنشاء تقرير مناسب، ويمكنك بسهولة معرفة عدد حالات الاختبار التي تم اجتيازها وفشلها وتخطيها. يمكنك تنفيذ حالات الاختبار الفاشلة بشكل منفصل.
فمثلا:
- لنفترض أن لديك خمس حالات اختبار، وتمت كتابة طريقة واحدة لكل حالة اختبار (افترض أن البرنامج مكتوب باستخدام الطريقة الرئيسية دون استخدام testNG). عندما تقوم بتشغيل هذا البرنامج أولاً، يتم تنفيذ ثلاث طرق بنجاح، وتفشل الطريقة الرابعة. ثم قم بتصحيح الأخطاء الموجودة في الطريقة الرابعة، والآن تريد تشغيل الطريقة الرابعة فقط لأن الطرق الثلاث الأولى يتم تنفيذها بنجاح على أي حال. هذا غير ممكن بدون استخدام TestNG.
- تشير TestNG in Selenium يوفر خيارًا، أي ملف testng-failed.xml في مجلد test-output. إذا كنت تريد تشغيل حالات الاختبار الفاشلة فقط، فهذا يعني تشغيل ملف XML هذا. وسوف ينفذ حالات الاختبار الفاشلة فقط.
بجانب المفهوم أعلاه، سوف تتعلم المزيد عنه TestNG، مثل ما هي مزايا TestNGكيفية إنشاء طرق اختبار باستخدام تعليقات @test، وكيفية تحويل هذه الفئات إلى ملف مجموعة اختبار وتنفيذها من خلال Eclipse وكذلك من سطر الأوامر.
لماذا الاستخدام TestNG مع Selenium?
الترتيب Selenium لا تنشئ الاختبارات تنسيقًا مناسبًا لنتائج الاختبار. استخدام TestNG in Selenium، يمكننا توليد نتائج الاختبار.
معظم Selenium يستخدم المستخدمون هذا أكثر من جونيت بسبب مزاياه. هناك الكثير من الميزات TestNGولكننا سنركز فقط على أهم ما يمكننا استخدامه فيه Seleniumوفيما يلي الميزات الرئيسية لـ Selenium TestNG:
- قم بإنشاء التقرير بتنسيق مناسب بما في ذلك عدد حالات الاختبار التي تم تشغيلها، وعدد حالات الاختبار التي تم اجتيازها، وعدد حالات الاختبار الفاشلة، وعدد حالات الاختبار التي تم تخطيها.
- يمكن تجميع حالات الاختبار المتعددة بسهولة أكبر عن طريق تحويلها إلى ملف testng.xml. حيث يمكنك تحديد أولويات حالة الاختبار التي يجب تنفيذها أولاً.
- يمكن تنفيذ نفس حالة الاختبار عدة مرات بدون حلقات فقط باستخدام كلمة أساسية تسمى "عدد الاستدعاءات".
- باستخدام testng، يمكنك تنفيذ حالات اختبار متعددة على متصفحات متعددة، أي عبر اختبار المتصفح.
- تشير TestNG يمكن دمج إطار العمل بسهولة مع أدوات مثل TestNG مافن، جنكينز، الخ.
- من السهل جدًا فهم التعليقات التوضيحية المستخدمة في الاختبار، على سبيل المثال:BeforeMethod، @AfterMethod، @BeforeTest، @AfterTest
- ليس لدى WebDriver آلية أصلية لإنشاء التقارير. TestNG يمكن إنشاء التقرير بتنسيق قابل للقراءة مثل التنسيق الموضح أدناه.
- TestNG يبسط طريقة ترميز الاختبارات. لم تعد هناك حاجة إلى طريقة رئيسية ثابتة في اختباراتنا. يتم تنظيم تسلسل الإجراءات من خلال تعليقات توضيحية سهلة الفهم ولا تتطلب أن تكون الأساليب ثابتة.
- تتم معالجة الاستثناءات التي لم يتم اكتشافها تلقائيًا بواسطة TestNG دون إنهاء الاختبار قبل الأوان. يتم الإبلاغ عن هذه الاستثناءات كخطوات فاشلة في التقرير.
مزايا TestNG على مدى JUnit
هناك ثلاث مزايا رئيسية ل TestNG على مدى JUnit:
- التعليقات التوضيحية أسهل في الفهم
- يمكن تجميع حالات الاختبار بسهولة أكبر
- الاختبار الموازي ممكن
ما هو التعليق التوضيحي في TestNG?
الشروحات في TestNG عبارة عن أسطر من التعليمات البرمجية يمكنها التحكم في كيفية تنفيذ الطريقة الموجودة أدناه. يسبقها دائمًا الرمز @. مبكر جدًا وسريع TestNG المثال هو الذي يظهر أدناه.
سيتم مناقشة التعليقات التوضيحية لاحقًا في القسم المسمى "التعليقات التوضيحية المستخدمة في TestNG"، لذا فلا بأس تمامًا إذا كنت لا تفهم ما ورد أعلاه TestNG مثال حتى الآن. من المهم فقط أن نلاحظ في الوقت الحالي أن التعليقات التوضيحية موجودة TestNG هي أسهل في البرمجة والفهم من JUnit.
القدرة على إجراء الاختبارات بالتوازي متاحة في TestNG ولكن ليس في JUnit، وبالتالي فإن TestNG يُفضل إطار العمل أكثر بالنسبة للمختبرين الذين يستخدمون Selenium الشبكة.
كيفية كتابة حالات الاختبار في TestNG?
الخطوة 1) اكتب منطق عملك وأدخل TestNG التعليقات التوضيحية في التعليمات البرمجية الخاصة بك.
الخطوة 2) أضف المزيد من المعلومات مثل اسم الفئة واسم المجموعات واسم الحزمة وما إلى ذلك
الخطوة 3) تشغيل TestNG.
إنشاء حالة اختبار باستخدام TestNG الشروح
الآن، سوف نتعلم كيفية إنشاء حالة الاختبار الأولى باستخدام TestNG الشروحات في Selenium:
قبل أن نقوم بإنشاء حالة اختبار، يجب علينا أولاً إعداد حالة جديدة TestNG مشروع في Eclipse وتسميته بـ "الأول".TestNGمشروع".
إنشاء ملف TestNG مشروع
خطوة 1 انقر فوق ملف > جديد > Java مشروع
خطوة 2 اكتب "أولاًTestNGProject" كاسم المشروع ثم انقر فوق التالي.
خطوة 3 سنبدأ الآن في استيراد ملف TestNG المكتبات في مشروعنا. انقر فوق علامة التبويب "المكتبات"، ثم "إضافة مكتبة..."
خطوة 4 في مربع الحوار "إضافة مكتبة"، اختر "TestNG"وانقر فوق التالي.
خطوة 5 انقر فوق "إنهاء".
يجب أن تلاحظ ذلك TestNG يتم تضمينه في قائمة المكتبات.
خطوة 6 سنقوم الآن بإضافة ملفات JAR التي تحتوي على ملف Selenium واجهة برمجة التطبيقات. هذه الملفات موجودة في Java برنامج تشغيل العميل الذي قمنا بتنزيله منه https://www.selenium.dev/downloads/ عندما كنا نقوم بالتثبيت Selenium Eclipse في الفصول السابقة.
ثم انتقل إلى المكان الذي وضعت فيه Selenium ملفات جار.
بعد إضافة ملفات JAR الخارجية، يجب أن تبدو شاشتك بهذا الشكل.
خطوة 7 انقر فوق "إنهاء" وتحقق من أن برنامجنا الأولTestNGالمشروع مرئي على Eclipseنافذة مستكشف الحزم.
كيفية إنشاء ملف TestNG ملف الاختبار
الآن بعد أن انتهينا من إعداد مشروعنا في هذا TestNG البرنامج التعليمي، دعونا إنشاء جديد TestNG ملف.
خطوة 1 انقر فوق "src" واختر آخر.
انقر بزر الماوس الأيمن على مجلد الحزمة "src" ثم اختر جديد > أخرى...
خطوة 2 أختار TestNG فئة.
انقر على الزر TestNG المجلد وحدد "TestNG خيار الطبقة". انقر فوق {التالي.
خطوة 3 اكتب القيم.
اكتب القيم الموضحة أدناه في مربعات الإدخال المناسبة وانقر فوق "إنهاء". لاحظ أننا أطلقنا على ملفنا اسم Java الملف باسم "الأولTestNGملف".
خطوة 4 تم إنشاء القالب.
Eclipse يجب أن يقوم تلقائيًا بإنشاء القالب الخاص بنا TestNG الملف الموضح أدناه.
الترميز لدينا أولا TestNG مثال لحالة الاختبار
دعونا الآن إنشاء أول لدينا حالة الاختبار من شأنها أن تحقق ما إذا كان Mercury الصفحة الرئيسية للجولات صحيحة. اكتب الرمز الخاص بك كما هو موضح أدناه TestNG على سبيل المثال:
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @Test public void verifyHomepageTitle() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); driver.close(); } }
لاحظ ما يلي.
- TestNG لا يتطلب منك أن يكون لديك طريقة main().
- لا يجب أن تكون الأساليب ثابتة.
- استخدمنا التعليق التوضيحيTest. يتم استخدام @Test للإشارة إلى أن الطريقة الموجودة تحته هي حالة اختبار. في هذه الحالة، قمنا بتعيين طريقة VereHomepageTitle () لتكون حالة الاختبار الخاصة بنا، لذلك وضعنا تعليقًا توضيحيًا "@Test" فوقها.
- نظرًا لأننا نستخدم التعليقات التوضيحية في TestNG، كنا بحاجة إلى استيراد الحزمة org.testng.annotations.*.
- استخدمنا فئة التأكيد. يتم استخدام فئة Assert لإجراء عمليات التحقق في TestNGلاستخدامه، نحتاج إلى استيراد الحزمة org.testng.Assert.
قد يكون لديك حالات اختبار متعددة (وبالتالي، عدة تعليقات توضيحية @Test) في حالة واحدة TestNG الملف. سيتم تناول هذا بمزيد من التفصيل لاحقًا في قسم "التعليقات التوضيحية المستخدمة في TestNG".
إجراء الاختبار
لإجراء الاختبار، ما عليك سوى تشغيل الملف Eclipse كما تفعل عادة. Eclipse سيوفر مخرجين - أحدهما في نافذة وحدة التحكم والآخر في نافذة وحدة التحكم TestNG نافذة النتائج.
التحقق من التقارير التي تم إنشاؤها بواسطة TestNG
نافذة وحدة التحكم في Eclipse يقدم تقريرًا نصيًا لنتائج حالة الاختبار الخاصة بنا بينما TestNG نافذة النتائج تعطينا واحدة رسومية.
توليد تقارير HTML
TestNG لديه القدرة على إنشاء التقارير بتنسيق HTML.
خطوة 1 بعد تشغيل أول لديناTestNGالملف الذي أنشأناه في القسم السابق، انقر بزر الماوس الأيمن فوق اسم المشروع (FirstTestNGProject) في نافذة Project Explorer ثم انقر فوق خيار "تحديث".
خطوة 2 لاحظ أنه تم إنشاء مجلد "اختبار الإخراج". قم بتوسيعه وابحث عن ملف Index.html. يعد ملف HTML هذا عبارة عن تقرير لنتائج آخر اختبار تشغيل.
خطوة 3 Double-انقر على ملف Index.html لفتحه بداخله Eclipseمتصفح الويب المدمج. يمكنك تحديث هذه الصفحة في أي وقت بعد إعادة تشغيل الاختبار بمجرد الضغط على F5 تمامًا كما هو الحال في متصفحات الويب العادية.
التعليقات التوضيحية المستخدمة في TestNG
في القسم السابق، تعرفت على التعليق التوضيحيTest. الآن، سندرس المزيد من التعليقات التوضيحية المتقدمة واستخداماتها.
حالات اختبار متعددة
يمكننا استخدام العديد من التعليقات التوضيحيةTest في تعليق واحد TestNG ملف. افتراضيًا، يتم تنفيذ الطرق التي تم التعليق عليها بواسطة @Test أبجديًا. انظر الكود أدناه. على الرغم من عدم ترتيب الطرق c_test وa_test وb_test أبجديًا في الكود، إلا أنه سيتم تنفيذها على هذا النحو.
قم بتشغيل هذا الرمز وفي صفحة Index.html التي تم إنشاؤها، انقر فوق "عرض زمني".
المعلمات
إذا كنت تريد تنفيذ الطرق بترتيب مختلف، فاستخدم المعلمة "الأولوية". المعلمات هي كلمات رئيسية تقوم بتعديل وظيفة التعليق التوضيحي.
- تتطلب المعلمات منك تعيين قيمة لها. يمكنك القيام بذلك عن طريق وضع "=" بجانبها، ثم تليها القيمة.
- يتم وضع المعلمات داخل زوج من الأقواس التي يتم وضعها مباشرة بعد التعليق التوضيحي مثل مقتطف الكود الموضح أدناه.
TestNG سيتم تنفيذ التعليق التوضيحيTest بقيمة الأولوية الأقل حتى الأكبر. ليست هناك حاجة لأن تكون قيم الأولوية الخاصة بك متتالية.
تشير TestNG سيؤكد تقرير HTML أنه تم تنفيذ الطرق بناءً على القيمة التصاعدية للأولوية.
معلمات متعددة
بصرف النظر عن "الأولوية"، يحتوي @Test على معلمة أخرى تسمى "alwaysRun" والتي لا يمكن ضبطها إلا على "true" أو "false". لاستخدام معلمتين أو أكثر في تعليق توضيحي واحد، افصل بينهما بفاصلة مثل تلك الموضحة أدناه.
@Test(priority = 0, alwaysRun = true)
@BeforeTest وAfterTest
@قبل الاختبار | سيتم تنفيذ الطرق ضمن هذا الشرح قبل حالة الاختبار الأولى في TestNG ملف. |
تضمين التغريدة | سيتم تنفيذ الطرق ضمن هذا الشرح بعد كل حالات الاختبار في TestNG يتم تنفيذ الملف. |
النظر في الكود أدناه.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @AfterTest public void terminateBrowser(){ driver.close(); } }
بتطبيق المنطق الذي يقدمه الجدول والكود أعلاه، يمكننا التنبؤ بأن التسلسل الذي سيتم من خلاله تنفيذ الطرق هو:
- 1st - إطلاق المتصفح ()
- 2nd – التحقق من عنوان الصفحة الرئيسية ()
- 3rd – إنهاء المتصفح ()
يمكن تبادل مواضع مجموعات التعليقات التوضيحية دون التأثير على الترتيب الزمني الذي سيتم تنفيذها من خلاله. دعونا نفهم مع أ TestNG مثال وحاول إعادة ترتيب كتل التعليقات التوضيحية بحيث تبدو التعليمات البرمجية الخاصة بك مشابهة لتلك الموجودة أدناه.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver ; @AfterTest //Jumbled public void terminateBrowser(){ driver.close(); } @BeforeTest //Jumbled public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver = new FirefoxDriver(); driver.get(baseUrl); } @Test //Jumbled public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } }
قم بتشغيل الكود أعلاه ولاحظ ذلك
@BeforeMethod وAfterMethod
تضمين التغريدة | سيتم تنفيذ الطرق ضمن هذا الشرح قبل كل طريقة في كل حالة اختبار. |
تضمين التغريدة | سيتم تنفيذ الطرق ضمن هذا الشرح بعد كل طريقة في كل حالة اختبار. |
In Mercury الجولات، لنفترض أننا نود التحقق من عناوين الصفحات المستهدفة للرابطين أدناه.
سيكون تدفق اختبارنا:
- انتقل إلى الصفحة الرئيسية وتحقق من عنوانها.
- انقر فوق تسجيل وتحقق من عنوان الصفحة المستهدفة.
- ارجع إلى الصفحة الرئيسية وتحقق مما إذا كانت لا تزال تحمل العنوان الصحيح.
- انقر فوق "الدعم" وتحقق من عنوان الصفحة المستهدفة.
- ارجع إلى الصفحة الرئيسية وتحقق مما إذا كانت لا تزال تحمل العنوان الصحيح.
يوضح الكود أدناه كيفية استخدام @BeforeMethod وAfterMethod لتنفيذ السيناريو المذكور أعلاه بكفاءة.
package firsttestngpackage; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.*; @Test public class firsttestngfile { public String baseUrl = "http://demo.guru99.com/test/newtours/"; String driverPath = "C:\\geckodriver.exe"; public WebDriver driver; public String expected = null; public String actual = null; @BeforeTest public void launchBrowser() { System.out.println("launching firefox browser"); System.setProperty("webdriver.gecko.driver", driverPath); driver= new FirefoxDriver(); driver.get(baseUrl); } @BeforeMethod public void verifyHomepageTitle() { String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = driver.getTitle(); Assert.assertEquals(actualTitle, expectedTitle); } @Test(priority = 0) public void register(){ driver.findElement(By.linkText("REGISTER")).click() ; expected = "Register: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @Test(priority = 1) public void support() { driver.findElement(By.linkText("SUPPORT")).click() ; expected = "Under Construction: Mercury Tours"; actual = driver.getTitle(); Assert.assertEquals(actual, expected); } @AfterMethod public void goBackToHomepage ( ) { driver.findElement(By.linkText("Home")).click() ; } @AfterTest public void terminateBrowser(){ driver.close(); } }
بعد تنفيذ هذا الاختبار، الخاص بك TestNG ينبغي الإبلاغ عن التسلسل التالي.
ببساطة، يجب أن يحتوي @BeforeMethod على الأساليب التي تحتاج إلى تشغيلها قبل يجب أن تحتوي كل حالة اختبار بينماAfterMethod على الأساليب التي تحتاج إلى تشغيلها بعد كل حالة اختبار.
ملخص TestNG الشروح
تضمين التغريدة: سيتم تشغيل الطريقة المشروحة قبل تشغيل جميع الاختبارات في هذه المجموعة.
تضمين التغريدة: سيتم تشغيل الطريقة المشروحة بعد تشغيل جميع الاختبارات في هذه المجموعة.
@قبل الاختبار: سيتم تشغيل الطريقة المشروحة قبل تشغيل أي طريقة اختبار تنتمي إلى الفئات داخل العلامة.
تضمين التغريدة: سيتم تشغيل الطريقة المشروحة بعد تشغيل جميع طرق الاختبار التابعة للفئات الموجودة داخل العلامة.
تضمين التغريدة: قائمة المجموعات التي سيتم تشغيل طريقة التكوين هذه من قبل. يتم ضمان تشغيل هذه الطريقة قبل وقت قصير من استدعاء طريقة الاختبار الأولى التي تنتمي إلى أي من هذه المجموعات.
تضمين التغريدة: قائمة المجموعات التي سيتم تشغيل طريقة التكوين هذه بعدها. يتم ضمان تشغيل هذه الطريقة بعد وقت قصير من استدعاء طريقة الاختبار الأخيرة التي تنتمي إلى أي من هذه المجموعات.
@قبل الفصل: سيتم تشغيل الطريقة المشروحة قبل استدعاء طريقة الاختبار الأولى في الفصل الحالي.
@بعد الفصل: سيتم تشغيل الطريقة المشروحة بعد تشغيل جميع طرق الاختبار في الفصل الحالي.
تضمين التغريدة: سيتم تشغيل الطريقة المشروحة قبل كل طريقة اختبار.
تضمين التغريدة: سيتم تشغيل الطريقة المشروحة بعد كل طريقة اختبار.
@اختبار: الطريقة المشروحة هي جزء من حالة الاختبار
وفي الختام
- TestNG هو تجريب الإطار الذي هو قادر على صنع Selenium الاختبارات أسهل في الفهم وتوليد التقارير التي يسهل فهمها.
- المزايا الرئيسية لل TestNG على مدى JUnit ما يلي.
- التعليقات التوضيحية أسهل في الاستخدام والفهم.
- يمكن تجميع حالات الاختبار بسهولة أكبر.
- TestNG يسمح لنا بإنشاء اختبارات موازية.
- نافذة وحدة التحكم في Eclipse ينشئ نتيجة مستندة إلى النص بينما TestNG تعتبر النافذة أكثر فائدة لأنها توفر لنا إخراجًا بيانيًا لنتيجة الاختبار بالإضافة إلى تفاصيل أخرى ذات معنى مثل:
- أوقات التشغيل لكل طريقة.
- الترتيب الزمني الذي تم من خلاله تنفيذ الأساليب
- TestNG قادر على إنشاء تقارير مستندة إلى HTML.
- يمكن للتعليقات التوضيحية استخدام المعلمات تمامًا مثل المعتاد Java TestNG الأساليب.
- TestNG يعد Dataprovider طريقة لتمرير المعلمات إلى وظيفة الاختبار التي تمرر قيمًا مختلفة في حالات الاختبار في تنفيذ واحد.