热门搜索 :
考研考公
您的当前位置:首页正文

(十三)TestNG学习之路—方法拦截器

来源:东饰资讯网

前言

TestNG 启动之后会将所有的测试方法分成两类:

  • 特定顺序运行的测试方法。针对有依赖关系(dependsOnMethods,dependsOnGroups)的测试方法。
  • 没有特定运行顺序的测试方法。除开第一类说的,默认情况下,TestNG将尝试按class对测试方法进行分组执行。

为了让用户对第二类测试方法拥有更大的控制权,TestNG提供了IMethodInterceptor接口,可以通过实现该接口来控制测试方法的执行顺序。

public interface IMethodInterceptor {
  List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context);
}

示例

编写IMethodInterceptor实现类,用于执行grp1组的测试用例。

import com.Test;
import org.testng.IMethodInstance;
import org.testng.IMethodInterceptor;
import org.testng.ITestContext;
import org.testng.ITestNGMethod;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class MethodInterceptors implements IMethodInterceptor {

    public List<IMethodInstance> intercept(List<IMethodInstance> methodInstances, ITestContext context) {
        List<IMethodInstance> result = new ArrayList<IMethodInstance>();

        for (IMethodInstance methodInstance : methodInstances) {
            ITestNGMethod method = methodInstance.getMethod();
            Set<String> groups = new HashSet<String>();

            if (method.isTest()) { //如果是@Test注解
                for (String group : method.getGroups()) {
                    groups.add(group);  //获取@Test注解的所有组
                }
            }

            if (groups.contains("grp1"))  //只运行grp1组
                result.add(methodInstance);
        }

        return result;
    }
}

编写测试类,并添加监听器注解@Listeners(MethodInterceptors.class):

import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

@Listeners(MethodInterceptors.class)
public class MethodInterceptorsTest {
    @BeforeClass
    public void bfClass(){
        System.out.println("BeforeClass");
    }

    @Test(groups = "grp1")
    public void test1(){
        System.out.println("test1");
    }

    @Test(groups = "grp2")
    public void test2(){
        System.out.println("test2");
    }

    @Test(groups = "grp2")
    public void test3(){
        System.out.println("test3");
    }

    @AfterClass
    public void afClass(){
        System.out.println("AfterClass");
    }
}

执行结果如下:

BeforeClass
test1
AfterClass

===============================================
Default Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

如上执行结果所示,MethodInterceptors监听器确实起作用了。

扩展学习资料

Top