TestNG المستمعون في Selenium

⚡ ملخص ذكي

المستمعون في Selenium WebDriver TestNG واجهات تعترض أحداث الاختبار لتخصيص السجلات والتقارير والإجراءات اللاحقة للفشل. تشرح هذه المقالة أساليب ITestListener، وتستعرض مثالًا عمليًا قابلًا للتنفيذ Java مثال، ويوضح كيف Selenium تم استبدال الإصدار 4 بالإصدار القديم WebDriverEventListener.

  • ❓ ما يفعله المستمعون: إنهم مشتركين في TestNG تُستخدم أحداث مثل البدء والنجاح والفشل والتخطي لتشغيل خطافات التسجيل أو الإبلاغ.
  • 🧩 اثنتا عشرة واجهة: TestNG واجهات السفن مثل ITestListener و ISuiteListener و IReporter و IInvokedMethodListener و IAnnotationTransformer للتحكم الدقيق.
  • 🛠️ نمطان للتوصيل: قم بإرفاق مستمع باستخدام التعليق التوضيحي @Listeners على فئة واحدة، أو قم بتسجيله مرة واحدة داخل testng.xml لكل مجموعة اختبار.
  • 🚀 Selenium تحديث شنومكس: تم إيقاف استخدام EventFiringWebDriver؛ حيث تعمل واجهة WebDriverListener الحديثة بالإضافة إلى EventFiringDecorator الآن على تشغيل خطافات الأحداث على مستوى WebDriver.
  • 🤖 زاوية الذكاء الاصطناعي: يمكن للمستمعين المدعومين بالذكاء الاصطناعي تصنيف حالات الفشل تلقائيًا، وإرفاق لقطات شاشة ذكية، وإعادة إرسال إشارات الاختبارات غير المستقرة إلى لوحات معلومات التكامل المستمر في الوقت الفعلي.

TestNG المستمعون في Selenium

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

  1. مستمعي WebDriver
  2. TestNG المستمعين

في هذا البرنامج التعليمي ، سوف نركز على TestNG المستمعون، مع ملاحظة حول كيفية تغير المستمعين على مستوى WebDriver في Selenium 4.x.

ما هو المستمع في TestNG?

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

أنواع المستمعين في TestNG

TestNG تُشحن مجموعة من واجهات الاستماع، وكل واحدة منها تستهدف مرحلة مختلفة من دورة حياة الاختبار.

فيما يلي المصطلحات الشائعة الاستخدام TestNG المستمعين:

  1. I التعليقات التوضيحية
  2. IAnnotationTransformer2
  3. قابل للتكوين
  4. IConfigurationListener
  5. IExecutionListener
  6. IHookable
  7. IInvocedMethodListener
  8. IInvocedMethodListener2
  9. المعترض
  10. ايريبورتير
  11. ISuiteListener
  12. ITestListener

تُستخدم هذه الواجهات في Selenium لإنشاء سجلات أو تخصيصها TestNG التقارير. في هذا الدرس التعليمي، سنقوم بتنفيذ ITestListener.

ITestListener يكشف عن الطرق التالية:

  • بدء التشغيل – يتم استدعاؤها عند بدء أي اختبار.
  • نجاح الاختبار – يتم استدعاؤه عند اجتياز الاختبار.
  • onTestFailure – يتم استدعاؤه عند فشل الاختبار.
  • onTestSkipped – يتم استدعاؤها عند تخطي الاختبار.
  • نسبة فشل الاختبار ضمن نطاق النجاح – يتم استدعاؤها عندما يفشل الاختبار ولكنه يقع ضمن نسبة النجاح.
  • onFinish – يتم استدعاؤها بعد تنفيذ جميع الاختبارات في الفئة.

سيناريو الاختبار

في سيناريو الاختبار هذا، سنقوم بأتمتة عملية تسجيل الدخول وتنفيذها ITestListener ضدها.

  1. إطلاق Firefox وافتح الموقع https://demo.guru99.com/V4/

تسجيل الدخول إلى سيناريو الاختبار URL

  1. تسجيل الدخول إلى التطبيق.

نموذج تسجيل الدخول لسيناريو الاختبار

خطوات إنشاء أ TestNG مستمع

بالنسبة لسيناريو الاختبار أعلاه، سنقوم بتنفيذ المستمع خطوة بخطوة.

الخطوة 1) أنشئ فئة تسمى اختبار المستمع ينفذ ITestListenerمرر مؤشر الماوس فوق الخط الأحمر السفلي و Eclipse سأقترح حلين سريعين، كما هو موضح أدناه:

Eclipse حل سريع لإضافة طرق غير مُنفذة

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

صفقة Listener_Demo;

استيراد org.testng.ITestContext;
استيراد org.testng.ITestListener;
استيراد org.testng.ITestResult;

