并行测试中的控制台输出显示在不同的测试树中,而不是在启动时

时间:2014-09-19 08:30:06

标签: java intellij-idea testng logback mdc

我在Intellij IDEA 13.4中使用TestNG 6.8.8,logback 1.1.2。我有一堆测试类,并有像这样的xml启动器:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Example" parallel="tests" thread-count="3">

<test name="test1">
    <classes>
        <class name="ExampleClass1"/>
    </classes>
</test>
<test name="test2">
    <classes>
        <class name="ExampleClass2"/>
    </classes>
</test>
<test name="test3">
    <classes>
        <class name="ExampleClass3"/>
    </classes>
</test>

另外,每个类都有不同测试类的MDC标记:

 MDC.put("testName", "ExampleClass1");

和logback.xml:

<configuration>

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %C [%X{testName}]  - %m%n</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
</appender>

<root level="debug">
    <appender-ref ref="console" />
</root>

</configuration>

当我将xml runner更改为thread-count =&#34; 1&#34;一切都很好 - 控制台将每个测试记录在它自己的树节点中。

但是当我使用thread-count =&#34; 3&#34;运行TestNG时或者更多,一些日志条目不是在它们自己的测试树节点中显示,而是在其他一些节点中显示。

例如,用于测试的树节点中的控制台输出&#34; test1&#34;可以是:

11:53:28.388 ExampleClass1 [ExampleClass1]  - logEntry
11:53:28.388 ExampleClass2 [ExampleClass2]  - logEntry
11:53:29.800 ExampleClass1 [ExampleClass1]  - logEntry2
11:53:29.958 ExampleClass2 [ExampleClass2]  - logEntry2

因此,类ExampleClass2的日志条目显示为执行ExampleClass1的结果,而控制台输出在树节点中用于测试&#34; test2&#34;是空的。 另外,控制台输出的xml导出显示,某些日志值会转到不同的测试结果。

Intellij如何确定测试负责的每个输出行? 有没有办法强制Intellij IDEA以某种方式检查哪个类由MDC标记负责哪个日志条目? 或者是否有任何其他方法可以确保控制台输出位于测试树中?

1 个答案:

答案 0 :(得分:2)

这是一个已知的错误。投票,甚至可能碰到它。

IDEA-73260 IntelliJ test runner mixes output from different tests when TestNG parallel is used