1:TestNG常用的监听器有哪些
1.1:IInvokedMethodListener监听器
IInvokedMethodListener可以对测试方法进行before和after的处理操作;注意:这个监听器是对所有的测试方法都进行处理
1.2:ITestListener监听器
ITestListener监听器主要是针对@Test方法的操作 例如 @Test方法执行前/后的处理 成功/失败后的处理 跳过执行后的处理等。。
1.3:ISuiteListener监听器
ISuiteListener监听器主要是针对testng.xml文件Suite标签执行前后的处理
2:IInvokedMethodListener的使用
A:建立一个IInvokedMethodListener的类
package ListenerPackage;
import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ITestResult;
public class Listener_IInvokedMethodListener implements IInvokedMethodListener{
//前处理
@Override
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
System.out.println(method.getClass().getName()+":正在运行前处理------>"+ testResult.getName());
}
//后处理
@Override
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
System.out.println(method.getClass().getName()+":正在运行后处理------>"+ testResult.getName());
}
}
B:建立demo测试类 @Listeners(ListenerPackage.Listener_IInvokedMethodListener.class)
package TestNGEXT;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(ListenerPackage.Listener_IInvokedMethodListener.class)
public class Demo_TestNG{
//Demo1会运行失败
@Test
public void Demo1(){
System.out.println("This is Demo1 Method");
// Assert.assertFalse(false);
assertEquals(false, true);
}
//Demo2会运行成功
@Test
public void Demo2(){
System.out.println("This is Demo2 Method");
assertEquals(true, true);
}
@BeforeMethod
public void Before_Demo3(){
System.out.println("This is Demo3--> Before Test");
assertEquals(true, true);
}
}
C:执行结果
3:ITestListener的使用
A:重新ITestListener监听器接口实现方法
package ListenerPackage;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class Listener_ITestListener implements ITestListener{
@Override
public void onTestStart(ITestResult result) {
// 针对@Test方法开始前的处理
System.out.println("正在进行--->"+result.getName());
}
@Override
public void onTestSuccess(ITestResult result) {
// 针对@Test方法执行成功后的处理
System.out.println("执行成功后进行--->"+result.getName());
}
@Override
public void onTestFailure(ITestResult result) {
// 针对@Test方法执行失败后的处理
System.out.println("执行失败后进行--->"+result.getName());
}
@Override
public void onTestSkipped(ITestResult result) {
// 针对@Test方法跳过执行后的处理
System.out.println("跳过执行后进行--->"+result.getName());
}
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
// 针对@Test方法断言的处理(这个很少用)
}
@Override
public void onStart(ITestContext context) {
// 针对TestNG。xml文件Test标签开始前的处理
System.out.println("执行Test tag前进行--->"+context.getName());
}
@Override
public void onFinish(ITestContext context) {
// 针对TestNG。xml文件Test标签开始后的处理
System.out.println("执行Test tag后进行--->"+context.getName());
}
}
B:测试方法
package TestNGEXT;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(ListenerPackage.Listener_ITestListener.class)
public class Demo_TestNG{
//Demo1会运行失败
@Test
public void Demo1(){
System.out.println("This is Demo1 Method");
// Assert.assertFalse(false);
assertEquals(false, true);
}
//Demo2会运行成功
@Test
public void Demo2(){
System.out.println("This is Demo2 Method");
assertEquals(true, true);
}
@BeforeMethod
public void Before_Demo3(){
System.out.println("This is Demo3--> Before Test");
assertEquals(true, true);
}
}
C:testng.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="1" name="Test">
<classes>
<class name="TestNGEXT.Demo_TestNG"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
D:运行结果
E:分析:
从运行结果我们可以看到ITestListener监听器的作用主要是针对@Test方法的监听 对其他的 例如@BeforeMethod等方法是不监听的
4:ISuiteListener监听器的使用
A:建立demo实现ISuiteListener接口 重写ISuiteListener接口实现方法
package ListenerPackage;
import org.testng.ISuite;
import org.testng.ISuiteListener;
public class Listener_ISuiteListener implements ISuiteListener{
@Override
public void onStart(ISuite suite) {
// 这个是针对testng.xml执行文件 Suite标签运行前的处理
System.out.println("Suite开始执行-----");
}
@Override
public void onFinish(ISuite suite) {
// 这个是针对testng.xml执行文件 Suite标签运行前的处理
System.out.println("Suite结束执行-----");
}
}
B:测试Demo
package TestNGEXT;
import static org.testng.Assert.assertEquals;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(ListenerPackage.Listener_ISuiteListener.class)
public class Demo_TestNG{
//Demo1会运行失败
@Test
public void Demo1(){
System.out.println("This is Demo1 Method");
// Assert.assertFalse(false);
assertEquals(false, true);
}
//Demo2会运行成功
@Test
public void Demo2(){
System.out.println("This is Demo2 Method");
assertEquals(true, true);
}
@BeforeMethod
public void Before_Demo3(){
System.out.println("This is Demo3--> Before Test");
assertEquals(true, true);
}
}
C:testng.xml运行
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
<test thread-count="1" name="Test">
<classes>
<class name="TestNGEXT.Demo_TestNG"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
D:运行结果
5:如何同时实现这3个监听器的方法
要想实现这3个监听器的实现方法可以同时implements IInvokedMethodListener,ITestListener,ISuiteListener