سيلينيوم WebDriver: TestNG لإدارة حالة الاختبار وإنشاء التقارير



سيساعدك هذا البرنامج التعليمي سيلينيوم WebDriver على فهم الحاجة إلى استخدام TestNG مع السيلينيوم لإدارة حالات الاختبار وإنشاء تقارير اختبار مفصلة.

في المدونة السابقة ، علمتك كيفية إجراء أول اختبار WebDriver للسيلينيوم. في هذه المدونة ، سأغطي مفاهيم WebDriver المتقدمة للسيلينيوم. لقد ذكرت عدة مرات بالفعل أن Selenium WebDriver له قيود فيما يتعلق بإدارة حالة الاختبار وإنشاء تقرير الاختبار. إذن ما هو البديل؟ أداة شائعة مثل السيلينيوم يجب أن يكون لها بالتأكيد حل بديل ، أليس كذلك؟ بالطبع هو كذلك! يمكننا استخدام مزيج من السيلينيوم و TestNG للتغلب على هذا القيد وسيكون ذلك موضوع مناقشة هذه المدونة.

استخدام بيثون في الاستوديو المرئي

في حال كنت جديدًا على السيلينيوم وتريد مقدمة للمفاهيم الأساسية ، يمكنك أن تبدأ رحلتك من هنا: ؟ ومع ذلك ، يمكن للآخرين البدء باستخدام TestNG for Selenium من هذه المدونة.يجب أن تعلم أيضًا أن المنظمات تبحث بنشاط عن محترفين لديهم ، مما يجعلها مهارة مهمة لإتقان مختبري البرامج.





يوافق مطورو البرامج من جميع أنحاء العالم بالإجماع على أن كتابة التعليمات البرمجية في حالات الاختبار توفر جزءًا كبيرًا من وقت تصحيح الأخطاء. لماذا ا؟ وذلك لأن حالات الاختبار تساعد في إنشاء رمز قوي وخالي من الأخطاء. كيف تفعل ذلك؟ من خلال تقسيم الكود بالكامل إلى حالات اختبار أصغر ، ثم تقييم كل حالة من حالات الاختبار هذه لتمرير / فشل الشروط ، يمكننا إنشاء رمز خالٍ من الأخطاء. نظرًا لأن السيلينيوم لا يدعم تنفيذ الكود في حالات الاختبار ، يتعين علينا استخدام TestNG لنفسه. هذا هو المكان الذي يناسب TestNG في إطار السيلينيوم.

TestNG تمثل اختبار الجيل القادم وهو إطار أتمتة اختبار مفتوح المصدر مستوحى من JUnit و NUnit. حسنًا ، ليس فقط مصدر إلهام ، ولكن ترقية لهذين الإطارين. لذا قد تسأل ما هي الترقية هنا؟الترقية مع TestNG هي أنها توفر وظائف إضافية مثل: اختبار التعليقات التوضيحية ، والتجميع ، وتحديد الأولويات ، وتقنيات تحديد المعاملات والتسلسل في الكود والتي لم تكن ممكنة من قبل.



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

testng - محرك الويب السيلينيوم

إذن ، كيف يقوم TestNG بإنجاز المهمة؟ سيتم الرد على هذا السؤال فيالقسم التالي من مدونة Selenium WebDriver التعليمية ، حيث سأناقش كيفية إدارة حالات الاختبار المختلفة باستخدام TestNG.



سيلينيوم ويب درايفر مع TestNG

يمكن تحديد حالات الاختبار وإدارتها بإحدى الطرق التالية:

  1. اختبار الشروح
  2. تحديد الأولويات
  3. تعطيل حالات الاختبار
  4. أسلوب التبعية
  5. التجمع
  6. التأكيدات
  7. إنشاء التقرير

اسمحوا لي أن أبدأ في التوضيحكل من هذه الوظائف.

اختبار الشروح

بادئ ذي بدء ، دعنا نسأل أنفسنا هذا السؤال: لماذا نحتاج إلى استخدام التعليقات التوضيحية؟ متى يمكننا استخدامها؟ تستخدم التعليقات التوضيحية في السيلينيوم للتحكم في الطريقة التالية التي سيتم تنفيذها. يتم تحديد التعليقات التوضيحية للاختبار قبل كل طريقة في كود الاختبار. في حالة عدم إضافة التعليقات التوضيحية إلى أي طريقة ، فسيتم تجاهل هذه الطريقة ولن يتم تنفيذها كجزء من كود الاختبار. لتعريفها ، يجب أن يتم شرح الطرق ببساطة بـ ' @اختبار '. انظر إلى مقتطف الشفرة أدناه على سبيل المثال.

