TestNG 听众 Selenium:ITestListener 和 ITestResult 示例
有两个主要听众。
- WebDriver 监听器
- TestNG 听众
在本教程中,我们将讨论 测试 听众。
听众 TestNG?
监听器被定义为修改默认 TestNG的行为。顾名思义,监听器“监听”selenium 脚本中定义的事件并做出相应的行为。它在 selenium 中通过实现监听器接口来使用。它允许自定义 TestNG 报告或日志。有许多类型的 TestNG 有空听。
听众类型 TestNG
有许多类型的监听器,可以让你改变 TestNG的行为。
以下是一些 TestNG 听众:
- 注释转换器
- IAnnotationTransformer2 ,
- 可配置的,
- 配置监听器
- IExecutionListener,
- 可钩住,
- IInvokedMethodListener ,
- IInvokedMethodListener2,
- 方法拦截器
- 我记者,
- ISuiteListener,
- 测试监听器。
上述接口被调用 TestNG 监听器。这些接口在 selenium 中用于生成日志或自定义 TestNG 报告。
在本教程中,我们将实现 ITestListener。
ITestListener 具有以下方法
- 开始- 当任何测试开始时,都会调用 OnStart 方法。
- 测试成功时 任何测试成功时都会调用 onTestSuccess 方法。
- onTestFailure- 任何测试失败时都会调用 onTestFailure 方法。
- onTestSkipped- 当任何测试被跳过时,会调用 onTestSkipped 方法。
- onTestFailedButWithinSuccessPercentage- 每次测试失败但在成功百分比范围内时都会调用方法。
- 完成- 所有测试执行完成后,将调用 onFinish 方法。
测试场景
在这个测试场景中,我们将自动化登录过程并实现“ItestListener”。
创建步骤 TestNG 倾听者
对于上述测试场景,我们将实现Listener。
步骤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("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); } }
项目结构如下:
第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 中添加监听器标签。
无论您有多少个类,此侦听器都会在整个测试套件中实现。当您运行此 XML 文件时,侦听器将对所有提到的类起作用。您还可以声明任意数量的侦听器类。
总结
监听器需要生成日志或者自定义 TestNG 报告中 Selenium 网络驱动程序。
- 监听器有多种类型,可以根据需要使用。
- 监听器是 selenium web driver 脚本中使用的接口
- 演示了 Listener 的使用 Selenium
- 为多个类实现监听器