TestNG的几种监听器
TestNG提供了一些接口,实现了在测试的不同时期内进行一些操作,主要有ITestListener、ISuiteListener、IInvokedMethodListener2、IExecutionListener、ITestListener等,所有listener接口都是继承自ITestNGListener接口。使用监听器的时候,需要自己新建一个类,实现相应的接口,并实现每个接口中的抽象方法,下面先演示如何用监听器。
创建监听器类
下面的代码新建了一个MyListener类,implements ITestListener接口。需要实现ITestListener接口中的7个方法。他们传进来的参数有2种:ITestResult和ITestContext,后面再介绍他们。其他的监听器都是这样使用的,只不过需要实现的方法是不同的。
1 | package com.test.listener; |
不同监听器中的方法
- ITestListener:onTestStart、onTestSuccess、onTestSuccess、onTestFailure、onTestSkipped、onTestFailedButWithinSuccessPercentage、onStart、onFinish
- IExecutionListener:onExecutionStart、onExecutionFinish
- IInvokedMethodListener2:beforeInvocation、afterInvocation、beforeInvocation、afterInvocation
- ISuiteListener:onStart、onFinish
- IConfigurationListener2:onConfigurationSuccess、onConfigurationFailure、onConfigurationSkip、beforeConfiguration
ITestListener和ISuiteListener的方法都比较好理解,我们来看一下他们格子的执行时机。假设有一个测试基类和测试类,他们各自都有@BeforeTest、@AfterTest、@BeforeClass、@AfterClass、@BeforeSuite和@AfterSuite方法。从打印的顺序中看一下他们执行的顺序:
1 | [RemoteTestNG] detected TestNG version 6.8.9 |
监听器的使用
一种方法是在具体的测试方法前加上@Listeners注释,注释的括号里指明用哪个listener类,例如:
1 | @Listeners(MyListener.class) |
第二种是在testng.xml文件中为测试套件制定listener,可以一个也可以多个,具体方法:
1 | <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > |
监听器接口方法中传入的参数
比如ITestListener接口中onTestStart方法会传进来一个ITestResult类型的参数,其他的还有ITestContext、IInvokedMethod等,来看看可以用他们做什么吧。
ITestResult类
先上源代码:
1 | package org.testng; |
来试一下这些方法调用以后得到的值是什么,假设我在自己实现的ITestListener类中,onTestSuccess方法里用传入的result示例来打印一些信息:
1 | @Override |
下面是打印的结果
1 | ITestListener_onTestSuccess: |
ITestContext类
源代码:
1 | package org.testng; |
在他的onFinish方法中尝试打印一些信息:
1 | @Override |
打印结果:
1 | context name:TestAllSheets |
IInvokedMethod类
这个类中提供了5个方法,都很简单,就不详细写了,五个方法的解释如下:
1 | package org.testng; |
总结
监听器顾名思义就是帮助使用者从程序的不同环节中获取他需要的数据,TestNG的监听器使用起来比较简单,本身他的报告中提供的信息就不少,对于需要更加详细的数据的,就可以借助监听器,来丰富报告的数据。