java控制台在并行测试中的输出显示在不同的测试树中,而不是在中启动
我在Intellij IDEA 13.4、logback 1.1.2中使用TestNG 6.8.8。我有很多测试类,有这样的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");
和后勤支援。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=“1”时,一切都正常-控制台将每个测试记录在自己的树节点中
但是,当我使用threadcount=“3”或更高的线程数运行TestNG时,一些日志条目不会显示在它们自己的测试树节点中,而是显示在其他一些节点中
例如,测试“test1”的树节点中的控制台输出可以是:
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执行的结果,而树节点中测试“test2”的控制台输出为空。 此外,控制台输出的xml导出显示,一些日志值会转到不同的测试结果
Intellij如何为每个测试负责的输出线设计? 有没有办法强制Intellij IDEA通过MDC mark检查哪个类负责哪个日志条目? 或者是否有其他方法确保控制台输出位于测试树中的相应位置
# 1 楼答案
这是一个已知的错误。投票,甚至可能撞上它
IDEA-73260 IntelliJ test runner mixes output from different tests when TestNG parallel is used