حزمة testng org.openqa.selenium.WebDriver استيراد org.openqa.selenium.firefox.FirefoxDriver استيراد استيراد org.testng.annotations.AfterClass استيراد org.testng.annotations.AfterMethod استيراد org.testng.annotations.BeforeClass org.testng.annotations استيراد .BeforeMethod import org.testng.annotations.Test public class TestAnnotations {Test public void myTestMethod () {System.out.println ('Inside method: - myTestMethod') WebDriver driver = new FirefoxDriver () driver.get ('http: //www.seleniumframework.com/Practiceform/ ') String title = driver.getTitle () System.out.println (title) driver.quit ()}BeforeMethod public void beforeMethod () {System.out.println (' This يتم تنفيذ جزء من التعليمات البرمجية قبل الطريقة: - myTestMethod ') System.setProperty (' webdriver.gecko.driver '،' C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')}AfterMethod public void afterMethod () {System.out.println (' هذه القطعة من التعليمات البرمجية بعد الطريقة: - myTestMethod ')}BeforeClass public void beforeClass () {Syste m.out.println ('يتم تنفيذ هذا الجزء من الكود قبل تنفيذ الفئة')}AfterClass public void afterClass () {System.out.println ('يتم تنفيذ هذا الجزء من الكود بعد تنفيذ الفئة')} }

في الكود أعلاه ، كنت ستلاحظ أنني لم أحدد طريقة 'رئيسية'. ومع ذلك ، لدي 5 طرق أخرى محددة. وهي 'myTestMethod' و 'beforeMethod' و 'afterMethod' و 'beforeClass' و 'afterClass'. لاحظ أيضًا ترتيب تعريف الأساليب في الكود لأنه لن يتم تنفيذها بنفس الترتيب.

تم شرح طريقة 'myTestMethod' باستخدام @اختبار ، وهي الطريقة الرئيسية أو جزء من الكود الذي يجب تنفيذه. سيتم تنفيذ طرق أخرى مشروحة قبل وبعد تنفيذ هذه الطريقة. منذ تم شرح 'beforeMethod' بـ تضمين التغريدة ، سيتم تنفيذه قبل تنفيذ 'myTestMethod'. وبالمثل ، تم شرح 'afterMethod' بـ تضمين التغريدة ، وبالتالي سيتم تنفيذه بعد 'myTestMethod'.

ومع ذلك ، تم إضافة تعليق 'beforeClass' بـ @قبل الفصل ، مما يعني أنه سيتم تنفيذه حتى قبل تنفيذ الفئة نفسها. اسم صفنا هنا اختبار الشروح ، وبالتالي قبل بدء تنفيذ الفصل الدراسي ، سيتم تنفيذ جزء الكود الموجود داخل 'beforeClass'. وبالمثل ، تم إضافة تعليق على 'afterClass' بـ تضمين التغريدة ، وبالتالي سيتم تنفيذه بعد الفصل اختبار الشروح يتم تنفيذ.

إذا كان لا يزال لديك ارتباك فيما يتعلق بترتيب التنفيذ ، فسيساعدك المقتطف أدناه بالتأكيد.

1. BeforeSuite 2. BeforeTest 3. BeforeClass 4. قبل الطريقة 5. الاختبار 6. بعد الأسلوب 7. AfterClass 8. AfterTest 9. AfterSuite

إخراج الكود أعلاه سيكون:

