Как остановить запуск TestNG после сбоя теста - PullRequest
2 голосов
/ 20 мая 2019

Я пытаюсь написать тестовый метод в TestNG, чтобы после сбоя весь набор тестов перестал работать.

@Test
public void stopTestingIfThisFailed() throws Exception
{
    someTestStesp();
    if (softAsserter.isOneFailed()) {
        asserter.fail("stopTestingIfThisFailed test Failed");
        throw new Exception("Test can't continue, fail here!");
    }
}

Исключение выдается, но другие методы тестирования работают.

Как это решить?

Ответы [ 4 ]

1 голос
/ 20 мая 2019

Вы можете использовать параметр аннотации dependsOnMethods или dependsOnGroups в других ваших методах тестирования:

@Test(dependsOnMethods = {"stopTestingIfThisFailed"})
public void testAnotherTestMehtod()  {

}

JavaDoc параметра dependsOnMethods :

Список методов, от которых зависит этот метод. Нет никакой гарантии порядка, в котором будут выполняться методы, от которых зависит, но вы гарантированно, что все эти методы будут запущены до того, как будет запущен тестовый метод, содержащий эту аннотацию. Кроме того, , если какой-либо из этих методов не был УСПЕХОМ, этот метод тестирования не будет запущен и будет помечен как SKIP . Если некоторые из этих методов были перегружены, будут запущены все перегруженные версии.

См. https://testng.org/doc/documentation-main.html#dependent-methods

1 голос
/ 20 мая 2019

Зависит от того, что вы ожидаете (в TestNG для этого нет прямой поддержки).Вы можете создать ShowStopperException, который будет добавлен в @Test, а затем в вашей реализации ITestListener ( см. Документы ) вы можете позвонить System.exit(1 (or whatever number)), когда найдете это исключение в результате, но отчета не будети вообще это не очень хорошая практика.Второй вариант - иметь некоторый базовый класс, который является родительским для всех тестовых классов, и некоторую переменную контекста, которая будет обрабатывать ShowStopperException in @BeforeMethod в родительском классе и генерировать SkipException, так что рабочий процесс может выглядеть следующим образом:

test passed
test passed
showstopper exception in some test
test skipped
test skipped
test skipped
...
0 голосов
/ 28 мая 2019

Я решил проблему следующим образом: после теста, который не должен дать сбой, я записываю данные во временный текстовый файл.

Позже, в следующем тесте я добавил код в @BeforeClassкоторый проверяет эти данные в ранее упомянутом текстовом файле.Если был найден ограничитель показа, я убиваю текущий процесс.

Если тест, который "не может" завершиться неудачей, фактически завершается неудачей:

 public static void saveShowStopper() {

    try {
        General.createFile("ShowStopper","tempShowStopper.txt");
    } catch (ParseException e) {
        e.printStackTrace();
    }
}

Код проверки @BeforeClass:

@BeforeClass(alwaysRun = true)
public void beforeClass(ITestContext testContext, @Optional String step, @Optional String suiteLoopData,
        @Optional String group) throws Exception
{
    boolean wasShowStopperFound = APIUtils.loadShowStopper();
    if (wasShowStopperFound){
        Thread.currentThread().interrupt();
        return;
    }
}
0 голосов
/ 20 мая 2019

Это ведет себя, если вы бросаете конкретное исключение, SkipException, из метода установки @BeforeSuite.

* 1004 см TestNG - Как принудительно завершить весь набор тестов из аннотации BeforeSuite, если выполняется условие

Если вы хотите сделать это из произвольного теста, не похоже, что есть механизм фреймворка. Но вы всегда можете поменять флаг и проверить этот флаг в методе установки @BeforeTest. Прежде чем перейти к этому, возможно, подумайте, можете ли вы проверить один раз перед запуском всего набора и просто прервать его (т. Е. @BeforeSuite).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...