章节十六、9-Listeners监听器

一、IInokedMethodListener

1、实现一个类来监听testcase的运行情况。

 1 package listenerspackage;
 2 
 3 import org.testng.IInvokedMethod;
 4 import org.testng.IInvokedMethodListener;
 5 import org.testng.ITestResult;
 6 
 7 /**
 8  * 监听*/
 9 
10 //所有监听的方法都由接口提供,所以我们需要先实现接口
11 public class CustomerListeners1 implements IInvokedMethodListener{
12     
13 //    beforeInvocation 和afterInvocation这两个方法时接口中已经写好的,我们需要按照需求将主体部分描述完整
14 
15 //    调用前发生,在testcase类中的每个方法运行前执行
16     @Override
17     public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
18 //        .getTestClass():返回测试方法所在的测试类,是类类型的
19 //        .getName():返回类的类名
20         System.out.println("before Invocation:"+testResult.getTestClass().getName()+" -> "+method.getTestMethod().getMethodName());
21     }
22 
23 //    调用后发生,在testcase类中的每个方法运行结束后执行
24     @Override
25     public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
26         System.out.println("after Invocation:"+testResult.getTestClass().getName()+" -> "+method.getTestMethod().getMethodName());
27     }
28 }

2、创建一个被监听的类

 1 package testclasses1;
 2 
 3 import org.testng.Assert;
 4 import org.testng.annotations.AfterClass;
 5 import org.testng.annotations.BeforeClass;
 6 import org.testng.annotations.Listeners;
 7 import org.testng.annotations.Test;
 8 
 9 import listenerspackage.CustomerListeners1;
10 
11 //表示该测试类被CustomerListeners1类监听
12 @Listeners(CustomerListeners1.class)
13 public class TestNG_ListenersTest1 {
14     
15     @BeforeClass
16     public void setUp() {
17         System.out.println("Code in before class");
18     }
19     
20     @AfterClass
21     public void classUp() {
22         System.out.println("Code in after class");
23     }
24     
25   @Test
26   public void testMethod1() {
27         System.out.println("Code in testMethod1");
28         Assert.assertTrue(true);
29   }
30   
31   @Test
32   public void testMethod2() {
33         System.out.println("Code in testMethod2");
34         Assert.assertTrue(false);
35   }
36 }

 3、配置xml

1 
2 
3 
4     
5         
6             <class name="testclasses1.TestNG_ListenersTest1">class>
7         
8     
9 

4、运行结果

未加监听器前运行结果:

章节十六、9-Listeners监听器_第1张图片

添加监听器后运行结果:

章节十六、9-Listeners监听器_第2张图片

 

 

二、 ITestListener

1、实现ITestListener接口来监听testcase的运行情况。

 1 package listenerspackage;
 2 
 3 import org.testng.ITestContext;
 4 import org.testng.ITestListener;
 5 import org.testng.ITestNGMethod;
 6 import org.testng.ITestResult;
 7 
 8 /**
 9  * 监听*/
