我试图按照确定的顺序运行测试用例,但没有运气。正如我所看到的,用@AfterClass
注释的方法在另一个测试的方法之后运行:
Configuring TestNG with: org.apache.maven.surefire.testng.conf.TestNGMapConfigurator@558ee9d6
RUN class com.example.testng.ITCaseOne.beforeClass()
RUN class com.example.testng.ITCaseOne.someCase()
RUN class com.example.testng.ITCaseTwo.beforeClass()
RUN class com.example.testng.ITCaseTwo.someCase()
RUN class com.example.testng.ITCaseOne.anotherCase()
RUN class com.example.testng.ITCaseOne.afterClass()
RUN class com.example.testng.ITCaseTwo.anotherCase()
RUN class com.example.testng.ITCaseTwo.afterClass()
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.25 sec
并且失败是因为@Test
中的所有ITCaseTwo
必须仅在ITCaseOne.afterClass()
之后调用(因为我使用Selenium并且来自一个案例的测试应检查适当的页面)。
我的简单课程:
public class ITCaseOne {
@BeforeClass
public void beforeClass() {
System.out.printf("RUN %s.beforeClass()\n", getClass());
}
@AfterClass(alwaysRun = true)
public void afterClass() {
System.out.printf("RUN %s.afterClass()\n", getClass());
}
@Test(groups = "std-one")
public void someCase() {
System.out.printf("RUN %s.someCase()\n", getClass());
}
@Test(groups = "logic-one", dependsOnGroups = "std-one")
public void anotherCase() {
System.out.printf("RUN %s.anotherCase()\n", getClass());
}
}
和
public class ITCaseTwo {
@BeforeClass
public void beforeClass() {
System.out.printf("RUN %s.beforeClass()\n", getClass());
}
@AfterClass(alwaysRun = true)
public void afterClass() {
System.out.printf("RUN %s.afterClass()\n", getClass());
}
@Test(groups = "std-two")
public void someCase() {
System.out.printf("RUN %s.someCase()\n", getClass());
}
@Test(groups = "logic-two", dependsOnGroups = "std-two")
public void anotherCase() {
System.out.printf("RUN %s.anotherCase()\n", getClass());
}
}
如果重要,我使用maven-failsafe-plugin
2.12和testng
6.4
(顺便说一下,我也尝试将套件文件与preserve-order="true"
一起使用,但它对我不起作用。)
提前致谢!
答案 0 :(得分:2)
我能够重现这种行为,这是一个错误。我会调查一下。在此期间,注释掉两个dependsOnGroups中的一个应该修复不正确的行为。
答案 1 :(得分:1)
基本上你有依赖的方法要求。如果你将它们保存在不同的类中,那么你可以使第二个类的@Test(你想要执行第二个类)依赖于第一个类中的一个组。 所以,如果你保持 @Test(groups =“std-two”,dependsOnGroups =“logic-one”),事情应该有效,你想要的方式......
答案 2 :(得分:1)
我找到了另一种方法,如何使用测试套件和preserve-order="true"
(受When needing to run tests from 2 classes from testng.xml, why does TestNG pick mehods randomly from classes?启发)修复它。
使用以下内容创建src/test/config/testng.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Selenium tests" preserve-order="true">
<test name="Test #1">
<classes>
<class name="com.example.testng.ITCaseOne" />
</classes>
</test>
<test name="Test #2">
<classes>
<class name="com.example.testng.ITCaseTwo" />
</classes>
</test>
</suite>
按maven-failsafe-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.12</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>${basedir}/src/test/config/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
现在它按预期工作:
RUN class com.example.testng.ITCaseOne.beforeClass()
RUN class com.example.testng.ITCaseOne.someCase()
RUN class com.example.testng.ITCaseOne.anotherCase()
RUN class com.example.testng.ITCaseOne.afterClass()
RUN class com.example.testng.ITCaseTwo.beforeClass()
RUN class com.example.testng.ITCaseTwo.someCase()
RUN class com.example.testng.ITCaseTwo.anotherCase()
RUN class com.example.testng.ITCaseTwo.afterClass()