0

我想针对多个浏览器功能并行运行我的自动化套件(使用 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 配置。我不想要这个,因为一个脚本修改的数据使另一个脚本失败。

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

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

4

4 回答 4

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>
于 2015-07-12T18:10:01.213 回答
0

对于上面的示例集<suite thread-count="4" name="Functional Test Suite" parallel="classes">

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

于 2015-07-12T17:51:41.003 回答
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>

于 2015-07-13T07:04:58.490 回答
-1

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

于 2015-07-11T08:27:25.147 回答