TestNG-Listener in Selenium: Beispiel für ITestListener und ITestResult


Es gibt zwei Hauptzuhörer.

  1. WebDriver-Listener
  2. TestNG-Hörer

In diesem Tutorial werden wir darüber diskutieren Testng Zuhörer.

Was sind Listener in TestNG?

Der Listener ist als Schnittstelle definiert, die das Standardverhalten von TestNG ändert. Wie der Name schon sagt, „lauschen“ Listener dem im Selenium-Skript definierten Ereignis und verhalten sich entsprechend. Es wird in Selenium durch die Implementierung der Listeners Interface verwendet. Es ermöglicht die Anpassung von TestNG-Berichten oder -Protokollen. Es stehen viele Arten von TestNG-Listenern zur Verfügung.

Zuhörer in TestNG

Arten von Zuhörern in TestNG

Es gibt viele Arten von Listenern, mit denen Sie das Verhalten von TestNG ändern können.

Unten sind die wenigen TestNG-Hörer:

  1. IAnnotationTransformer ,
  2. IAnnotationTransformer2 ,
  3. IKonfigurierbar,
  4. IConfigurationListener ,
  5. IExecutionListener,
  6. IHookable ,
  7. IInvokedMethodListener ,
  8. IInvokedMethodListener2 ,
  9. IMethodInterceptor ,
  10. IReporter,
  11. ISuiteListener,
  12. ITestListener .

Die obige Schnittstelle wird als TestNG-Listener bezeichnet. Diese Schnittstellen werden in Selenium verwendet, um Protokolle zu generieren oder die TestNG-Berichte anzupassen.

In diesem Tutorial implementieren wir den ITestListener.

ITestListener hat folgendeswing Methoden

  • Am Start- Die OnStart-Methode wird aufgerufen, wenn ein Test startet.
  • onTestSuccess- Die Methode onTestSuccess wird bei Erfolg eines Tests aufgerufen.
  • onTestFailure- Die Methode onTestFailure wird beim Scheitern eines Tests aufgerufen.
  • onTestSkipped- Die Methode onTestSkipped wird beim Überspringen eines Tests aufgerufen.
  • onTestFailedButWithinSuccessPercentage- Die Methode wird jedes Mal aufgerufen, wenn der Test fehlschlägt, aber innerhalb des Erfolgsprozentsatzes liegt.
  • onFinish- Die onFinish-Methode wird aufgerufen, nachdem alle Tests ausgeführt wurden.

Testszenario

In diesem Testszenario automatisieren wir den Anmeldevorgang und implementieren den „ItestListener“.

  1. Starten Sie die Firefox und öffnen Sie die Seite http://demo.guru99.com/V4/
  2. Testszenario

  3. Melden Sie sich bei der Anwendung an.
  4. Testszenario

Schritte zum Erstellen eines TestNG-Listeners

Für das obige Testszenario implementieren wir Listener.

Schritt 1) Erstellen Sie die Klasse „ListenerTest“, die „ITestListener“ implementiert. Bewegen Sie die Maus über den Redline-Text und Eclipse schlägt Ihnen zwei schnelle Lösungen vor, wie im folgenden Bildschirm gezeigt:

Schritte zum Erstellen eines TestNG-Listeners

Klicken Sie einfach auf „Nicht implementierte Methoden hinzufügen“. Dem Code werden mehrere nicht implementierte Methoden (ohne Text) hinzugefügt. Überprüfen Sie unten:

package Listener_Demo;		

import org.testng.ITestContext ;		
import org.testng.ITestListener ;		
import org.testng.ITestResult ;		

public class ListenerTest implements ITestListener						
{		

    @Override		
    public void onFinish(ITestContext arg0) {					
        // TODO Auto-generated method stub				
        		
    }		

    @Override		
    public void onStart(ITestContext arg0) {					
        // TODO Auto-generated method stub				
        		
    }		

    @Override		
    public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) {					
        // TODO Auto-generated method stub				
        		
    }		

    @Override		
    public void onTestFailure(ITestResult arg0) {					
        // TODO Auto-generated method stub				
        		
    }		

    @Override		
    public void onTestSkipped(ITestResult arg0) {					
        // TODO Auto-generated method stub				
        		
    }		

    @Override		
    public void onTestStart(ITestResult arg0) {					
        // TODO Auto-generated method stub				
        		
    }		

    @Override		
    public void onTestSuccess(ITestResult arg0) {					
        // TODO Auto-generated method stub				
        		
    }		
}		

Lassen Sie uns die Klasse „ListenerTest“ ändern. Insbesondere werden wir Folgendes ändernwing Methoden-

onTestFailure, onTestSkipped, onTestStart, onTestSuccess, etc.

Die Änderung ist einfach. Wir drucken einfach den Namen des Tests aus.

Protokolle werden in der Konsole erstellt. Für den Benutzer ist es leicht zu verstehen, welcher Test den Status „Bestanden“, „Nicht bestanden“ und „Übersprungen“ hat.

Nach der Änderung sieht der Code so aus:

package Listener_Demo;		

import org.testng.ITestContext;		
import org.testng.ITestListener;		
import org.testng.ITestResult;		

public class ListenerTest implements ITestListener						
{		

    @Override		
    public void onFinish(ITestContext Result) 					
    {		
                		
    }		

    @Override		
    public void onStart(ITestContext Result)					
    {		
            		
    }		

    @Override		
    public void onTestFailedButWithinSuccessPercentage(ITestResult Result)					
    {		
    		
    }		

