1

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");

および 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 ランナーを thread-count="1" に変更すると、すべて問題ありません。コンソールは、各テストを独自のツリー ノードに記録します。

しかし、thread-count="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 マークによってどのクラスがどのログエントリを担当しているかを何らかの形でチェックする方法はありますか? または、コンソール出力がテストツリーの場所にあることを確認する他の方法はありますか?

4

1 に答える 1

2

これは既知のバグです。投票して、たぶんそれをぶつけてください。

IDEA-73260 TestNG 並列を使用すると、IntelliJ テスト ランナーが異なるテストからの出力を混合する

于 2014-09-19T22:35:52.290 に答える