يتم تنفيذ هذا الجزء من الكود قبل تنفيذ الفصل يتم تنفيذ هذا الجزء من الكود قبل الطريقة: - myTestMethod Inside method: - myTestMethod 1493192682118 geckodriver INFO الاستماع على 127.0.0.1:13676 1493192682713 mozprofile :: معلومات الملف الشخصي باستخدام مسار ملف التعريف C: UsersVardhanAppDataLocalozprofile ust_method .wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFO بدء تشغيل المتصفح C: Program Files (x86) Mozilla Firefoxirefox.exe 1493192682729 geckodriver :: marionette INFO الاتصال بـ Marionette على المضيف المحلي: 59792 [إصدار GPU 6152] تحذير: خطأ في الأنبوب: c /moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc ، الخط 346 1493192688316 Marionette INFO الاستماع على المنفذ 59792 26 أبريل 2017 1:14:49 مساءً org. openqa.selenium.remote.ProtocolHandshake createSession INFO: اللهجة المكتشفة: W3C خطأ جافا سكريبت: http://t.dtscout.com/i/؟l=http٪3A٪2F٪2Fwww.seleniumframework.com٪2FPracticeform٪2F&j= ، سطر 1: TypeError: document.getElementsByTagNa لي (...) [0] غير محدد إطار السيلينيوم | Practiceform 1493192695134 Marionette INFO لن يتم قبول الاتصالات الجديدة في 26 أبريل 2017 1:14:57 مساءً org.openqa.selenium.os.Unix تدمر العملية بشدة: تعذر إنهاء العملية باستخدام PID 6724 هذا الجزء من الكود يتم تنفيذه بعد الطريقة: - myTestMethod يتم تنفيذ هذا الجزء من التعليمات البرمجية بعد تنفيذ الفصل الدراسي PASSED: myTestMethod ===================================== ============ اختبار الاختبار الافتراضي تشغيل الاختبارات: 1 ، الإخفاقات: 0 ، التخطي: 0 ======================== ======================= ============================ ==================== المجموعة الافتراضية تشغيل إجمالي الاختبارات: 1 ، الإخفاقات: 0 ، التخطيات: 0 =============== =================================

كما ترى من الإخراج أعلاه ، فإن عدد الاختبارات التي تم إجراؤها هو 1 والفشل هو 0. هذا يعني أن الكود ناجح. حتى ترتيب تنفيذ الأساليب سيكون بالترتيبأناذكر مسبقا.

عند تنفيذ هذا الرمز في جهازك ، سيقوم Selenium WebDriver بإنشاء مثيل لمتصفح Firefox الخاص بك ، والانتقال إلى نموذج تدريب Selenium Framework ، وإغلاق مثيل المتصفح وعرض نفس الإخراج كما هو موضح أعلاه في Eclipse IDE.

لقد استخدمت 5 تعليقات توضيحية مختلفة فقط في الكود الخاص بي. ولكن هناك العديد من التعليقات التوضيحية التي يمكن استخدامها للتحكم في الطريقة التالية التي سيتم تنفيذها. تم شرح القائمة الكاملة للتعليقات التوضيحية في ملفالطاولةأدناه:

تضمين التغريدة - الطريقة المشروحة ب تضمين التغريدة سيتم تشغيلها قبل تشغيل جميع الاختبارات في المجموعة.

تضمين التغريدة - الطريقة المشروحة ب تضمين التغريدة سيتم تشغيله بعد تشغيل جميع الاختبارات في الجناح.

@قبل الاختبار - الطريقة المشروحة ب @قبل الاختبار سيتم تشغيله قبل تشغيل أي طريقة اختبار تنتمي إلى فئة.

دالة فيبوناتشي c ++

تضمين التغريدة - الطريقة المشروحة ب تضمين التغريدة سيتم تشغيله بعد تشغيل جميع طرق الاختبار الخاصة بالفصل.

تضمين التغريدة - الطريقة المشروحة ب تضمين التغريدة سيتم تشغيلها قبل تشغيل كل مجموعة.

تضمين التغريدة - الطريقة المشروحة ب تضمين التغريدة بعد تشغيل كل مجموعة.

@قبل الفصل - الطريقة المشروحة ب @قبل الفصل مرة واحدة قبل استدعاء طريقة الاختبار الأولى في الفئة الحالية.

@بعد الحصة - الطريقة المشروحة ب @بعد الحصة سيتم تشغيله مرة واحدة بعد تشغيل جميع طرق الاختبار في الفصل الحالي.

تضمين التغريدة - الطريقة المشروحة ب تضمين التغريدة سيتم تشغيله قبل تشغيل أي طريقة اختبار داخل الفصل.

تضمين التغريدة - الطريقة المشروحة ب تضمين التغريدة سيتم تشغيله بعد تشغيل كل طريقة اختبار داخل الفصل.

@اختبار - الطريقة المشروحة ب @اختبار هي طريقة الاختبار الرئيسية في البرنامج بأكمله. سيتم تنفيذ طرق أخرى مشروحة حول هذه الطريقة.

