TestNG 听众 Selenium:ITestListener 和 ITestResult 示例


有两个主要听众。

  1. WebDriver 监听器
  2. TestNG 听众

在本教程中,我们将讨论 测试 听众。

听众 TestNG?

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

听众 TestNG

听众类型 TestNG

有许多类型的监听器,可以让你改变 TestNG的行为。

以下是一些 TestNG 听众:

  1. 注释转换器
  2. IAnnotationTransformer2 ,
  3. 可配置的,
  4. 配置监听器
  5. IExecutionListener,
  6. 可钩住,
  7. IInvokedMethodListener ,
  8. IInvokedMethodListener2,
  9. 方法拦截器
  10. 我记者,
  11. ISuiteListener,
  12. 测试监听器。

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

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

ITestListener 具有以下方法

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

测试场景

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

  1. 启动 Firefox 并打开网站 http://demo.guru99.com/V4/
  2. 测试场景

  3. 登录应用程序。
  4. 测试场景

创建步骤 TestNG 倾听者

对于上述测试场景,我们将实现Listener。

步骤1) 创建实现“ITestListener”的类“ListenerTest”。将鼠标移到红线文本上,然后 Eclipse 将向您推荐 2 个快速修复方法,如下面的屏幕所示:

创建步骤 TestNG 倾听者

只需点击“添加未实现的方法”。多个未实现的方法(没有主体)被添加到代码中。检查以下内容-

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

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

第一种方式是使用 Listeners 注释(@Listeners),如下所示:

@Listeners(Listener_Demo.ListenerTest.class)

我们在“TestCases”类中使用它,如下所示。

因此,最终使用 Listener 注释之后的类“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("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);			
}		
}			

项目结构如下:

创建步骤 TestNG 倾听者

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

第5步): 验证控制台上显示的日志输出。

“TestCases”的输出将如下所示:

创建步骤 TestNG 倾听者

[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 中添加监听器标签。

对多个类使用监听器

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

总结

监听器需要生成日志或者自定义 TestNG 报告中 Selenium 网络驱动程序。

  • 监听器有多种类型,可以根据需要使用。
  • 监听器是 selenium web driver 脚本中使用的接口
  • 演示了 Listener 的使用 Selenium
  • 为多个类实现监听器