我们有一个通过 testng 运行的大型测试集。该集中的一些方法设置了优先级,使它们最后运行,以提高效率。
这适用于 testng 6.x,但一旦我们升级到 testng 7.x,这个技巧就失效了。看起来 testng 7.x 中的优先级是用一个类处理的,而不是在整个测试套件中处理(因此 prio=999 的方法将在 testng 6.x 中最后运行,但可以在 testng 7 中该测试集的开头运行.x,只是因为 testng 首先选择类。)
如何在不降级testng的情况下恢复旧流程?
首先想到的是使用IMethodInterceptor
您可以创建一个自定义侦听器,它将按优先级值对方法进行排序。
只需将此侦听器添加到您的 .XML 文件(或者如果您这样做,则以编程方式将其插入):
package listeners;
import org.testng.IMethodInstance;
import org.testng.IMethodInterceptor;
import org.testng.ITestContext;
import java.util.Comparator;
import java.util.List;
public class PriorityAnalyzer implements IMethodInterceptor {
@Override
public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
methods.sort(Comparator.comparingInt(x -> x.getMethod().getPriority()));
return methods;
}
}