0

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

输入.csv

id,priority,testData,...
T1,1,someData,...
T1,0,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。

4

1 回答 1

0

找到了!。TestNG 提供了IDataProviderInterceptor类似的IMethodInterceptor处理数据提供者测试。

样本:

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.
   }
}
于 2021-02-17T13:41:13.557 回答