TestNG监听器:ITestListener&ITestResult示例

有两个主要的监听器。

  1. Web驱动程序监听器
  2. TestNG监听器

在本教程中,我们将讨论 TestNG监听器。以下是将学到的东西-

  • TestNG中的监听器是什么?
  • TestNG中的监听器类型
  • 测试场景:
  • 创建TestNG监听器的步骤
  • 对多个类使用侦听器。

TestNG中的侦听器是什么?

Listener被定义为修改默认TestNG行为的接口。顾名思义,我有许多类型的TestNG侦听器可用。

TestNG Listeners in Selenium WebDriver
TestNG Listeners in Selenium WebDriver

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 -任何Test失败时都会调用onTestFailure方法。 onTestSkipped -已跳过onTestSkiked方法在跳过任何测试时调用。 onTestFailedButWithinSuccessPercentage -方法在每次测试失败时调用,但在成功百分比范围内。 OnFinish -onFinish方法是在执行所有测试之后调用的。

测试场景

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

  1. 启动Firefox并打开站点:https://www.itxiaonv.com

  2. 登录到应用程序

TestNG Listeners in Selenium WebDriver
TestNG Listeners in Selenium WebDriver

创建TestNG监听器的步骤

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

步骤1) 创建实现‘ITestListener’的类“ListenerTest”。将鼠标移到红线圈阅文本上,Eclipse将建议2个快速修复方法,如下图所示:

TestNG Listeners in Selenium WebDriver
TestNG Listeners in Selenium WebDriver

只需单击“Add unimplemented methods”。勾选多个未实现的内容

 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://www.itxiaonv.com/");
        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) 接下来,在常规项目类(即有两种不同的方式可以连接到类和接口。

第一种方式是使用Listeners注释( @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("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 Listeners in Selenium WebDriver
TestNG Listeners in Selenium WebDriver

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

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

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

TestNG Listeners in Selenium WebDriver
TestNG Listeners in Selenium WebDriver
 [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中添加侦听器标记。

TestNG Listeners in Selenium WebDriver
TestNG Listeners in Selenium WebDriver

此侦听器在整个TestSuite中实现,与拥有的类数量无关。还可以声明任意数量的侦听器类。

总结:

在Selenium Webdriver中生成日志或定制TestNG报告需要侦听器。

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

IT赶路人

专注IT知识分享