Gradle忽略了testng中的优先级

时间:2019-03-12 15:23:49

标签: gradle automated-tests testng

有人可以解释gradle如何与testng中@Test注释中的 priority 参数一起使用吗? 例如,我有下一个代码:

var headers = document.querySelectorAll("thead:not([id='amazon-polly-audio-table-thead'])");
var tablebody = document.querySelectorAll("tbody:not([id='amazon-polly-audio-table-tbody'])");

因此,如果我将通过public class TestGradle { @Test (priority = 2) public void testA() throws Exception { System.out.println("Test A"); } @Test (priority = 1) public void testB() throws Exception { System.out.println("Test B"); } @Test (priority = 3) public void testC() throws Exception { System.out.println("Test C"); } } 运行它,则会得到下一个输出:

gradle test --tests TestGradle

但是我认为应该是这样的

Test A 
Test B
Test C

1 个答案:

答案 0 :(得分:0)

我认为这是TestNG中的错误。我创建了一个issue


您可以创建解决方法来解决此问题。 使用IMethodInterceptor,您可以更改方法的执行顺序。

public class ExecutionOrderInterceptor implements IMethodInterceptor {
    @Override
    public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
        Comparator<IMethodInstance> comparator = new Comparator<IMethodInstance>() {
            private int getPriority(IMethodInstance mi) {
                int result = 0;
                Method method = mi.getMethod().getConstructorOrMethod().getMethod();
                Test a1 = method.getAnnotation(Test.class);
                if (a1 != null) {
                    result = a1.priority();
                }
                return result;
            }

            public int compare(IMethodInstance m1, IMethodInstance m2) {
                return getPriority(m1) - getPriority(m2);
            }
        };

        IMethodInstance[] array = methods.toArray(new IMethodInstance[methods.size()]);
        Arrays.sort(array, comparator);
        return Arrays.asList(array);
    }
}

要使用此拦截器,您需要在测试类中添加注释:

@Listeners({ TestReportListener.class })
public class MyTestClass {
...

您还可以创建测试类扩展的抽象类:

@Listeners({ TestReportListener.class })
public abstract class BaseTest {
  //Add here common code
}

并在您的测试班级中使用它:

public class MyTestClass extends BaseTest {
...

注意:您还可以使用此类拦截器来实现自定义执行顺序。