TestNG - 并行运行多个线程的同一个类

时间:2016-09-20 12:34:22

标签: multithreading selenium testng

有没有办法与多个线程并行运行相同的类,比如

<suite name="myTestSuite" verbose="1">
    <test name="myTest" parallel="classes" thread-count="5">
        <classes>
            <class name="myPackage.Test" />
        </classes>
    </test>
</suite>

我希望在5个并行线程中调用类'myPackage.Test'。我知道如果我想并行执行不同的类,它会起作用,比如

<suite name="myTestSuite" verbose="1">
    <test name="myTest" parallel="classes" thread-count="5">
        <classes>
            <class name="myPackage.Test1" />
            <class name="myPackage.Test2" />
            <class name="myPackage.Test3" />
            <class name="myPackage.Test4" />
            <class name="myPackage.Test5" />
        </classes>
    </test>
</suite>

2 个答案:

答案 0 :(得分:1)

作为Factory模式的替代,您可以为每次运行类创建一个<test>节点,然后按test进行并行化。您还希望将并行化属性移动到<suite>节点。例如:

<suite name="mySuite" parallel="tests" thread-count="5">

    <test name="myTest1">
        <classes>
            <class name="myPackage.Test" />
        </classes>
    </test>

    <!-- Repeat the '<test>' node as many times as you wish to run the class -->

</suite>

您必须唯一地命名每个<test>,但这是一种非常简单的方式,可以多次并行地运行同一个类。

答案 1 :(得分:0)

您可以使用Factory创建5个测试类实例。

public class TestFactory {

  @Factory
  public Object[] createInstances() {
   Object[] result = new Object[5]; 
   for (int i = 0; i < 5; i++) {
      result[i] = new Test();
    }
    return result;
  }
}

然后,您可以使用parallel="instances"

<suite name="myTestSuite" verbose="1">
    <test name="myTest" parallel="instances" thread-count="5">
        <classes>
            <class name="myPackage.TestFactory"/>
        </classes>
    </test>
</suite>