Selenium 中的 TestNG 监听器
主要有两种监听器。
- WebDriver 监听器
- TestNG 监听器
在本教程中,我们将讨论 TestNG 监听器。
TestNG 中的监听器是什么?
监听器被定义为修改 TestNG 默认行为的接口。顾名思义,监听器“监听” selenium 脚本中定义的事件并相应地执行。它通过实现 Listeners 接口在 selenium 中使用。它允许自定义 TestNG 报告或日志。有许多类型的 TestNG 监听器可用。
TestNG 中监听器的类型
有许多类型的监听器允许您更改 TestNG 的行为。
以下是一些 TestNG 监听器
- IAnnotationTransformer ,
- IAnnotationTransformer2 ,
- IConfigurable ,
- IConfigurationListener ,
- IExecutionListener,
- IHookable ,
- IInvokedMethodListener ,
- IInvokedMethodListener2 ,
- IMethodInterceptor ,
- IReporter,
- ISuiteListener,
- ITestListener 。
以上接口称为 TestNG 监听器。这些接口在 selenium 中用于生成日志或自定义 TestNG 报告。
在本教程中,我们将实现 ITestListener。
ITestListener 具有以下方法
- OnStart- OnStart 方法在任何测试开始时调用。
- onTestSuccess- onTestSuccess 方法在任何测试成功时调用。
- onTestFailure- onTestFailure 方法在任何测试失败时调用。
- onTestSkipped- onTestSkipped 方法在任何测试被跳过时调用。
- onTestFailedButWithinSuccessPercentage- 每次测试失败但在成功百分比内时调用此方法。
- onFinish- 所有测试执行完毕后调用 onFinish 方法。
测试场景
在此测试场景中,我们将自动化登录过程并实现“ItestListener”。
- 启动 Firefox 并打开站点 https://demo.guru99.com/V4/
- 登录到应用程序。
创建 TestNG 监听器的步骤
对于上述测试场景,我们将实现监听器。
步骤 1) 创建实现“ITestListener”的类“ListenerTest”。将鼠标悬停在红色文本上,Eclipse 将为您提供 2 个快速修复,如下图所示
只需单击“添加未实现的方法”。代码中添加了多个未实现的方法(没有主体)。请查看下面-
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); } }
项目结构如下所示
步骤 4): 执行“TestCases”类。根据注解为 @Test 的方法的行为,自动调用“ListenerTest”类中的方法。
步骤 5): 验证输出,日志显示在控制台。
“TestCases”的输出将如下所示
[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 标签。
无论您有多少类,此监听器都会在整个测试套件中实现。当您运行此 XML 文件时,监听器将作用于所有提到的类。您还可以声明任意数量的监听器类。
摘要
监听器用于在 Selenium Webdriver 中生成日志或自定义 TestNG 报告。
- 有许多类型的监听器,可以根据需要使用。
- 监听器是 Selenium Web 驱动程序脚本中使用的接口
- 演示了监听器在 Selenium 中的使用
- 为多个类实现了监听器