10 
11 //所有监听的方法都由接口提供,所以我们需要先实现接口
12 public class CustomerListeners2 implements ITestListener{
13 
14     @Override
15     public void onTestStart(ITestResult result) {
16 //        测试方法开始时才执行此方法(带@test注解的方法)
17 //        .getName()返回的是测试方法的名称
18         System.out.println("onTestStart -> test name:"+result.getName());        
19     }
20 
21     @Override
22     public void onTestSuccess(ITestResult result) {
23 //        只有在测试方法运行成功后才执行(带@test注解的方法)
24         System.out.println("onTestSuccess -> test name:"+result.getName());            
25     }
26 
27     @Override
28     public void onTestFailure(ITestResult result) {
29 //        只有在测试方法运行失败后才执行(带@test注解的方法)
30         System.out.println("onTestSuccess -> test name:"+result.getName());        
31     }
32 
33     @Override
34     public void onTestSkipped(ITestResult result) {
35 //        在跳过测试时执行
36     }
37 
38     @Override
39     public void onTestFailedButWithinSuccessPercentage(ITestResult result) {
40 //        测试失败但在成功百分比内才执行(自动化中不常用)
41     }
42 
43     @Override
44     public void onStart(ITestContext context) {
45 //        在xml配置文件的test标签中内容运行前执行
46 //        .getName()返回的是标签的名称
47         System.out.println("onStart -> test tag name:"+context.getName());    
48 //        返回所有测试方法的名字
49         ITestNGMethod methods[] = context.getAllTestMethods();
50         System.out.println("test标签中要执行的测试方法:");
51         for(ITestNGMethod method:methods) {
52             System.out.println(method.getMethodName());
53         }
54     }
55 
56     @Override
57     public void onFinish(ITestContext context) {
58 //        在xml配置文件中的test标签运行结束后执行
59         System.out.println("onFinish -> test tag name:"+context.getName());        
60     }
61 }

2、被监听类

 1 package testclasses1;
 2 
 3 import org.testng.Assert;
 4 import org.testng.annotations.AfterClass;
 5 import org.testng.annotations.BeforeClass;
 6 import org.testng.annotations.Listeners;
 7 import org.testng.annotations.Test;
 8 
 9 import listenerspackage.CustomerListeners1;
10 
11 //表示该测试类被CustomerListeners1类监听
12 @Listeners(CustomerListeners1.class)
13 public class TestNG_ListenersTest2 {
14     
15     @BeforeClass
16     public void setUp() {
17         System.out.println("Code in before class");
18     }
19     
20     @AfterClass
21     public void classUp() {
22         System.out.println("Code in after class");
23     }
24     
25   @Test
26   public void testMethod1() {
27         System.out.println("Code in testMethod1");
28         Assert.assertTrue(true);
29   }
30   
31   @Test
32   public void testMethod2() {
33         System.out.println("Code in testMethod2");
34         Assert.assertTrue(false);
35   }
36 }

3、xml配置

 1 
 2 
 3 
 4     
 5         
 6             <class name="testclasses1.TestNG_ListenersTest2">class>
 7         
 8     
 9     
10         
11             <class name="testclasses1.TestNG_ListenersTest2">class>
12         
13 

4、运行结果

章节十六、9-Listeners监听器_第3张图片章节十六、9-Listeners监听器_第4张图片

 

三、 ISuiteListener

 1 package listenerspackage;
 2 
 3 import org.testng.IInvokedMethod;
 4 import org.testng.IInvokedMethodListener;
 5 import org.testng.ISuite;
 6 import org.testng.ISuiteListener;
 7 import org.testng.ITestResult;
 8 
 9 /**
10  * 监听*/
11 
12 //所有监听的方法都由接口提供,所以我们需要先实现接口
13 public class CustomerListeners3 implements ISuiteListener{
14 
15 //    当xml文件中suite标签中内容开始执行前
16     @Override
17     public void onStart(ISuite suite) {
18         System.out.println("onStart suite 开始执行之前");
19     }
20 
21 //    当xml文件中suite标签中内容执行结束后
22     @Override
23     public void onFinish(ISuite suite) {
24         System.out.println("onFinish suite 执行结束之后");
25     }    
26 }

 

四、当我们将监听的接口通过类实现后,如果要引用到测试类中,有两种方法:

1、需要使用注解:@Listeners(实现监听接口的类名.class)

 2、在xml配置文件中进行配置

 1 
 2 
 3 
 4 
 5     
 6         
 7     
 8     
 9         
10             <class name="testclasses1.TestNG_ListenersTest1">class>
11         
12     
13     
14         
15             <class name="testclasses1.TestNG_ListenersTest2">class>
16         
17     
18 

 

 

 

 

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

欢迎关注,转载请注明来源。

你可能感兴趣的:(章节十六、9-Listeners监听器)