【问题标题】:How to run TestNG test nodes in sequence but all inside classes in parallel for different browser capabilities?如何为不同的浏览器功能按顺序运行 TestNG 测试节点但并行运行所有内部类?
【发布时间】:2015-09-29 20:09:49
【问题描述】:

我想针对多个浏览器功能并行运行我的自动化套件(使用 Selenium Webdriver (Java) + TestNG + Maven 实现)。我可以使用下面的示例 testng.xml 并行运行它以获得不同的功能

<!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 时,它在两个虚拟机上都以“FirstTest”开头;一个使用 Chrome+Mac,另一个使用 Forefox+Windows 配置。我不想要这个,因为一个脚本修改的数据使另一个脚本失败。

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

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

【问题讨论】:

    标签: selenium selenium-webdriver testng saucelabs browserstack


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以按照以下步骤操作:

      • 为不同的测试定义 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>
      

      【讨论】:

        【解决方案3】:

        对于上面的例子设置&lt;suite thread-count="4" name="Functional Test Suite" parallel="classes"&gt;

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

        【讨论】:

        • 嗨 9ikhan,我根据您的建议尝试了多种方式,但每次它只启动一个线程。设置线程计数=“4”并行=“类”,但这没有帮助。我以前也试过这个。如果您有其他解决方案,请告诉我。
        【解决方案4】:

        您可以像下面这样编写代码,它会起作用。

        【讨论】:

          猜你喜欢
          • 2021-04-13
          • 2018-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多