问题描述
我有一个 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 提供类似于 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.
}
}