TestNG 数据提供者优先级

问题描述

我有一个 TestNG Dataprovider 测试,如下所示:

Input.csv

id,priority,testData,...
T1,1,someData,...

阅读器

@DataProvider(name="abc")
public Object[][] readData(){
  // Logic to read csv file.
}

测试

@Test(dataprovider="abc")
public void test(){
  // Test code.
}

有很多输入文件,每个测试都包含一个优先级。我想单独运行优先级为 1 的测试。

如果没有数据提供者,我可以使用 IMethodInterceptor 过滤测试,如下所示。

class interceptor implements IMethodInterceptor {

  @Override
  public List<IMethodInstance> intercept(List<IMethodInstance> instance,ITestContext context){
     for(IMethodInstance method:instance){
        if(method.getmethod().getPriority()==1){
          // Add in new list and return it.
        }
     }
  }
}

样本测试:

@Test(priority=1)
public void testA(){
 print("A");
}

@Test(priority=2)
public void testB(){
 print("B");
}

Output: A

由于数据提供者的优先级是动态的,我无法根据优先级过滤测试

不应执行其他测试而不是 SKIPPED。

解决方法

找到了!。 TestNG 提供类似于 IDataProviderInterceptorIMethodInterceptor 来处理数据提供者测试。

示例:

public class Interceptor implements IDataProviderInterceptor {
     
   @Override
   public Iterator<Object[]> intercept(Iterator<Object[]> original,IDataProviderMethod dataproviderMethod,ITestNGMethod method,ITestContext context) {

      // Typecast original object and filter priority.
   }
}