我只是在 6.9.x 版本中使用 TestNG 框架处理一些遗留代码,我必须升级到更新版本的框架 - 至少 6.11 。问题是,许多@Test
注释都标有额外的优先级属性(@Test(priority = x)
)。但是在6.10版本的TestNG中引入更改后,我遇到了一个问题,即:
新功能:订单功能的层次结构(从不太重要到更多 重要):groupByInstance,preserveOrder,priority,dependsOnGroups, dependsOnMethods
让我们看一个两个测试类的示例,每个测试类包含三个具有已定义优先级的测试方法:
头等舱:
public class TestClass1 {
Logger LOG = Logger.getLogger("logger1");
@Test(priority = 2)
public void methodB() {
LOG.info("Method 1B");
}
@Test(priority = 3)
public void methodA() {
LOG.info("Method 1A");
}
@Test(priority = 1)
public void methodC() {
LOG.info("Method 1C");
}
}
第二个:
public class TestClass2 {
Logger LOG = Logger.getLogger("logger2");
@Test(priority = 1)
public void methodC() {
LOG.info("Method 2C");
}
@Test(priority = 2)
public void methodB() {
LOG.info("Method 2B");
}
@Test(priority = 3)
public void methodA() {
LOG.info("Method 2A");
}
}
...和XML:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<test name="Test" preserve-order="true">
<classes>
<class name="com.test.radek.testngtest.TestClass2"/>
<class name="com.test.radek.testngtest.TestClass1"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
运行这样的XML套件后,不同TestNG版本的测试执行顺序各不相同:
对于6.9.x:
Apr 30, 2018 11:46:19 AM com.test.radek.testngtest.TestClass2 **methodC**
Apr 30, 2018 11:46:19 AM com.test.radek.testngtest.TestClass2 **methodB**
Apr 30, 2018 11:46:19 AM com.test.radek.testngtest.TestClass2 **methodA**
Apr 30, 2018 11:46:19 AM com.test.radek.testngtest.TestClass1 **methodC**
Apr 30, 2018 11:46:19 AM com.test.radek.testngtest.TestClass1 **methodB**
Apr 30, 2018 11:46:19 AM com.test.radek.testngtest.TestClass1 **methodA**
对于6.10及更高版本:
Apr 30, 2018 11:47:37 AM com.test.radek.testngtest.TestClass2 **methodC**
Apr 30, 2018 11:47:37 AM com.test.radek.testngtest.TestClass1 **methodC**
Apr 30, 2018 11:47:37 AM com.test.radek.testngtest.TestClass2 **methodB**
Apr 30, 2018 11:47:37 AM com.test.radek.testngtest.TestClass1 **methodB**
Apr 30, 2018 11:47:37 AM com.test.radek.testngtest.TestClass2 **methodA**
Apr 30, 2018 11:47:37 AM com.test.radek.testngtest.TestClass1 **methodA**
因此,在这两个示例中,我们可以看到从TestNG 6.10开始 preserve-order
被priorities
完全忽略。
我看到关于此preserve-order
/ priority
关联的discussion,现在我不确定如何处理此问题。
主要问题:
TestNG是否有任何机制允许根据@Test中定义的优先级执行测试但按类分组(并且类顺序在XML套件中定义) - 所以完全如此在TestNG 6.10之前? 将依赖于优先级和保留顺序的旧测试迁移到新的TestNG的最正确方法是什么?使用dependsOnGroups替换“priority”逻辑对于1000多种测试方法来说可能非常耗时:/