2015-07-10 35 views
0

我想运行我的自动化套件(使用Selenium Webdriver(Java)+ TestNG + Maven实现)并行处理多个浏览器功能。我可以用下面的示例testng.xml文件在不同的功能并行运行如何依次运行TestNG测试节点,但并行运行不同的浏览器功能?

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite thread-count="5" name="Functional Test Suite" parallel="tests"> 
    <test name="Windows-FF-37.0" preserve-order="true" > 
     <parameter name="browser" value="Firefox"/> 
     <parameter name="version" value="37.0"/> 
     <parameter name="os" value="Windows"/> 
     <parameter name="os_version" value="8.1"/> 
     <parameter name="device" value=""/> 
     <classes> 
      <class name="uat.mycompany.tests.FirstTest"/> 
      <class name="uat.mycompany.tests.SecondTest"/> 
      <class name="uat.mycompany.tests.ThirdTest"/> 
      <class name="uat.mycompany.tests.FourthTest"/> 
     </classes> 
    </test> 
    <test name="MAC-Yosemite-Chrome-36.0" preserve-order="true"> 
     <parameter name="browser" value="Chrome"/> 
     <parameter name="version" value="36.0"/> 
     <parameter name="os" value="OS X"/> 
     <parameter name="os_version" value="Yosemite"/> 
     <parameter name="device" value=""/> 
     <classes> 
      <class name="uat.mycompany.tests.FirstTest"/> 
      <class name="uat.mycompany.tests.SecondTest"/> 
      <class name="uat.mycompany.tests.ThirdTest"/> 
      <class name="uat.mycompany.tests.FourthTest"/> 
     </classes> 
    </test> 
</suite> 

但是当我运行这个testng.xml文件,它与两个VM“FirstTest”开始;一个与Chrome + Mac &另一个与Forefox + Windows配置。我不想要这个,因为一个脚本修改的数据会失败另一个脚本。

我的要求是从一个节点并行运行所有类,然后依次运行节点。作为一种解决方法,我总是可以在不同的测试节点中以不同的顺序放置类名,但由于我有数百个测试类,因此这不是可行的解决方案。

此外,最终我想通过一些属性文件设置这些参数,以便我可以轻松管理运行环境。

回答

1

您可以按照下面的步骤:

  • 定义不同的测试2个不同的套件(XML文件)。
  • 每个套房提及:thread-count="4" parallel="classes"
  • 创建第三个套件(XML文件),以运行上述2个文件顺序(别提线程计数套件&平行参数。)

第一个XML文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite thread-count="5" name="Functional Test Suite1" parallel="classes"> 
    <test name="Windows-FF-37.0" preserve-order="true" > 
     <parameter name="browser" value="Firefox"/> 
     <parameter name="version" value="37.0"/> 
     <parameter name="os" value="Windows"/> 
     <parameter name="os_version" value="8.1"/> 
     <parameter name="device" value=""/> 
     <classes> 
      <class name="uat.mycompany.tests.FirstTest"/> 
      <class name="uat.mycompany.tests.SecondTest"/> 
      <class name="uat.mycompany.tests.ThirdTest"/> 
      <class name="uat.mycompany.tests.FourthTest"/> 
     </classes> 
    </test> 
</suite> 

二XML文件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite thread-count="5" name="Functional Test Suite2" parallel="classes"> 
    <test name="MAC-Yosemite-Chrome-36.0" preserve-order="true"> 
     <parameter name="browser" value="Chrome"/> 
     <parameter name="version" value="36.0"/> 
     <parameter name="os" value="OS X"/> 
     <parameter name="os_version" value="Yosemite"/> 
     <parameter name="device" value=""/> 
     <classes> 
      <class name="uat.mycompany.tests.FirstTest"/> 
      <class name="uat.mycompany.tests.SecondTest"/> 
      <class name="uat.mycompany.tests.ThirdTest"/> 
      <class name="uat.mycompany.tests.FourthTest"/> 
     </classes> 
    </test> 
</suite> 

三XML文件(需要执行这个文件):

<suite name="suite of suites"> 
    <suite-files> 
     <suite-file path="Functional Test Suite1.xml" /> 
     <suite-file path="Functional Test Suite2.xml" /> 
    </suite-files> 
</suite> 
-1

你可以像下面的代码,它会工作。

+0

哪里代码示例? – 9ikhan

0

对于上述例子设定<suite thread-count="4" name="Functional Test Suite" parallel="classes">

如果您将thread-count设置为小于test中的classes的数量,则tests将按顺序运行,但classes将并行运行。一旦所有测试classestest中运行,则将开始下一个test

+0

嗨9ikhan,我尝试了多种方式使用你的建议,但每次启动只是单线程。设置thread-count =“4”parallel =“classes”,但这没有帮助。我之前也试过这个。请让我知道你是否有任何其他解决方案。 – Vijay

0

<test name="api test" parallel="methods"> 

    <groups> 

     <run> 
      <include name="test_proxy" /> 
     </run> 

    </groups> 

    <classes> 
     <class name="com.spire.test.TestAutomation" /> 
    </classes> 

</test> 

<test name="api test1" parallel="methods"> 

    <groups> 

     <run> 
      <include name="test" /> 
     </run> 

    </groups> 

    <classes> 
     <class name="com.spire.test1.TestAutomation1" /> 
    </classes> 

</test>