Плагин JUnit 5 Apache Surefire — Как использовать пользовательский прослушиватель

#junit #junit5 #maven-surefire-plugin

Вопрос:

Я делаю свои первые шаги в тестировании, так что не будьте строги.

Как я могу использовать свой пользовательский прослушиватель в JUnit 5, если я использую плагин Apache Surefire для запуска своих тестов? Это легко проверить, потому что я могу использовать аннотацию @Listeners или написать свой слушатель в формате .xml с набором тестов. Это Джунит, я не могу найти рабочее решение.

Мой пользовательский слушатель:

 public class OnrTestListener implements TestExecutionListener {

    private static final Logger LOG = LogManager.getRootLogger();

    @Override
    public void executionSkipped(TestIdentifier testIdentifier, String reason) {
        LOG.info("SKIPPED Test by reason: {}", reason);
    }

    @Override
    public void executionStarted(TestIdentifier testIdentifier) {
        LOG.info("Test {} successfully started.", testIdentifier.getDisplayName());
    }

    @Override
    public void executionFinished(TestIdentifier testIdentifier, TestExecutionResult testExecutionResult) {
        if (testExecutionResult.getStatus() != TestExecutionResult.Status.SUCCESSFUL) {
            String message = "Page screenshot.";
            File screenshot = ScreenshotUtils.takeScreenshot();
            ScreenshotUtils.attachToReportPortal(message, screenshot);
        }
    }
 

Скриншоты моего дополнительного класса

 public class ScreenshotUtils {

    private static final OnrLogger LOG = new OnrLogger();

    private ScreenshotUtils() {
    }

    public static void attachToReportPortal(String message, File screenshot) {
        ReportPortal.emitLog(message, "info", new Date(), screenshot);
    }

    public static File takeScreenshot() {
        return ((TakesScreenshot) DriverFactory.getDriver()).getScreenshotAs(OutputType.FILE);
    }
}
 

Мои тесты отметили некоторые аннотации (потому что я не могу найти набор решений для принятия решений) и запускаю свои тесты следующим образом:

 mvn clean test -Dgroups=some_tag
 

Как я пытался использовать своего слушателя:

  1. Я попытался использовать аннотацию:

    @ExtendWith(OnrTestListener.class) @Tag(«все») общедоступный абстрактный класс BaseUITest { … }

  2. Использование конфигурации в плагине surefire
                   <configuration>
                     <properties>
                         <property>
                             <name>listener</name>
                             <value>com.google.listeners.OnrTestListener</value>
                         </property>
                         <configurationParameters>
                             junit.jupiter.extensions.autodetection.enabled = true
                             junit.jupiter.execution.parallel.enabled = true
                             junit.jupiter.execution.parallel.mode.default = concurrent
                             junit.jupiter.execution.parallel.mode.classes.default = concurrent
                             junit.jupiter.execution.parallel.config.strategy = fixed
                             junit.jupiter.execution.parallel.config.fixed.parallelism = 5
                         </configurationParameters>
                     </properties>
                 </configuration>
     

Но это не работает.

Я был бы благодарен за любую помощь. Спасибо

Ответ №1:

Вы можете использовать механизм SPI.

Добавьте файл org.junit.platform.launcher.TestExecutionListener в /src/main/resources/META-INF/services/ папку.

Затем добавьте полное имя вашего слушателя {your package}.OnrTestListener в этот файл.

Прослушиватель будет применен автоматически.