الطبقة العامة اختبار المستمع الأدوات ITestListener {

@تجاوز
الفراغ العام onFinish(ITestContext arg0) {
// TODO: نموذج أولي للطريقة المُنشأة تلقائيًا
}

@تجاوز
الفراغ العام onStart(ITestContext arg0) {
// TODO: نموذج أولي للطريقة المُنشأة تلقائيًا
}

@تجاوز
الفراغ العام onTestFailedButWithinSuccessPercentage(نتيجة اختبار تكنولوجيا المعلومات arg0) {
// TODO: نموذج أولي للطريقة المُنشأة تلقائيًا
}

@تجاوز
الفراغ العام onTestFail(نتيجة اختبار تكنولوجيا المعلومات arg0) {
// TODO: نموذج أولي للطريقة المُنشأة تلقائيًا
}

@تجاوز
الفراغ العام onTestSkipped(نتيجة اختبار تكنولوجيا المعلومات arg0) {
// TODO: نموذج أولي للطريقة المُنشأة تلقائيًا
}

@تجاوز
الفراغ العام onTestStart(نتيجة اختبار تكنولوجيا المعلومات arg0) {
// TODO: نموذج أولي للطريقة المُنشأة تلقائيًا
}

@تجاوز
الفراغ العام onTestSuccess(نتيجة اختبار تكنولوجيا المعلومات arg0) {
// TODO: نموذج أولي للطريقة المُنشأة تلقائيًا
}
}

والآن لنقم بتعديل اختبار المستمع سنشرح بالتفصيل الطرق التالية في هذه الفئة: عند فشل الاختبار, onTestSkipped, onTestStartو نجاح الاختبار.

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

بعد التعديل، يبدو الكود كالتالي:

صفقة Listener_Demo;

استيراد org.testng.ITestContext;
استيراد org.testng.ITestListener;
استيراد org.testng.ITestResult;

الطبقة العامة اختبار المستمع الأدوات ITestListener {

@تجاوز
الفراغ العام onFinish(ITestContext نتيجة) {
}

@تجاوز
الفراغ العام onStart(ITestContext نتيجة) {
}

@تجاوز
الفراغ العام onTestFailedButWithinSuccessPercentage(نتيجة اختبار تكنولوجيا المعلومات نتيجة) {
}

// عند فشل حالة الاختبار، يتم استدعاء هذه الطريقة.
@تجاوز
الفراغ العام onTestFail(نتيجة اختبار تكنولوجيا المعلومات نتيجة) {
System.out.println (اسم حالة الاختبار الفاشلة هو: + Result.getName());
}

// عند تخطي حالة اختبار، يتم استدعاء هذه الطريقة.
@تجاوز
الفراغ العام onTestSkipped(نتيجة اختبار تكنولوجيا المعلومات نتيجة) {
System.out.println (اسم حالة الاختبار التي تم تخطيها هو: + Result.getName());
}

// عند بدء حالة الاختبار، يتم استدعاء هذه الطريقة.
@تجاوز
الفراغ العام onTestStart(نتيجة اختبار تكنولوجيا المعلومات نتيجة) {
System.out.println(Result.getName() + "بدأت حالة الاختبار");
}

// عند نجاح حالة الاختبار، يتم استدعاء هذه الطريقة.
@تجاوز
الفراغ العام onTestSuccess(نتيجة اختبار تكنولوجيا المعلومات نتيجة) {
System.out.println (اسم حالة الاختبار التي تم اجتيازها هو: + Result.getName());
}
}

الخطوة 2) أنشئ فئة أخرى تسمى حالات الاختبار لأتمتة عملية تسجيل الدخول. Selenium سيتم تنفيذ هذا الصنف لتسجيل الدخول إلى الموقع التجريبي.

صفقة Listener_Demo;

استيراد org.openqa.selenium.By ؛
استيراد org.openqa.selenium.WebDriver ؛
استيراد org.openqa.selenium.firefox.Firefoxالسائقين؛
استيراد org.testng.Assert;
استيراد org.testng.annotations.Listeners;
استيراد org.testng.annotations.Test؛

الطبقة العامة حالات الاختبار {
ويب درايفر السائق = جديد Firefoxسائق()؛

// تم تصميم الاختبار لينجح، للتحقق من مستمع النجاح.
@اختبار
الفراغ العام تسجيل الدخول() {
driver.get("https://demo.guru99.com/V4/");
driver.findElement(By.name("uid")).sendKeys("mngr34926");
driver.findElement(By.name("كلمه السر")).sendKeys("amUpenu");
driver.findElement(By.name("btnLogin")).click();
}

// تم إخفاق الاختبار قسراً، للتحقق من مستمع الفشل.
@اختبار
الفراغ العام TestToFail() {
System.out.println ("هذه الطريقة لاختبار الفشل");
Assert.assertTrue(زائف);
}
}

