有两个主要的监听器。
- Web驱动程序监听器
- TestNG监听器
在本教程中,我们将讨论 TestNG监听器。以下是将学到的东西-
- TestNG中的监听器是什么?
- TestNG中的监听器类型
- 测试场景:
- 创建TestNG监听器的步骤
- 对多个类使用侦听器。
TestNG中的侦听器是什么?
Listener被定义为修改默认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 -任何Test失败时都会调用onTestFailure方法。 onTestSkipped -已跳过onTestSkiked方法在跳过任何测试时调用。 onTestFailedButWithinSuccessPercentage -方法在每次测试失败时调用,但在成功百分比范围内。 OnFinish -onFinish方法是在执行所有测试之后调用的。
测试场景
在此测试场景中,我们将自动化登录过程并实现“ITestListener”。
-
启动Firefox并打开站点:https://www.itxiaonv.com
-
登录到应用程序
创建TestNG监听器的步骤
对于上述测试场景,我们将实现Listener。
步骤1) 创建实现‘ITestListener’的类“ListenerTest”。将鼠标移到红线圈阅文本上,Eclipse将建议2个快速修复方法,如下图所示:
只需单击“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);
}
}
项目结构如下所示:
步骤4) :执行“TestCases”类。“ListenerTest”类中的方法根据注释为@Test的方法的行为自动调用。
步骤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中添加侦听器标记。
此侦听器在整个TestSuite中实现,与拥有的类数量无关。还可以声明任意数量的侦听器类。
总结:
在Selenium Webdriver中生成日志或定制TestNG报告需要侦听器。
- 监听器的类型很多,可以根据需要使用。
- 侦听器是Selenium Web驱动程序脚本中使用的接口
- 演示了侦听器在Selenium中的用法
- 实现了多个类的监听器