لقطة شاشة تقرير TestNG هيالحاضر أدناه: -

تحديد الأولويات

تحدثنا عن الطرق المختلفة التي يمكن تحديدها بحيث يتم تنفيذها حول @اختبار طريقة. ولكن ، ماذا لو كان لديك أكثر من واحد @اختبار وتريد تحديد ترتيب التنفيذ بينهما؟

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

Test (Priority = 2) public static void FirstTest () {system.out.println ('هذه هي حالة الاختبار الثانية بسبب الأولوية # 2')}Test (الأولوية = 1) SecondTest العامة باطلة () { system.out.println ('هذه هي حالة الاختبار رقم واحد بسبب الأولوية رقم 1')}Test public static void FinalTest () {system.out.println ('هذه هي حالة الاختبار النهائية لأنه لا توجد أولوية' )}

تعطيل حالات الاختبار

دعني أريك شيئًا أكثر إثارة للاهتمام. ماذا لو كان لديك رمز يمتد على مليون سطر ، ويتألف من مئات من حالات الاختبار ، وتريد تعطيل طريقة اختبار واحدة فقط؟ لا تحتاج إلى حذف أي جزء من الرمز ، بدلاً من ذلك، يمكننا ببساطة تعطيل طريقة الاختبار هذه.

يتم أيضًا تعطيل حالة الاختبار عبر المعلمات. يمكننا ضبط ممكن ينسب إلى 'خطأ'. بشكل افتراضي ، سيتم تمكين جميع حالات الاختبار ، وبالتالي لا نحتاج إلى تحديدها في كل مرة نكتب فيها اختبارًا. انظر إلى معلمات الطريقتين الثالثة والرابعة في الجزء أدناهالشفرة.

Test (الأولوية = 2 ، ممكّن = صواب) الفراغ الثابت العام FirstTest () {system.out.println ('هذه هي حالة الاختبار رقم اثنين بسبب الأولوية رقم 2')}Test (الأولوية = 1 ، ممكّن = صحيح ) SecondTest العامة باطلة () {system.out.println ('This is the Test Case number One because of Priority # 1')}Test (ممكّن = خطأ) SkippedTest () {system.out.println ( 'هذه هي حالة الاختبار التي تم تخطيها لأنه تم تعطيلها')}Test (ممكّن = صحيح) باطل ثابت عام FinalTest () {system.out.println ('هذه هي حالة الاختبار النهائية ، والتي تم تمكينها وليس لها أولوية ')}

أسلوب التبعية

الآن في حالة وجود موقف تريد فيه تنفيذ جزء من التعليمات البرمجية فقط إذا كان يفي بشرط أو فقط إذا تم تنفيذ طريقة معينة بنجاح ، فيمكننا القيام بذلك باستخدام يعتمد على الأسلوب (). هذا في الأساس شرط من تبعية الطريقة حيث سيتم تنفيذ طريقة اعتمادًا على طريقة أخرى. إذا وضعنا بالإضافة إلى ذلك دائما اركض السمة إلى true ، فسيتم تنفيذ الطريقة بغض النظر عن حالة الفشل / النجاح للطريقة المعتمدة. انظر إلى الكود في مقتطف الشفرة أدناه.

Test public static void FirstTest () {system.out.println ('هذه هي أول حالة اختبار يتم تنفيذها')}Test (يعتمدOnMethods = {'FirstTest'}) SecondTest () {system.out. println ('هذه هي حالة الاختبار الثانية التي يتم تنفيذها. This is a Dependent method')}Test (يعتمد OnMethods = {'SecondTest'}) Public static void FinalTest () {system.out.println ('هذا هو الاختبار النهائي الحالة سيتم تنفيذها على أي حال. ')}

الآن ، يأخذنا هذا إلى جانب آخر مهم في الاختبارالشروح وهو التجمع .

التجمع

الآن يجب أن تعلم أنه سيكون هناك عدد من الطرق كجزء من حالة الاختبار الخاصة بنا في الكود. لنفترض أن هناك 100 حالة اختبار ولكننا نريد تنفيذ 20 حالة اختبار فقط في اختبارنا التالي. هل تعتقد أننا نستطيع فعل ذلك؟ طبعا نحن نستطيع.

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

