【TestNG】TestNG自定义监听器大全

前言

TestNG默认有提供监听器,但是如果我们想自定义监听器也是可以的,自定义监听器包括好几种,部分如下所示:

  • IAnnotationTransformer
  • IAnnotationTransformer2
  • IHookable
  • IInvokedMethodListener
  • IMethodInterceptor
  • IReporter
  • ISuiteListener
  • ITestListener

全部监听器如下图所示:
监听器all
使用命令行调用TestNG同时添加监听器可以参考如下代码:

java org.testng.TestNG -listener MyTransformer testng.xml

下面介绍下这些:

一、ISuiteLinstener监听器

这个其实不常用,只有两个方法要实现,开始测试套和结束测试套。
实现自定义测试套监听器可以这么写:

package com.demo.test.testng;

import org.testng.ISuite;
import org.testng.ISuiteListener;

public class MySuiteListener implements ISuiteListener{
   
   

	public void onStart(ISuite suite) {
   
   
		System.out.println("suite onStart!");
	}

	public void onFinish(ISuite suite) {
   
   
		System.out.println("suite onFinish!");
	}

}

测试用例如下:

package com.demo.test.testng;

import org.testng.annotations.Test;

public class ListenerTest {
   
   
	
  @Test
  public void test1() {
   
   
	  System.out.println("test1");
  }
  
  @Test
  public void test2() {
   
   
	  System.out.println("test2");
  }
}

对应的xml如下,注意里边的那个listener标签,即为上面添加的那个监听器:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="this suite" parallel="none" verbose="1">
  <listeners>
    <listener class-name="com.demo.test.testng.MySuiteListener" />
  </listeners>
  <test name="Test">
    <classes>
      <class name="com.demo.test.testng.ListenerTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

测试结果如下:

[RemoteTestNG] detected TestNG version 6.10.0
[TestNG] Running:
  D:\software\workspace\testng\src\main\java\com\demo\test\testCase\listenerTest1.xml

suite onStart!
test1
test2
suite onFinish!

===============================================
this suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

实现这个接口的自定义监听器只能通过xml里配置listener来加入;

二、IAlterSuiteListener监听器

这个监听器可以用于获取xml文件对应的XmlSuite,对于我们想根据suite修改一些参数啊之类的东西的需求,可以通过实现此监听器来实现,方法如下:


public class MyAlterSuiteNameListener implements IAlterSuiteListener {
   
   
 
    @Override
    public void alter(List<XmlSuite> suites) {
   
   
        XmlSuite suite = suites.get(0);//只取第一个suite
        suite.setName(getClass().getSimpleName());
    }

在获取到XmlSuite对象后就可以操作里边的所有内容了,包括配置和测试用例等;
注意:IAlterSuiteListener监听器的使用有特殊要求。使用IAlterSuiteListener监听器,只能通过在testng.xml中的,或者通过Java的SPI接口。除此之外的其他方法,如在测试类中通过@Listeners标注等,都是无效的。

三、ITestListener监听器

这个监听器比较常用了,内含的接口比较多,在我们需要对失败等用例做一些特别操作的时候就需要这个了。多适用于这样一些情况:
当使用testng执行测试时,我们常会想在某个阶段做一些特别的处理,比如:测试成功结束后,测试失败后,跳过某个脚本后,全部脚本执行完毕后。
要想达成这个目标,我们需要实现testng的ITestListener接口,自定义一个自己的listener。
ITestListener包含两种类型的方法:

  • 一类是测试用例级别的,例如onTestStart,onTestSuccess,onTestFailure,onTestSkipped,onTestFailedButWithinSuccessPercentage;
  • 另一类是测试集级别的,例如onStart,onFinish。这些方法有一个输入参数,result或者context。result是ITestResult类型的,可以知晓测试用例成功或者失败和测试何时开始等信息。context是ITestContext类型的,适用于测试集级别,可以知晓成功的脚本有哪些,失败的脚本有哪些。
    范例如下:
    监听器如下:
package com.demo.test.testng;

import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;

public class MyTestListener implements ITestListener{
   
   

	public void onTestStart(ITestResult result) {
   
   
		System.out.println("onTestStart")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值