Selenium 中的 TestNG 监听器


主要有两种监听器。

  1. WebDriver 监听器
  2. TestNG 监听器

在本教程中,我们将讨论 TestNG 监听器。

TestNG 中的监听器是什么?

监听器被定义为修改 TestNG 默认行为的接口。顾名思义,监听器“监听” selenium 脚本中定义的事件并相应地执行。它通过实现 Listeners 接口在 selenium 中使用。它允许自定义 TestNG 报告或日志。有许多类型的 TestNG 监听器可用。

Listeners in TestNG

TestNG 中监听器的类型

有许多类型的监听器允许您更改 TestNG 的行为。

以下是一些 TestNG 监听器

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

以上接口称为 TestNG 监听器。这些接口在 selenium 中用于生成日志或自定义 TestNG 报告。

在本教程中,我们将实现 ITestListener。

ITestListener 具有以下方法

  • OnStart- OnStart 方法在任何测试开始时调用。
  • onTestSuccess- onTestSuccess 方法在任何测试成功时调用。
  • onTestFailure- onTestFailure 方法在任何测试失败时调用。
  • onTestSkipped- onTestSkipped 方法在任何测试被跳过时调用。
  • onTestFailedButWithinSuccessPercentage- 每次测试失败但在成功百分比内时调用此方法。
  • onFinish- 所有测试执行完毕后调用 onFinish 方法。

测试场景

在此测试场景中,我们将自动化登录过程并实现“ItestListener”。

  1. 启动 Firefox 并打开站点 https://demo.guru99.com/V4/
  2. Test Scenario

  3. 登录到应用程序。
  4. Test Scenario

创建 TestNG 监听器的步骤

对于上述测试场景,我们将实现监听器。

步骤 1) 创建实现“ITestListener”的类“ListenerTest”。将鼠标悬停在红色文本上,Eclipse 将为您提供 2 个快速修复,如下图所示

Steps to Create a TestNG Listener

只需单击“添加未实现的方法”。代码中添加了多个未实现的方法(没有主体)。请查看下面-

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				
        		
    }		
}		

让我们修改“ListenerTest”类。特别是,我们将修改以下方法-

onTestFailure, onTestSkipped, onTestStart, onTestSuccess, etc.

修改很简单。我们只打印测试的名称。

日志在控制台中创建。用户很容易理解哪个测试通过、失败和跳过状态。

修改后,代码如下-

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());					
    }		

}			

步骤 2) 为登录过程自动化创建另一个类“TestCases”。Selenium 将执行此“TestCases”以自动登录。

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("https://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);			
}		
}

步骤 3) 接下来,在我们的常规项目类(即“TestCases”)中实现此监听器。有两种不同的方法可以将类和接口连接起来。

第一种方法是使用监听器注解 (@Listeners),如下所示

@Listeners(Listener_Demo.ListenerTest.class)

我们将其用于“TestCases”类,如下所示。

因此,最终使用监听器注解后的“TestCases”类如下所示

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("https://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);			
}		
}			

项目结构如下所示

Steps to Create a TestNG Listener

步骤 4): 执行“TestCases”类。根据注解为 @Test 的方法的行为,自动调用“ListenerTest”类中的方法。

步骤 5): 验证输出,日志显示在控制台。

“TestCases”的输出将如下所示

Steps to Create a TestNG Listener

[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]

监听器在多个类中的使用。

如果项目有多个类,为每个类添加监听器可能会很繁琐且容易出错。

在这种情况下,我们可以创建 testng.xml 并在 XML 中添加 listeners 标签。

Use of Listener for Multiple Classes

无论您有多少类,此监听器都会在整个测试套件中实现。当您运行此 XML 文件时,监听器将作用于所有提到的类。您还可以声明任意数量的监听器类。

摘要

监听器用于在 Selenium Webdriver 中生成日志或自定义 TestNG 报告。

  • 有许多类型的监听器,可以根据需要使用。
  • 监听器是 Selenium Web 驱动程序脚本中使用的接口
  • 演示了监听器在 Selenium 中的使用
  • 为多个类实现了监听器