الخطوة 3) بعد ذلك، قم بربط هذا المستمع بفئة الاختبار الخاصة بنا حالات الاختبارهناك طريقتان لربط فئة بواجهة مستمع.

الطريقة الأولى هي استخدام @Listeners التعليق، كما هو موضح أدناه:

@Listeners(Listener_Demo.ListenerTest.class)

نضيف هذا التعليق أعلى حالات الاختبار ثم يصبح شكل الفئة كالتالي:

صفقة Listener_Demo;

استيراد org.openqa.selenium.By ؛
استيراد org.openqa.selenium.WebDriver ؛
استيراد org.openqa.selenium.firefox.Firefoxالسائقين؛
استيراد org.testng.Assert;
استيراد org.testng.annotations.Listeners;
استيراد org.testng.annotations.Test؛

@Listeners(Listener_Demo.ListenerTest.class)
الطبقة العامة حالات الاختبار {
ويب درايفر السائق = جديد Firefoxسائق()؛

// اختبار للنجاح، للتحقق من مستمع النجاح.
@اختبار
الفراغ العام تسجيل الدخول() {
driver.get("https://demo.guru99.com/V4/");
driver.findElement(By.name("uid")).sendKeys("mngr34926");
driver.findElement(By.name("كلمه السر")).sendKeys("amUpenu");
driver.findElement(By.name("btnLogin")).click();
}

// تم إخفاق الاختبار قسراً، للتحقق من مستمع الفشل.
@اختبار
الفراغ العام TestToFail() {
System.out.println ("هذه الطريقة لاختبار الفشل");
Assert.assertTrue(زائف);
}
}

يبدو هيكل المشروع كما يلي:

TestNG هيكل مشروع المستمع

الخطوة 4) تنفيذ حالات الاختبار الأساليب داخل الفئة اختبار المستمع يتم استدعاؤها تلقائيًا بناءً على سلوك الطرق المشروحة بـ @اختبار.

الخطوة 5) تحقق من المخرجات المعروضة في وحدة التحكم.

إخراج حالات الاختبار يشبه:

TestNG مخرجات وحدة تحكم المستمع

[TestNG] جري:
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse–1058076918\testng-customsuite.xml

تم بدء حالة اختبار تسجيل الدخول
اسم حالة الاختبار التي تم اجتيازها هو: تسجيل الدخول
تم بدء حالة اختبار TestToFail
هذه الطريقة لاختبار الفشل
اسم حالة الاختبار التي فشلت هو: TestToFail
تم اجتياز الاختبار: تسجيل الدخول
فشل: اختبار الفشل
java.lang.AssertionError: كان من المتوقع [true] ولكن تم العثور على [false]

استخدام مستمع لعدة فئات

إذا كان المشروع يحتوي على العديد من فئات الاختبار، فإن إضافة @Listeners تصبح إضافة التعليقات لكل منها عملية شاقة وعرضة للأخطاء.

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

علامة المستمعين في ملف testng.xml لفئات متعددة

يُطبَّق هذا المُستمع على كامل مجموعة الاختبارات بغض النظر عن عدد الفئات. عند تشغيل ملف XML، يُفعَّل المُستمع لكل فئة مُعلنة في المجموعة، ويمكنك ربط أي عدد من فئات المُستمع داخل نفس الوسم.

WebDriverListener في Selenium 4 مقابل برنامج تشغيل الويب EventFiringWebDriver المهمل

بينما TestNG يستجيب المستمعون لأحداث دورة حياة الاختبار، ويستجيب مستمعو WebDriver لإجراءات برنامج تشغيل المتصفح مثل النقر أو التنقل أو استدعاء findElement. Selenium 3- كان النهج المعتاد هو مستمع أحداث WebDriver واجهة موصولة عبر EventFiringWebDriverكلاهما مهمل في Selenium 4.x.

البديل الحديث هو مستمع WebDriver واجهة مدمجة مع مُزيّن حفلات إطلاق النار:

استيراد org.openqa.selenium.WebDriver ؛
استيراد org.openqa.selenium.chrome.ChromeDriver ؛
استيراد org.openqa.selenium.support.events.EventFiringDecorator;
استيراد org.openqa.selenium.support.events.WebDriverListener;

الطبقة العامة مستمع التسجيل الأدوات مستمع WebDriver {
@تجاوز
الفراغ العام قبل الحصول على (ويب درايفر driver, String url) {
System.out.println ("الانتقال إلى" + عنوان URL)؛
}
}

ويب درايفر الخام = جديد ChromeDriver()؛
ويب درايفر السائق = جديد مُزيّن حفلات إطلاق النار<>(جديد LoggingListener()).decorate(raw);

