使用不同的log4j配置重新运行失败的测试(设置为调试)?

问题描述 投票:0回答:1

我们有一个多模块Maven项目,其中每个模块都包含测试。从单元测试到集成测试,我们大约有2000种测试。

我们使用TestNG和Log4j

这些集成测试做了很多工作。在开发过程中,有时我们会添加System.out.println来打印一些调试信息。

我知道syso通常不是一个好主意,所以我尝试使用Log4j。

是否有一种简单的方法可以使用不同的log4j配置自动重新运行Maven和TestNG失败的测试

maven log4j testng
1个回答
0
投票

我想出了一个解决方案(根据上面的评论)

  • 将全局Log4j配置设置为ERROR的设置
  • 在第一次重试时将其更改为DEBUG,并在之后重设为ERROR的设置
  • 一个转换器,所以我不需要为每个@Test更改注解>
  • 我实现了三类:

用法

要使此功能在maven surefire中起作用,您还需要将这些类添加到testng.xml

<suite name="Suite1" verbose="1">
    <listeners>
        <listener class-name="my.package.RerunBeforeSuiteOnlyError" />
        <listener class-name="my.package.RerunTestTransformer" />
        <listener class-name="my.package.TestNamePrinter" />
    </listeners>
    ...

RerunBeforeSuiteOnlyError

public class RerunBeforeSuiteOnlyError implements ISuiteListener {

    public static final Level DEFAULT_TEST_LOGGING_LEVEL = Level.ERROR;

    @Override
    public void onStart(final ISuite suite) {
        Configurator.setRootLevel(DEFAULT_TEST_LOGGING_LEVEL);
    }

    @Override
    public void onFinish(final ISuite suite) {

    }
}

RerunDebugModifier

public class RerunDebugModifier implements IRetryAnalyzer {

    boolean retried = false;

    @Override
    public boolean retry(final ITestResult result) {

        if (!this.retried) {
            Configurator.setRootLevel(Level.DEBUG);
            this.retried = true;
            return true;

        } else {
            Configurator.setRootLevel(RerunBeforeSuiteOnlyError.DEFAULT_TEST_LOGGING_LEVEL);

            return false;
        }

    }
}

RerunTestTransformer

public class RerunTestTransformer implements IAnnotationTransformer {


    @Override
    public void transform(final ITestAnnotation testannotation, final Class testClass, final Constructor testConstructor, final Method testMethod) {

        final IRetryAnalyzer retry = testannotation.getRetryAnalyzer();

        if (retry == null) {
            testannotation.setRetryAnalyzer(RerunDebugModifier.class);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.