TestNG的IMethodInterceptor监听器详解

本文介绍如何使用TestNG的IMethodInterceptor监听器来调整无特定执行顺序的测试方法。通过示例展示如何让标记为'fast'的测试方法优先执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在TestNG的执行过程中,根据测试方法的执行顺序,可以将测试方法分为如下两类:

  • 顺序执行的方法,即依赖于其他测试方法或者被其他测试方法所依赖
  • 执行无特定顺序的方法,即测试方法的执行没有特定的顺序要求,不同的TestNG执行可能有不同的顺序

对于第一类测试方法,其执行顺序不能随意改变,必须符合依赖关系。但是对于第二类测试方法,TestNG提供了IMethodInterceptor监听器,可以改变这些测试方法的执行顺序。

IMethodInterceptor监听器也是继承自ITestNGListener接口,其中唯一定义如下方法:

java.util.List<IMethodInstance> intercept(java.util.List<IMethodInstance> methods, ITestContext context);
注意:只有第二类测试方法能够作为intercept()方法的第一个参数。

           intercept()方法的返回值是经过排序后的测试方法,TestNG将据此顺序执行测试方法。

           intercept()方法的第二个参数可以设置用户信息,便于后续生成测试报表时进行查看。

事实上,TestNG在调用任何测试方法之前,都会调用IMethodInterceptor监听器实例的intercept()方法。

1. IMethodInterceptor监听器的实现示例如下:

public class FastMethodInterceptor implements IMethodInterceptor {
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
  List<IMethodInstance> result = new ArrayList<IMethodInstance>();
  for (IMethodInstance m : methods) {
    Test test = m.getMethod().getConstructorOrMethod().getAnnotation(Test.class);
    Set<String> groups = new HashSet<String>();
    for (String group : test.groups()) {
      groups.add(group);
    }
    if (groups.contains("fast")) {
      result.add(0, m);
    }
    else {
      result.add(m);
    }
  }
  return result;
}
}
注意:重写的方法中,属于“fast"组的测试方法被加入到链表的头部,优先执行。

2. 启动TestNG时指定IMethodInterceptor监听器

java org.testng.TestNG -listener test.methodinterceptors.FastMethodInterceptor testng.xml


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值