我面临以下问题:我创建了两个包含@Tests优先级属性的类:
@Test( priority = 1 )
public void testA1() {
System.out.println("testA1");
}
@Test( priority = 2 )
public void testA2() {
System.out.println("testA2");
}
@Test( priority = 3 )
public void testA3() {
System.out.println("testA3");
}
......而且......
@Test( priority = 1 )
public void testB1() {
System.out.println("testB1");
}
@Test( priority = 2 )
public void testB2() {
System.out.println("testB2");
}
@Test( priority = 3 )
public void testB3() {
System.out.println("testB3");
}
我在testng.xml中将这两个类放在一个测试中,但是当我运行测试时,它将根据两个类的优先级命令我的@Tests:
testA1
testB1
testA2
testB2
testA3
testB3
我期待以下结果:
testA1
testA2
testA3
testB1
testB2
testB3
我的问题是如何防止基于这两个类订购我的@Tests并同时只从一个类运行@Tests?
在你的套件xml中使用group-by-instances =“true”
示例,其中TestClass1和TestClass2具有与您相同的内容
<suite thread-count="2" verbose="10" name="testSuite" parallel="tests">
<test verbose="2" name="MytestCase" group-by-instances="true">
<classes>
<class name="com.crazytests.dataproviderissue.TestClass1" />
<class name="com.crazytests.dataproviderissue.TestClass2" />
</classes>
</test>
</suite>
我得到了输出
testA1
testA2
照
testB1
testB2
testB3
最正确的方法是使用dependsOnMethods。优先级是测试的全局级别(不要与使用@Test注释的测试方法混合)。换句话说:当testng运行test(来自<test>
标签)时,它按优先级对方法进行分组,然后运行它。在您的情况下,testA1和testB1的优先级均为1,因此将在开头执行。
您可以在每个班级的顶部提供@Test(testName="test1") / @Test(testName="test2")
,优先级将按类自动分组。当然,你保留现有的注释。
你应该把B测试的优先级改为这样
@Test( priority = 4 )
public void testB1() {
System.out.println("testB1");
}
@Test( priority = 5 )
public void testB2() {
System.out.println("testB2");
}
@Test( priority = 6 )
public void testB3() {
System.out.println("testB3");
}
并且没有对XML的更改,因为它作为优先级运行
在我的情况下,我已经将类分离到testng.xml文件中的不同测试中,并且优先级像以前的版本一样工作。
<suite name="Suite1" verbose="1">
<test name="TVS_AUTO_TESTS 1">
<classes>
<class name="TVS_auto_tests.CheckLoginTests"/>
</classes>
</test>
<test name="TVS_AUTO_TESTS 2">
<classes>
<class name="TVS_auto_tests.PageNavigationTests"/>
</classes>
</test>