在执行TestNG测试时捕获Log4j输出

z9ju0rcb  于 2022-11-06  发布在  其他
关注(0)|答案(5)|浏览(184)

我正在执行TestNG测试,并且日志输出设置为DEBUG,因此在出现故障时,我可以检查到底是什么地方出了问题。
问题是输出非常冗长,运行时会让每个人都感到困扰。我想捕获所有Log4J日志事件-这很容易-并且只在测试失败时打印它们。此外,我需要考虑@Before/@After方法,并打印它们的输出。
假设我已经有了一个Log4J LoggingEvent的列表,如何仅在Test/After/Before方法失败时才打印这些列表?

6jjcrrmo

6jjcrrmo1#

使用Reporter.log(str)将消息记录到报告中。

@AfterMethod
public void printLOGonFailure(ITestResult result) {
    if (result.getStatus() == ITestResult.FAILURE) {
        String  str = getLog();
        Reporter.log(str);
    }
}
vyu0f0g1

vyu0f0g12#

This site has a explanation on how to do it.。我在这里复制了代码部分,以防链接失效。

Logger.getLogger(this.getClass())
log4j.rootLogger=ERROR,TESTAPPENDER
log4j.appender.TESTAPPENDER=com.my.fantastic.MockedAppender
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

public class FooTest {
    private Appender appenderMock;
    @Before
    public void setupAppender() {
        appenderMock = mock(Appender.class);
        Logger.getRootLogger().addAppender(appenderMock);
    }
    @After
    public void removeAppender() {
        Logger.getRootLogger().removeAppender(appenderMock);
    }
    @Test
    public void testMethod()  {
        doStuffThatCausesLogging();
        verify(appenderMock).doAppend((LoggingEvent) anyObject());
    }
}

ArgumentCaptor arguments = ArgumentCaptor.forClass(LoggingEvent.class);
verify(appenderMock).doAppend(arguments.capture());

如果是这样的话,那么就可以用一个简单的方法来实现。

nbnkbykc

nbnkbykc3#

实作并注册org.testng.ITestListener,并在回呼方法上回应。

hrirmatl

hrirmatl4#

把JMockit放在依赖项中。有了它,日志测试就很容易了。
放入测试类:

@Cascading
final static Logger logging = Logger.getLogger(<some your>.class);

进行测试:

testedFunction(a, b, c);
    new Verifications() {{
        logging.error("The message that should be output");
        logging.info("Another message");
    }};
l7mqbcuq

l7mqbcuq5#

你可以使用像下面这样的代码:

@AfterMethod
public void printLOGonFailure(ITestResult result) {
    if (result.getStatus() == ITestResult.FAILURE) {
        final Logger logger = Logger.getLogger(Create_Case_from_an_Account.class);
        PropertyConfigurator.configure("C:\\Users\\svcSelenium\\eclipse-workspace\\SeleniumWork\\classes\\log4j.properties");       
        logger.error("Opps!!Test Failed due to:"+result.getThrowable());
    }
}

相关问题