执行结束后,日志会立即全部转储到控制台,而不是实时打印

问题描述

我正在使用 Maven(带有 Surefire 插件)和 TestNG 进行测试自动化项目。因为我有很长时间运行的 UI 脚本(最多 20 分钟),所以我大量使用控制台日志。这对我来说至关重要,至少在每个脚本的开发阶段。但是,日志会在执行结束时一次性全部转储,而不是实时打印。我意识到这在并行执行的情况下非常有意义(以避免重叠问题),但我想要一种在以串行方式执行时禁用它的方法。我搜索了 Surefire 和 TestNG 文档,但似乎找不到方法。任何帮助,将不胜感激。这是一个非常简单的虚拟项目来重现问题:

projectRoot/pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>org.example</groupId>
    <artifactId>project</artifactId>
    <version>1.0</version>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>3.0.0-M5</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.3.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

projectRoot/src/test/java/DummyTest.java

import org.testng.annotations.*;

public class DummyTest {
    @Test
    public void ConsoleLoggingtest() {
        System.out.println("STARTING TEST...");
        try { Thread.sleep(30000); } catch (Exception ignored) { } //SIMULATE LONG-RUNNING TASK
        System.out.println("TEST IS FINISHED!");
    }
}

我过去常常在我的 IDE (IntelliJ IDEA) 中使用 mvn test 命令执行测试。请注意,为了简单起见,我使用了 System.out.println(),但我使用任何日志库(如 log4j)都会得到相同的行为。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)