总共有5个测试类。它们中的每一个都使用@Factory(dataprovider =“data”)进行初始化。我想要实现的是,每个测试类中的测试方法应该与dataprovider实例并行运行。此外,测试类应该并行运行。
如下所示。 TestClass1应该并行运行dataprovider实例。因此,测试类TestClass1的所有方法都将为dataprovider实例并行运行。
此外,与TestClass1一样,还有2个其他测试类。我希望它们具有相同的行为,并且所有3个测试类并行运行。
在 testng.xml 中安排测试类和参数
data-provider-thread-count =“10”parallel =“instances”thread-count =“5”“
在套件级别和测试级别,
parallel =“instances”thread-count =“5”
观察到的行为是,由dataprovider实例创建的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 :(得分:2)
我终于能够运行&lt; test /&gt;中存在的@Factory测试类了。并行使用给定的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>
答案 1 :(得分:1)
你可以使它parallel =“methods”。删除测试级别的parallel =“instances”。只保留在套房层面。