Test (groups = {'MyGroup'}) الفراغ العام الثابت FirstTest () {system.out.println ('This is a part of the Group: MyGroup')}Test (groups = {'MyGroup'}) public static void SecondTest () {system.out.println ('هذا أيضًا جزء من المجموعة: MyGroup')}Test public static void ThirdTest () {system.out.println ('لكن هذا ليس جزءًا من المجموعة: MyGroup ')}

تأكيدات TestNG

هذا يأخذنا الآن إلى الموضوع التالي في TestNG وهو التأكيدات. كما يوحي الاسم ، يمكن استخدام التأكيدات في طرق الاختبار لتحديد حالة النجاح / الفشل في الاختبار. بناءً على الشرط الصحيح / الخطأ للبيان ، ستنجح الاختبارات / تفشل.

في الكود أدناه ، قمت بتضمين 3 طرق اختبار ، حيث يكون للطريقتين الأولى والثالثة شرط نجاح والطريقة الثانية سيكون لها حالة فشل. انظر إلى الكود بنفسك.

package testng import org.testng.annotations.Test import org.testng.annotations.BeforeMethod import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.Assert import org.testng.annotations.AfterMethod import org. تأكيدات الفئة العامة {BeforeMethod public void beforeMethod () {System.setProperty ('webdriver.gecko.driver'، 'C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe')} منطقية عامة isEqual (int a، int b) {if (a == b ) {return true} else {return false}}Test public void testEquality1 () {Assert.assertEquals (true، isEqual (10، 10)) System.out.println ('This is a pass condition')}}Test public void testEquality2 () {Assert.assertEquals (true، isEqual (10، 11)) System.out.println ('This is a failure')}Test public void getTitle () {WebDriver driver = new FirefoxDriver () driver. get ('https://www.gmail.com') String title = driver.getTitle () Assert.assertEquals (title، 'Gmail') System.out.println ('This is again a pass condition')} }

عندما تنظر إلى التقرير الذي تم إنشاؤه بعد هذا التنفيذ ، ستلاحظ أنه من بين الاختبارات الثلاثة ، فشل واحد ونجح اثنان. نقطة أخرى مهمة يجب ملاحظتها وهي أنه عندما يفشل التأكيد ، سيتم تخطي أوامر / سطور أخرى من التعليمات البرمجية في هذا الاختبار. فقط عندما يكون التأكيد ناجحًا ، سيتم تنفيذ السطر التالي من التعليمات البرمجية في هذا الاختبار. تحقق من الإخراج أدناه حيث system.out.println نفذ فقط للطريقتين الأولى والثالثة.

1493277977348 geckodriver INFO الاستماع على 127.0.0.1:47035 1493277977993 mozprofile :: profile INFO باستخدام مسار الملف الشخصي C: UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 geckodriver :: marionette INFO 14967.exe الاتصال بـ Marionette على المضيف المحلي: 50758 [GPU 6920] تحذير: خطأ الأنبوب: 109: ملف c: / builds / moz2_slave / m-rel-w32-0000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win. cc، line 346 1493277981742 Marionette INFO الاستماع على المنفذ 50758 27 أبريل 2017 12:56:22 مساءً org.openqa.selenium.remote.ProtocolHandshake createSession INFO: اللهجة المكتشفة: W3C هذا مرة أخرى شرط اجتياز هذا شرط ناجح: تم اجتياز getTitle: فشل testEquality1: testEquality2 java.lang.AssertionError: متوقع [خطأ] ولكن تم العثور عليه [صحيح] في org.testng.Assert.fail (Assert.java:93) في org.testng.Assert.failNotEquals (Assert.java: 512) في org.testng.Assert.assertE qualsImpl (Assert.java:134) في org.testng.Assert.assertEquals (Assert.java:115) في org.testng.Assert.assertEquals (Assert.java:304) في org.testng.Assert.assertEquals (Assert.java : 314) في testng.Assertions.testEquality2 (Assertions.java:38) في sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) at sun.reflect.DelegatingMethodAccessor (Unknown.DelegatingMethodAccessor) المصدر) في java.lang.reflect.Method.invoke (مصدر غير معروف) في org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) في org.testng.internal.Invoker.invokeMethod (Invoker.java:661) على org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) على org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1193) في org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethod:12 ) في org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) في org.testng.TestRunner.privateRun (TestRunner.java:744) في org.testng.TestRu nner.run (TestRunner.java:602) في org.testng.SuiteRunner.runTest (SuiteRunner.java:380) في org.testng.SuiteRunner.runSequentially (SuiteRunner.java:375) في org.testng.SuiteRunner.privateRun (SuiteRunner.privateRun (SuiteRunner.privateRun .java: 340) في org.testng.SuiteRunner.run (SuiteRunner.java:289) في org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) في org.testng.SuiteRunnerWorker.run (SuiteRava:Worker.j في org.testng.TestNG.runSuitesSequentially (TestNG.java:1301) في org.testng.TestNG.runSuitesLocally (TestNG.java:1226) في org.testng.TestNG.runSuites (TestNG.java:1144) في org.testng. TestNG.run (TestNG.java:1115) في org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:132) في org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:230) في org.testng.remote .RemoteTestNG.main (RemoteTestNG.java:76) ======================================= ======== تشغيل الاختبارات الافتراضية: 3 ، الإخفاقات: 1 ، التخطي: 0 ============================= =================== ================================ ================ مجموعة الاختبارات الافتراضية تشغيل إجمالي الاختبارات: 3 ، حالات الفشل: 1 ، التخطي: 0 =================================== ============

