並列="インスタンス":
TestNG は同じインスタンスのすべてのメソッドを同じスレッドで実行しますが、2 つの異なるインスタンスの 2 つのメソッドは異なるスレッドで実行されます。
この文をどう理解する?
TestNG のデフォルトの動作は、並列スレッドをまったく使用しないことです。
このparallel
属性は、並列スレッドを使用するときにスイートがそのメソッドを実行する方法を設定します。
わかりやすくするために、テスト クラスを考えてみましょう。
public class StuffTest {
@Test
public void doStuffTest() {
// do your thing
}
}
デフォルト (並列なし):
StuffTest
(たとえば)の新しいインスタンスは、テストの実行ごとst
に作成されます。とst
順番に実行されます (順序は他の設定によって異なります)。このparallel
属性を使用すると、TestNG は並列スレッドを使用してテストを同時に実行します。( の値は、parallel
これらのスレッドがテスト クラスのインスタンスとメソッドを処理する方法を設定します。可能なオプションについては、ドキュメントを確認してください。)
parallel="instances"
StuffTest
(たとえばsa
and )のインスタンスが複数ある場合sb
:
sa
、同じスレッド (たとえば、スレッドta
) で実行されます。sb
、同じスレッド (たとえば、スレッドtb
) で実行されます。ta
!= tb
。その質問には多くのコンテキストはありませんが、簡単なグーグルでソースが見つかりました。
テスト スイートは、さまざまなクラスの多数のインスタンスを作成し、それらに対していくつかのテストを実行します。この特定の並列モードでは、テスト スイートが作成インスタンスで複数のメソッドを呼び出すときは常に、同じスレッドで実行されることが保証されます。
なぜこれが重要なのでしょうか? まあ、一部の機能は一貫したスレッドに依存する場合があります。たとえば、 を使用する場合などですThreadLocal
。さらに、インスタンスがスレッドセーフでない限り、複数のスレッドがそれらのメソッドを呼び出すことを許可すると、干渉が発生する可能性があります。
スレッド セーフに関するこの話が何なのかよくわからない場合は、テスト スイートを並行して実行したくないかもしれません。parallel="tests"
または、テスト タグを明確に区別して、制限することもできます。