JUnit 5+;ApacheSureFire插件-如何使用自定义侦听器

JUnit 5+;ApacheSureFire插件-如何使用自定义侦听器,junit,junit5,maven-surefire-plugin,Junit,Junit5,Maven Surefire Plugin,我正在进行测试的第一步,所以不要太严格 如果我使用ApacheSureFire插件来运行我的测试,我如何在JUnit5中使用我的自定义侦听器?它测试起来很简单,因为我可以使用注释@Listeners,或者用.xml编写我的监听器和测试套件。我找不到工作的决定 我的自定义侦听器: public class OnrTestListener implements TestExecutionListener { private static final Logger LOG = LogMana

我正在进行测试的第一步,所以不要太严格

如果我使用ApacheSureFire插件来运行我的测试,我如何在JUnit5中使用我的自定义侦听器?它测试起来很简单,因为我可以使用注释
@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
我如何尝试使用我的侦听器:

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);
        }
    }
  • 我尝试使用注释:

    @ExtendWith(OnrTestListener.class) @标记(“全部”) 公共抽象类BaseUITest{ ... }

  • 在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>
    
    
    听众
    com.google.listeners.OnrTestListener
    junit.jupiter.extensions.autodetection.enabled=true
    junit.jupiter.execution.parallel.enabled=true
    junit.jupiter.execution.parallel.mode.default=并发
    junit.jupiter.execution.parallel.mode.classes.default=concurrent
    junit.jupiter.execution.parallel.config.strategy=已修复
    junit.jupiter.execution.parallel.config.fixed.parallelism=5
    
  • 但它不起作用


    如果有任何帮助,我将不胜感激。谢谢

    您可以使用SPI机制

    将文件
    org.junit.platform.launcher.TestExecutionListener
    添加到
    /src/main/resources/META-INF/services/
    文件夹中

    然后将侦听器的全名
    {your package}.OnrTestListener
    添加到此文件

    侦听器将自动应用