web-dev-qa-db-ja.com

DataProviderによるTestNG並列実行

データプロバイダーからデータを受信する単一のテストがあります。このテストをデータプロバイダーからの異なる値と並行して実行したいと思います。

私は次のようなアプローチを試しました:

public class IndependentTest
{
@Test(dataProvider = "dp1" ,threadPoolSize=3,invocationCount=1)

public void testMethod(int number)
{
    Long id = Thread.currentThread().getId();
    System.out.println("HELLO :  " + id);
}


@DataProvider(name = "dp1",parallel=true)
public Object[][] dp1() {
  return new Object[][] {
      new Object[] { 1 },
      new Object[] { 2 },
      new Object[] { 3 },
      new Object[] { 4 },
      new Object[] { 5 },
      new Object[] { 6 },
      new Object[] { 7 },
      new Object[] { 8 }

  };
}

}

私が受け取った出力は:

ハロー:10

ハロー:12

こんにちは:17

ハロー:11

こんにちは:16

こんにちは:14

こんにちは:13

こんにちは:15

スレッドプールサイズに5を指定しているときに10スレッドを生成しました。データプロバイダーのスレッドプールサイズを制御するために、上記のスニペットに何を追加する必要があるか教えてください。

13
sujith

dataproviderthreadcountを使用する必要があります。 threadpoolsizeinvocationcountの値は必要ありません。詳細はこちら こちら

17
niharika_neo

次の方法でスレッドプールを設定してみます。

@BeforeClass
public void setupClassName(ITestContext context) {
    context.getCurrentXmlTest().getSuite().setDataProviderThreadCount(5);
    context.getCurrentXmlTest().getSuite().setPreserveOrder(false);
}
3
sanitar4eg

Testng.xmlでは、data-provider-thread-count="3"を使用してデータプロバイダーのスレッド数を設定できます

<suite name="Manage" data-provider-thread-count="3" >
    <test name="Manage data tests">
        <classes>
            <class name="uk.example.ExampleTest"></class>
        </classes>
    </test>
</suite>
1
Igor Gladun

これを実現するには、定義にDataProviderの名前と共に 'parallel = true'設定を追加します。次に例を示します。

@DataProvider(name="InvalidLoginDataProvider", parallel = true)
public Object[][] myDataProviderMethod(){
...
...
}

TestNGドキュメントに従って、@ Testスレッドプール(@TestのinvocationCountパラメータとthreadPoolSizeパラメータを使用して作成)とデータプロバイダスレッドプールは異なり、管理方法も異なります。
したがって、データプロバイダーのスレッドプールにあるスレッドの数を指定するには、testng.xmlファイルに次の構成を追加する必要があります。

<suite name="Suite1" data-provider-thread-count="20" >
...
...
</suite> 

HTH!

1
ChaM

こんにちは私はデータプロバイダーのスレッド数で処理しようとすると、エラーを下回っています。問題の解決方法

Java.lang.IllegalStateException:BasicClientConnManagerの無効な使用:接続がまだ割り当てられています。別の接続を割り当てる前に、必ず接続を解放してください。

0
user12896703

私はそれを注釈レベルで設定する方法があると思います、それはDataProviderに追加する必要があります:

@DataProvider(name="quick-screen-list", parallel = true)
        public Object[][] quickScreenDataProvider() {
           .....
0
yu yang