只有在您的 class 之一完成其测试后,如何 运行 您的测试才达到 class 级别的并行性
How to run your tests in class level parallelism only after one of your class has finished with it's tests
我遇到了一个相当独特的问题,我相信你们中的一些人可能在某个时候遇到过类似的问题。
所以我的 testNg 套件中总共有 10 个 class 测试,我希望它们并行 运行。这很简单,但问题是我的 class 让我们假设 class 测试 A,不仅设置测试数据而且测试应用程序的某些功能,因此我不能在 BeforeSuite 或BeforeTest 注释。通过执行此 class 下的测试创建的测试数据对于其他测试 class 到 运行 很重要,因此我真的很抓狂如何实现 Class以这样的方式并行化 运行 仅在测试 A class 下的测试完成其执行后才启动。
总结
Class 测试 A
public class TestsA {
@BeforeClass
public setupTestClass(){
-----some code--------
}
@Test
public test1(){
------some code---
}
我希望这个 TestA class 先到 运行,然后并行实例化其他测试 classes。
任何有关此的帮助将不胜感激。
谢谢
默认情况下,所有测试方法都具有优先级“0”值。因此,如果您希望特定测试方法在所有其他测试之前执行,那么您可以将该特定测试的优先级设置为 -1。优先级较低的是它在 testng 中的执行。因此,优先级为 -1 的测试优先于所有其他优先级为“0”的测试。
示例设置单个测试方法的优先级
public class ClassA {
@Test(priority = -1)
public void b(){
System.out.println("Test1");
}
@Test
public void a(){
System.out.println("Test2");
}
}
示例 2: 设置整个 class
的优先级
@Test(priority = -1)
public class ClassA {
public void b(){
System.out.println("Test1");
}
public void a(){
System.out.println("Test2");
}
}
两个示例的输出:
测试 1
测试2
我已经找到上述问题的解决方案。我所要做的就是在我的 testng.xml 套件上配置两个不同的测试。第一个测试将只有测试 class A,另一个测试将有其他测试 classes 在 class 级别具有并行性。由于在第一个测试下只有一个 class,因此 class 下的测试将首先执行。在我的例子中,Test Class A 负责测试某些功能并设置一些数据。然后 testng.xml 的下一个测试将并行实例化其他 classes。
下面是我的 testng.xml 的样子
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Test_Suite_Name" verbose="1" parallel="classes" thread-count="4">
<test name="TEST_TESTCLASSA" preserve-order="true">
<parameter name="environment" value="macos"/>
<groups>
<run>
<include name="Smoke"/>
<exclude name="Sanity"/>
<exclude name="Exclude"/>
</run>
</groups>
<classes>
<class name="testpackage.TestClassA"/>
</classes>
</test>
<test name="TEST_OTHER_TESTS" preserve-order="true">
<parameter name="environment" value="macos"/>
<groups>
<run>
<include name="Smoke"/>
<exclude name="Sanity"/>
<exclude name="Exclude"/>
</run>
</groups>
<classes>
<class name="testpackage.TestClassB"/>
<class name ="testpackage.TestClassC"/>
<class name="testpackage.TestClassD"/>
<class name="testpackage.TestClassE"/>
<class name="testpackage.TestClassF"/>
<class name="testpackage.TestClassG"/>
</classes>
</test>
</suite>
我遇到了一个相当独特的问题,我相信你们中的一些人可能在某个时候遇到过类似的问题。
所以我的 testNg 套件中总共有 10 个 class 测试,我希望它们并行 运行。这很简单,但问题是我的 class 让我们假设 class 测试 A,不仅设置测试数据而且测试应用程序的某些功能,因此我不能在 BeforeSuite 或BeforeTest 注释。通过执行此 class 下的测试创建的测试数据对于其他测试 class 到 运行 很重要,因此我真的很抓狂如何实现 Class以这样的方式并行化 运行 仅在测试 A class 下的测试完成其执行后才启动。
总结
Class 测试 A
public class TestsA {
@BeforeClass
public setupTestClass(){
-----some code--------
}
@Test
public test1(){
------some code---
}
我希望这个 TestA class 先到 运行,然后并行实例化其他测试 classes。 任何有关此的帮助将不胜感激。
谢谢
默认情况下,所有测试方法都具有优先级“0”值。因此,如果您希望特定测试方法在所有其他测试之前执行,那么您可以将该特定测试的优先级设置为 -1。优先级较低的是它在 testng 中的执行。因此,优先级为 -1 的测试优先于所有其他优先级为“0”的测试。
示例设置单个测试方法的优先级
public class ClassA {
@Test(priority = -1)
public void b(){
System.out.println("Test1");
}
@Test
public void a(){
System.out.println("Test2");
}
}
示例 2: 设置整个 class
的优先级@Test(priority = -1)
public class ClassA {
public void b(){
System.out.println("Test1");
}
public void a(){
System.out.println("Test2");
}
}
两个示例的输出:
测试 1
测试2
我已经找到上述问题的解决方案。我所要做的就是在我的 testng.xml 套件上配置两个不同的测试。第一个测试将只有测试 class A,另一个测试将有其他测试 classes 在 class 级别具有并行性。由于在第一个测试下只有一个 class,因此 class 下的测试将首先执行。在我的例子中,Test Class A 负责测试某些功能并设置一些数据。然后 testng.xml 的下一个测试将并行实例化其他 classes。
下面是我的 testng.xml 的样子
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Test_Suite_Name" verbose="1" parallel="classes" thread-count="4">
<test name="TEST_TESTCLASSA" preserve-order="true">
<parameter name="environment" value="macos"/>
<groups>
<run>
<include name="Smoke"/>
<exclude name="Sanity"/>
<exclude name="Exclude"/>
</run>
</groups>
<classes>
<class name="testpackage.TestClassA"/>
</classes>
</test>
<test name="TEST_OTHER_TESTS" preserve-order="true">
<parameter name="environment" value="macos"/>
<groups>
<run>
<include name="Smoke"/>
<exclude name="Sanity"/>
<exclude name="Exclude"/>
</run>
</groups>
<classes>
<class name="testpackage.TestClassB"/>
<class name ="testpackage.TestClassC"/>
<class name="testpackage.TestClassD"/>
<class name="testpackage.TestClassE"/>
<class name="testpackage.TestClassF"/>
<class name="testpackage.TestClassG"/>
</classes>
</test>
</suite>