Подскажите как в проекте java+maven+testng скипнуть все тесты по какому-либо условию?
Проблема: когда, например, сервер лежит- не имеет смысла запускать тесты которые бегают по GUI.
Так что было бы хорошо добавить условие типа “если получил 503 - то скипаем все тесты”
Вопрос в том, как это реализовать. Пробовал через AnnotationTransformer , но так и не сообразил как мне в мой TestNG добавить .setAnnotationTransformer(new MyTransformer());
так как если делать
TestNG tng = new TestNG();
tng.setAnnotationTransformer(new MyTransformer());
, то на мои тесты это никак не влияет, а как получить current TestNG class - не нашел. TestNG.getDefault() - не помогло)
финальная реализация, которая с треском провалилась, выглядит примерно так:
@BeforeSuite()
public void skifAllTestIfThisFails() {
setUp();
driver.get(URL);
if (!driver.getTitle().equals("Hello world")) {
TestNG.getDefault().setAnnotationTransformer(new TestTransformer());
}
driver.quit()
}
public class TestTransformer implements IAnnotationTransformer {
public void transform(ITestAnnotation annotation, Class testClass, java.lang.reflect.Constructor testConstructor, Method testMethod) {
if (!isToRunAllTests) {
annotation.setEnabled(false);
}
}
}
Да, наверное так будет проще всего. Спасибо.
Хотя интересно как можно было бы это прикрутить прямо в проект, так как при запуске тестов из ИДЕ - ситуация по сути не изменится
public class SkipTestsListener implements IInvokedMethodListener {
@Override
public void beforeInvocation(IInvokedMethod iInvokedMethod, ITestResult iTestResult) {
if (iTestResult.getMethod().isTest() && !isServerAvailable()) {
throw new SkipException("Server is not available");
}
}
}
Все зависит от реализации самого метода isServerAvailable().
Если хотите проверять перед каждым тестом, то да. Если достаточно один раз проверить, будет проверяться один раз.
Учитывая, что я отдельные тесты часто запускаю руками, то перед каждым таким ручным запуском одного теста - не хотелось бы проверять окружение. То есть такая проверка мне нужна только при автоматичном запуске тестов на CI.
послушал osipov_boris и реализовал так (тем более что елементы такой реализации у меня уже были в других проектах):
в тимсити добавил еще один степ перед тем, что ранит тесты - в нем передал Additional Maven command line parameters: -Dsuite=envcheck
в помнике настроил профиль, который получает данную пропертю и сетит её как тестНГ хмл файл
3.Добавил еще 1 тестНг.хмл , в котором описаны тесты, прохождение которых обязательно для последующего запуска всех тестов, название файла = значение проперти из тимсити-Dsuite=envcheck
src/test/resources/testng/envcheck.xml
Мне кажется, что решение не самое красивое, буду думать как это можно будет реализовать оптимальней, но в принципе работает хорошо. Если тесты из степа 1 валятся, то степ 2 скипается, чего и хотелось.