    // When Test case get failed, this method is called.		
    @Override		
    public void onTestFailure(ITestResult Result) 					
    {		
    System.out.println("The name of the testcase failed is :"+Result.getName());					
    }		

    // When Test case get Skipped, this method is called.		
    @Override		
    public void onTestSkipped(ITestResult Result)					
    {		
    System.out.println("The name of the testcase Skipped is :"+Result.getName());					
    }		

    // When Test case get Started, this method is called.		
    @Override		
    public void onTestStart(ITestResult Result)					
    {		
    System.out.println(Result.getName()+" test case started");					
    }		

    // When Test case get passed, this method is called.		
    @Override		
    public void onTestSuccess(ITestResult Result)					
    {		
    System.out.println("The name of the testcase passed is :"+Result.getName());					
    }		

}			

Schritt 2) Erstellen Sie eine weitere Klasse „TestCases“ für die Automatisierung des Anmeldevorgangs. Selenium führt diese „Testfälle“ aus, um sich automatisch anzumelden.

package Listener_Demo;		

import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.Assert;		
import org.testng.annotations.Listeners;		
Import org.testng.annotations.Test;		

public class TestCases {				
WebDriver driver= new FirefoxDriver();					

// Test to pass as to verify listeners .		
@Test		
public void Login()				
{		
    driver.get("http://demo.guru99.com/V4/");					
    driver.findElement(By.name("uid")).sendKeys("mngr34926");							
    driver.findElement(By.name("password")).sendKeys("amUpenu");							
    driver.findElement(By.name("btnLogin")).click();					
}		

// Forcefully failed this test as to verify listener.		
@Test		
public void TestToFail()				
{		
    System.out.println("This method to test fail");					
    Assert.assertTrue(false);			
}		
}

Schritt 3) Als nächstes implementieren Sie diesen Listener in unserer regulären Projektklasse, also „TestCases“. Es gibt zwei verschiedene Möglichkeiten, eine Verbindung zur Klasse und Schnittstelle herzustellen.

Die erste Möglichkeit besteht darin, die Listeners-Annotation (@Listeners) zu verwenden, wie unten gezeigt:

@Listeners(Listener_Demo.ListenerTest.class)

Wir verwenden dies in der Klasse „TestCases“, wie unten gezeigt.

Schließlich sieht die Klasse „TestCases“ nach Verwendung der Listener-Annotation so aus:

package Listener_Demo;		

import org.openqa.selenium.By;		
import org.openqa.selenium.WebDriver;		
import org.openqa.selenium.firefox.FirefoxDriver;		
import org.testng.Assert;		
import org.testng.annotations.Listeners;		
import org.testng.annotations.Test;             		

@Listeners(Listener_Demo.ListenerTest.class)			

public class TestCases {				
WebDriver driver= new FirefoxDriver();					

//Test to pass as to verify listeners.		
@Test		
public void Login()				
{		
    driver.get("http://demo.guru99.com/V4/");					
    driver.findElement(By.name("uid")).sendKeys("mngr34926");							
    driver.findElement(By.name("password")).sendKeys("amUpenu");							
    driver.findElement(By.id("")).click();					
}		

//Forcefully failed this test as verify listener.		
@Test		
public void TestToFail()				
{		
    System.out.println("This method to test fail");					
    Assert.assertTrue(false);			
}		
}			

Die Projektstruktur sieht folgendermaßen aus:

Schritte zum Erstellen eines TestNG-Listeners

Schritt 4): Führen Sie die Klasse „TestCases“ aus. Methoden in der Klasse „ListenerTest“ werden automatisch entsprechend dem Verhalten der als @Test annotierten Methoden aufgerufen.

Schritt 5): Überprüfen Sie die Ausgabe, die in der Konsole protokolliert wird.

Die Ausgabe der „Testfälle“ sieht folgendermaßen aus:

Schritte zum Erstellen eines TestNG-Listeners

[TestNG] Running:		
C:\Users\gauravn\AppData\Local\Temp\testng-eclipse--1058076918\testng-customsuite.xml		

Login Test Case started		
The name of the testcase passed is:Login		
TestToFail test case started		
This method to test fail		
The name of the testcase failed is:TestToFail		
PASSED: Login		
FAILED: TestToFail		
java.lang.AssertionError: expected [true] but found [false]

Verwendung von Listener für mehrere Klassen.

Wenn das Projekt über mehrere Klassen verfügt, kann das Hinzufügen von Listenern zu jeder einzelnen Klasse umständlich und fehleranfällig sein.

In solchen Fällen können wir eine testng.xml erstellen und das Listeners-Tag in XML hinzufügen.

Verwendung des Listeners für mehrere Klassen

Dieser Listener wird in der gesamten Testsuite implementiert, unabhängig von der Anzahl Ihrer Klassen. Wenn Sie diese XML-Datei ausführen, funktionieren Listener für alle genannten Klassen. Sie können auch eine beliebige Anzahl von Listener-Klassen deklarieren.

Zusammenfassung

Listener sind erforderlich, um Protokolle zu generieren oder TestNG-Berichte in Selenium Webdriver anzupassen.

  • Es gibt viele Arten von Zuhörern, die je nach Bedarf eingesetzt werden können.
  • Listener sind Schnittstellen, die im Selenium-Webtreiberskript verwendet werden
  • Demonstrierte die Verwendung von Listener in Selenium
  • Die Listener wurden für mehrere Klassen implementiert