0

合計5つのテストクラスがあります。それぞれは@Factory(dataprovider = "data")を使って初期化されます。達成したいのは、各テストクラスのテストメソッドは、dataproviderインスタンスと並行して実行する必要があるということです。また、テストクラスは並列に実行する必要があります。TestNGの@Factoryと並行してテストクラスを実行する

次のようなものです。 TestClass1は、dataproviderインスタンスを並列に実行する必要があります。したがって、テストクラスTestClass1のすべてのメソッドは、dataproviderインスタンスに対して並列に実行されます。

また、TestClass1と同様に、2つの他のテストクラスがあります。私はそれらから同じ動作を期待しており、3つのテストクラスはすべて並列に動作しています。

データプロバイダスレッドカウント=「10」平行=「インスタンス」スレッドカウント=「5」を与えるtestng.xmlにおけるテストクラスおよびパラメータの構成で

「スイートレベルと試験レベルで

パー対立=「インスタンス」スレッドカウント=「5」

観察された行動は、データプロバイダインスタンスが作成したTestClass1インスタンスが並列に実行されている、ということです。 TestClass2とTestClass3は実行を開始していません。 TestClass1が終了した直後に、TestClass2はTestClass1と同じ方法で実行を開始し、続いてTestClass3が実行されます。

意図した動作を達成するために必要な変更は何ですか?

ありがとうございます。

import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

import org.testng.Assert; 
import org.testng.annotations.DataProvider; 
import org.testng.annotations.Factory; 
import org.testng.annotations.Listeners; 
import org.testng.annotations.Test; 
import org.testng.reporters.EmailableReporter2; 

@Listeners({ TestExecutionListener.class, EmailableReporter2.class }) 
public class TestClass { 

    private int value; 

    @Factory(dataProvider = "data", dataProviderClass = TestClass.class) 
    public TestClass(final int value) { 
     this.value = value; 
    } 

    @Test(alwaysRun = true) 
    public void testOdd() { 
     Assert.assertTrue(value % 2 != 0); 
    } 

    @Test(alwaysRun = true) 
    public void testEven() { 
     Assert.assertTrue(value % 2 == 0); 
    } 

    @DataProvider(name = "data") 
    public static Iterator<Object[]> data() { 

     List<Object[]> list = new ArrayList<>(); 
     for (int i = 0; i < 2; i++) { 
      list.add(new Object[] { i }); 
     } 
     return list.iterator(); 
    } 
} 

testng.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="mobile rc automation suite" 
    data-provider-thread-count="10" parallel="instances" thread-count="5"> 

    <test name="test_1" parallel="instances" 
     thread-count="5"> 
     <classes> 
      <class name="com.test.TestClass1" /> 
     </classes> 
    </test> 

    <test name="test_2" parallel="instances" 
     thread-count="5"> 
     <classes> 
      <class name="com.test.TestClass2" /> 
     </classes> 
    </test> 

    <test name="test_3" parallel="instances" 
     thread-count="5"> 
     <classes> 
      <class name="com.test.TestClass3" /> 
     </classes> 
    </test> 

</suite> 
+0

を使用して並列に<テスト/ >に存在する@Factoryテストクラスを実行することができました基本的には完全な並列処理を実現したいですか? –

+0

@niharika_neo:はい。 – Sarath

+0

これをparallel = "methods"にすることができます。テストレベルでparallel = "instances"を削除します。スイートレベルのみを維持してください。 –

答えて

1

あなたはそれが= "メソッド" を平行にすることができます。テストレベルでparallel = "instances"を削除します。スイートレベルのみを維持してください。

1

私は最終的に与えられたのTestNG XML

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="mobile rc automation suite" 
    data-provider-thread-count="10" parallel="tests" thread-count="5"> 

    <test name="test_1" parallel="instances" 
     thread-count="5"> 
     <classes> 
      <class name="com.test.TestClass1" /> 
     </classes> 
    </test> 

    <test name="test_2" parallel="instances" 
     thread-count="5"> 
     <classes> 
      <class name="com.test.TestClass2" /> 
     </classes> 
    </test> 

    <test name="test_3" parallel="instances" 
     thread-count="5"> 
     <classes> 
      <class name="com.test.TestClass3" /> 
     </classes> 
    </test> 

</suite> 
+0

うん、スイートレベルではparallel = "tests"、次にテストではparallel = "instances"が必要です – mac

関連する問題