إذن ، هذه هي نهاية المفاهيم المتعلقة بإدارة حالة الاختبار. لقد تركنا مع موضوع واحد آخر ، وهو توليد التقارير. يعد إنشاء التقرير هو الموضوع الأخير في هذا البرنامج التعليمي الخاص بـ Selenium WebDriver لأنه لا يمكن إنشاء التقارير إلا بعد كل ملفاتيتم تنفيذ الاختبارات.

جافا تحويل المضاعفة إلى كثافة العمليات

إنشاء التقرير

أهم شيء يجب ملاحظته هو أن التقرير لن يتم إنشاؤه إلا عبر ملف .xml. هذا يعني ، سواء كانت طريقة ، أو كانت فئة ، أو سواء كانت مجموعة تريد اختبارها ، يجب تحديدها جميعًا في ملف .xml.

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

 

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

على أي حال ، بالعودة إلى تقريرنا ، يمكنك تسمية كل مجموعة أو اختبار أو فصل بعد فتح تلك العلامات وتذكر إغلاق كل علامة تفتحها. لقد أعطيت اسم الجناح باسم TestNGs ، اسم الاختبار باسم اختبار شروح واسم الفئة كـ testng. شروح الاختبار. هل لاحظ أن اسم الفئة بتنسيق ' packagename.classname ' .

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

في حالة رغبتك في عرض تقرير HTML (تقرير الفهرس أو التقرير المتاح بالبريد الإلكتروني) ، يمكنك الانتقال إلى اختبار الإخراج مجلد داخل دليل المشروع في مساحة العمل الخاصة بك. من خلال النقر عليها ، يمكنك عرض التقارير حتى في وقت لاحق. فيما يلي لقطات الشاشة الخاصة بهم.

تقرير الفهرس : -

تقرير بالبريد الإلكتروني : -

هذا يقودنا إلى نهاية مدونة Selenium WebDriver التعليمية. حان الوقت لإعداد الكسوف في نهايتك ، وتثبيت حزم السيلينيوم المختلفة ، وتثبيت TestNG والبدء في كتابة حالات الاختبار الخاصة بك.

يمكنك الاطلاع على الفيديو التعليمي أدناه الخاص بـ Selenium WebDriver لمشاهدة عرض توضيحي لمختلف المفاهيم الموضحة في هذه المدونة.

تدريب السيلينيوم | إطار TestNG للسيلينيوم | إدوريكا

سيأخذك فيديو Edureka Selenium Training هذا إلى التفاصيل المتعمقة لـ Selenium WebDriver. يعد هذا الفيديو التعليمي من السيلينيوم مثاليًا لكل من المبتدئين والمحترفين الذين يرغبون في صقل أساسيات أوامر WebDriver ومعرفة كيفية استخدام TestNG مع السيلينيوم لإدارة حالات الاختبار المختلفة.

إذا كنت ترغب في تعلم السيلينيوم وبناء مستقبل وظيفي في مجال الاختبار ، فقم بإلقاء نظرة على موقعنا التفاعلي المباشر عبر الإنترنت هنا ، يأتي ذلك مع دعم 24 * 7 لإرشادك طوال فترة التعلم.

لديك سؤال لنا؟ يرجى ذكر ذلك في قسم التعليقات وسنعاود الاتصال بك.