Произвольная сортировка тестов TestNG

Mar 01, 2017 22:43

IDE (что IDEA, что NetBeans, с Eclipse не работал, не знаю) имеют обыкновение запускать тесты в алфавитном порядке. Это не всегда хорошо, если нужно гарантировать полную независимость тестов друг от друга, что важно для функциональных тестов, работающих с "живой" системой.

Сначала делаем аннотацию, которая будет указывать, что методы класса должны выполняться в случайном порядке:

@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Shuffle {
}

А затем пишем перехватчик, на которые так богат TestNG

public class UniversalListener implements IMethodInterceptor {

@Override
    public List intercept(List methods, ITestContext context) {
        Shuffle sh = null;
        for (IMethodInstance m : methods) {
            if (sh == null) {
                sh = (Shuffle) m.getMethod().getRealClass().getAnnotation(Shuffle.class);
            }
        }
        if (sh != null) {
            Collections.shuffle(methods);
        }
        return methods;
    }
}

Зачем нужен цикл, почему не проверить на одном методе? В списке методов может прилететь метод из родительского класса (мне вот так и прилетел с первой же попытки), а тот не обязательно должен иметь аннотацию @Shuffle.

И, главное, не забудем указать этот Listener для класса:

@Listener({UniversalListener.class})
@Shuffle
public class SomeTests {
    ...
}

testng, listeners

Previous post Next post
Up