4

並列="インスタンス":

TestNG は同じインスタンスのすべてのメソッドを同じスレッドで実行しますが、2 つの異なるインスタンスの 2 つのメソッドは異なるスレッドで実行されます。

この文をどう理解する?

4

2 に答える 2

3

TestNG のデフォルトの動作は、並列スレッドをまったく使用しないことです。

このparallel属性は、並列スレッドを使用するときにスイートがそのメソッドを実行する方法を設定します。

わかりやすくするために、テスト クラスを考えてみましょう。

public class StuffTest {
    @Test
    public void doStuffTest() {
        // do your thing
    }
}

デフォルト (並列なし):

  • StuffTest(たとえば)の新しいインスタンスは、テストの実行ごとstに作成されます。と
  • の各メソッドはst順番に実行されます (順序は他の設定によって異なります)。

このparallel属性を使用すると、TestNG は並列スレッドを使用してテストを同時に実行します。( の値は、parallelこれらのスレッドがテスト クラスのインスタンスとメソッドを処理する方法を設定します。可能なオプションについては、ドキュメントを確認してください。)

parallel="instances"StuffTest(たとえばsaand )のインスタンスが複数ある場合sb:

  • インスタンスのすべてのメソッドはsa、同じスレッド (たとえば、スレッドta) で実行されます。
  • インスタンスのすべてのメソッドはsb、同じスレッド (たとえば、スレッドtb) で実行されます。
  • そしてta!= tb
于 2013-06-13T15:17:49.860 に答える
3

その質問には多くのコンテキストはありませんが、簡単なグーグルでソースが見つかりました。

テスト スイートは、さまざまなクラスの多数のインスタンスを作成し、それらに対していくつかのテストを実行します。この特定の並列モードでは、テスト スイートが作成インスタンスで複数のメソッドを呼び出すときは常に、同じスレッドで実行されることが保証されます。

なぜこれが重要なのでしょうか? まあ、一部の機能は一貫したスレッドに依存する場合があります。たとえば、 を使用する場合などですThreadLocal。さらに、インスタンスがスレッドセーフでない限り、複数のスレッドがそれらのメソッドを呼び出すことを許可すると、干渉が発生する可能性があります。

スレッド セーフに関するこの話が何なのかよくわからない場合は、テスト スイートを並行して実行したくないかもしれません。parallel="tests"または、テスト タグを明確に区別して、制限することもできます。

于 2013-06-13T15:05:38.533 に答える