Конфликт с зависимостями TestNG и условный пропуск тестов

#testng

#testng

Вопрос:

Я пытаюсь реализовать зависимость TestNG в моем XML (где один блок из ~ 50 тестов зависит от другого блока из ~ 30 проходящих тестов), но столкнулся с проблемой с пропуском аннотаций, которые я ранее реализовал. Похоже, что зависимость срабатывает также при пропуске теста, а не только при его сбое. Есть ли обходной путь для этого? Я хочу проигнорировать пропущенный результат теста и продолжить выполнение зависимых тестов и вызывать зависимость только в том случае, если тест явно провалился.

Из документации TestNG:

Жесткие зависимости. Все методы, от которых вы зависите, должны быть запущены и выполнены успешно для вашего запуска. Если в ваших зависимостях произошел хотя бы один сбой, вы не будете вызваны и отмечены как ПРОПУЩЕННЫЕ в отчете.

Ответ №1:

Исправлено, вроде как. Добавление приведенного ниже кода в метод afterInvocation изменит результат теста с ПРОПУСКА на ПРОХОЖДЕНИЕ. Это позволяет запускать зависимые тесты, но скрывает все пропущенные тесты из результатов ваших тестов. В нашем случае это было предпочтительнее. Если есть лучшее решение, которое не покрывает пропущенные тесты, я был бы рад это услышать!

 if (method.getTestMethod().getRetryAnalyzer() != null amp;amp; Retry.getRetryCount() == 0) { // check if the method was skipped without retries (due to skip annotation)
        
        ITestContext tc = Reporter.getCurrentTestResult().getTestContext();

        tc.getSkippedTests().addResult(method.getTestResult(), Reporter.getCurrentTestResult().getMethod());
        tc.getSkippedTests().getAllMethods().remove(Reporter.getCurrentTestResult().getMethod());

        SMAPLogger.Info("Test result: Test Skipped -- marking test as passed to avoid dependency issues");
        Reporter.getCurrentTestResult().setStatus(ITestResult.SUCCESS);

        tc.getPassedTests().addResult(method.getTestResult(), Reporter.getCurrentTestResult().getMethod());
        tc.getPassedTests().getAllMethods().remove(Reporter.getCurrentTestResult().getMethod());
    }