يمكن للمُزخرف أن يغلف أي WebDriver أو WebElement أو Alert، وهو ما يجعله أكثر مرونة من غلاف إطلاق الأحداث القديم. استخدم مستمع WebDriver لأغراض المراقبة من جانب المتصفح و TestNG ITestListener لإعداد التقارير على مستوى الجناح.

مستمعون مدعومون بالذكاء الاصطناعي: سجلات أكثر ذكاءً وفرز الأعطال

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

تشمل الأنماط الشائعة التي تعتمد على الذكاء الاصطناعي ما يلي:

  • الكشف عن الاختبارات غير المستقرة: يقوم المستمعون بإرسال جداول زمنية للنجاح/الفشل إلى نموذج يصنف الفشل على أنه غير مستقر أو بيئي أو تراجع حقيقي.
  • لقطات شاشة ذكية: تقوم نماذج رؤية الكمبيوتر باقتصاص لقطات شاشة واجهة المستخدم، وإضافة التعليقات التوضيحية إليها، ومقارنتها، بحيث يرى المراجعون المنطقة المتغيرة بدلاً من عرض الصفحة كاملة.
  • أجهزة تحديد المواقع ذاتية الإصلاح: A مستمع WebDriver السنانير قبل البحث عن عنصر ويطلب من مساعد الذكاء الاصطناعي اقتراح موقع بديل عندما يفشل الموقع الأساسي. NoSuchElementException.
  • ملخصات باللغة الطبيعية: An ايريبورتير تُغذي عملية التنفيذ نتائج مجموعة البرامج إلى نموذج التعلم القائم على التعلم الذي ينتج ملخصًا موجزًا ​​من فقرة واحدة.

تُعد طبقة المستمع المكان الأنسب لإدخال هذه الخطافات لأنها تبقى خارج منطق الاختبار وتُطبق بشكل موحد عبر المجموعة.

ملخص

يُطلب من المستمعين إنشاء سجلات أو تخصيصها TestNG تقارير في Selenium برنامج تشغيل الويب.

  • TestNG يوفر العديد من واجهات الاستماع؛ اختر الواجهة التي تناسب الحدث الذي تهتم به.
  • المستمعون عبارة عن واجهات تُستخدم في Selenium نصوص WebDriver للتفاعل مع أحداث دورة حياة الاختبار.
  • شرح البرنامج التعليمي ITestListener مع اختبار للنجاح وآخر للرسوب.
  • يمكنك ربط مستمع باستخدام @Listeners أو قم بتسجيله مرة واحدة في اختبار.xml للجناح بأكمله.
  • Selenium 4.x يحل محل EventFiringWebDriver مع مستمع WebDriver + مُزيّن حفلات إطلاق النار بالنسبة للأحداث على مستوى WebDriver.

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

المستمع هو واجهة تشترك في الأحداث التي يتم إنشاؤها أثناء Selenium اختبار المدى. TestNG يستجيب المستمعون لأحداث دورة حياة الاختبار مثل البدء والنجاح والفشل والتخطي. ويستجيب مستمعو WebDriver لأحداث برنامج تشغيل المتصفح مثل النقرات والتنقلات واستدعاءات findElement.

يُفعّل ITestListener لكل دالة @Test على حدة، ويُتيح استدعاءات onTestStart وonTestSuccess وonTestFailure وonTestSkipped وonFinish. أما ISuiteListener، فيُفعّل مرتين فقط لكل مجموعة اختبار، مع onStart وonFinish، مما يجعله مثاليًا لإعدادات مستوى المجموعة، مثل فتح ملف تقرير.

يمكنك تسجيل أ TestNG يمكن تعريف المستمع بطريقتين: إما بإضافة التعليق التوضيحي @Listeners(MyListener.class) أعلى فئة الاختبار، أو بتعريف يتم وضع الوسم داخل ملف testng.xml. يطبق أسلوب XML المستمع على جميع الفئات في المجموعة دون تعديل شفرة المصدر.

تم إيقاف استخدام EventFiringWebDriver و WebDriverEventListener في Selenium 4.x. البديل الموصى به هو واجهة WebDriverListener مع EventFiringDecorator، والتي يمكنها تغليف مثيلات WebDriver أو WebElement أو Alert وتوفر نقاط ربط أنظف مثل beforeGet و afterClick.

استخدم واجهة IReporter عندما ترغب في إنشاء تقرير مخصص بعد انتهاء مجموعة الاختبارات، مثل ملخص HTML أو JSON. استخدم واجهة IInvokedMethodListener عندما تحتاج إلى خطاف قبل وبعد كل طريقة اختبار، بما في ذلك طرق التهيئة مثل @BeforeMethod و@AfterMethod.

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

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

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