如何按顺序 运行 TestNG 测试节点,但在 类 内并行测试不同的浏览器功能?
How to run TestNG test nodes in sequence but all inside classes in parallel for different browser capabilities?
我想 运行 我的自动化套件(使用 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 配置。我不想要这个,因为一个脚本修改的数据使另一个脚本失败。
我的要求是 运行 所有 类 来自一个节点的并行和顺序节点。
作为一种解决方法,我总是可以在不同的测试节点中以不同的顺序放置 类 名称,但由于我有数百个测试 类,因此这不是可行的解决方案。
此外,最终我想通过一些属性文件设置这些参数,以便我可以轻松管理 运行 环境。
您可以像下面这样编写代码,它会起作用。
对于上面的例子设置<suite thread-count="4" name="Functional Test Suite" parallel="classes">
如果您将 thread-count
设置为小于 test
中 classes
的数量,那么 tests
将 运行 顺序地 [=12] =] 将 运行 并行。一旦所有测试 classes
都在 test
中 运行 然后下一个 test
将开始。
您可以按照以下步骤操作:
- 为不同的测试定义 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>
<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>
我想 运行 我的自动化套件(使用 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 配置。我不想要这个,因为一个脚本修改的数据使另一个脚本失败。
我的要求是 运行 所有 类 来自一个节点的并行和顺序节点。 作为一种解决方法,我总是可以在不同的测试节点中以不同的顺序放置 类 名称,但由于我有数百个测试 类,因此这不是可行的解决方案。
此外,最终我想通过一些属性文件设置这些参数,以便我可以轻松管理 运行 环境。
您可以像下面这样编写代码,它会起作用。
对于上面的例子设置<suite thread-count="4" name="Functional Test Suite" parallel="classes">
如果您将 thread-count
设置为小于 test
中 classes
的数量,那么 tests
将 运行 顺序地 [=12] =] 将 运行 并行。一旦所有测试 classes
都在 test
中 运行 然后下一个 test
将开始。
您可以按照以下步骤操作:
- 为不同的测试定义 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>
<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>