【问题标题】:Running test classes in parallel with @Factory in TestNG在 TestNG 中与 @Factory 并行运行测试类
【发布时间】:2016-06-29 23:34:38
【问题描述】:

总共有 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>

【问题讨论】:

  • 基本上你想实现完全并行?
  • @niharika_neo:是的。
  • 你可以让它并行="methods"。在测试级别删除 parallel="instances"。仅保留在套件级别。

标签: java multithreading parallel-processing testng testng-dataprovider


【解决方案1】:

我终于能够使用给定的 testNG xml 并行运行 中存在的 @Factory 测试类

<?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>

【讨论】:

  • 是的,您需要在套件级别使用 parallel="tests",然后在测试中使用 parallel="instances"
【解决方案2】:

你可以让它parallel="methods"。在测试级别删除 parallel="instances"。仅保留在套件级别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2017-07-22
    • 2021-03-15
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多