2016-06-17 27 views
1

我有一个用例,我必须动态地在一个类下运行某些测试方法。并行化testng中的类和方法

我正在使用@factory注释来动态生成这些测试类。

我已经在并行运行的上述类下有我的测试方法。

如何使测试类和测试方法都平行?反正也有吗?

pubic class FactoryClass{ 

    @Factory 
    public Object[] factoryMethod(){ 
     return new Object[]{new TestClass(), new TestClass()} 
    } 
} 

public class TestClass{ 

    @DataProvider(name="firstDataProvider", parallel=true) 
    public Object[] firstDataProvider(){ 
     return new Object[]{}; 
    } 

    @DataProvider(name="secondDataProvider", parallel=true) 
    public Object[] secondDataProvider(){ 
     return new Object[]{}; 
    } 

    @Test(dataProvider="firstDataProvider") 
    public void firstTestMethod(String arg){ 

    } 

    @Test(dataProvider="secondDataProvider") 
    public void secondTestMethod(String arg){ 

    } 
} 

的test.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="Suite1" parallel="methods" data-provider-thread-count="60"> 
    <test name="test1"> 
     <classes> 
      <class name="com.amriteya.test.FactoryMain"></class>  
     </classes> 
    </test> 
</suite> 

以下是我班的布局。

test.xml我设置parallel =“methods”,但它没有提供正确的输出给我。

+0

提供的输出是什么,预期的输出是什么? – juherr

+0

在提供的输出中,这两个类的数据不是独立的,它们都使用相同的数据。即应该有不同数据的不同类别的方法正在使用相同的数据。 – Amriteya

回答

2

您无法将并行属性设置为测试方法和测试类。看来你需要在一个测试级别设置了一套级并行测试和平行班/方法,TestNG的XML的例子在这里要明确:

<suite name="Suite1" parallel="tests"> 
    <test name="test1" parallel="methods"> 
     <classes> 
      <class name="FactoryClass"/> 
     </classes> 
    </test> 
    <test name="test2" parallel="methods"> 
     <classes> 
      <class name="FactoryClass"/> 
     </classes> 
    </test> 
</suite> 

的所有方法都将在独特的线程中运行。 当您想要在几组浏览器上并行运行测试时,这种情况非常有用。套件级别的并行选项将定义您拥有两个浏览器池(Chrome浏览器和Firefox),并且测试级别的parellel选项将定义您在池中有多少浏览器。