我的 生产环境 测试套件运行中遇到了问题 .
testng.xml已设置为使用自定义侦听器在多线程环境中运行测试套件 . 因此,每个测试都有几个驱动程序实例单独并行地运行 . 上一次套件开始失败,我注意到奇怪的行为:
在@Test注释中具有dependsOnMethods的每个测试方法中的每个测试都不会执行 . 驱动程序只是跳过它们,并且不会执行@AfterTest方法 . 或者,我认为它不会跳过它们,它不报告依赖“登录”方法完成的方法,它们可以继续执行 .
但我不知道为什么会这样
像这样的Smth:
@BeforeClass
protected void beforeClassInit(){
setUp(///);
}
@Test
public void login() {
//login activities
}
@Test(dependsOnMethods = "login")
public void createSmth() {
///
}
@Test(dependsOnMethods = "createService")
public void deleteSmth() {
///
}
@AfterClass(alwaysRun = true)
protected void afterClass() {
shutDown();
}
2 回答
请参阅您的代码,
即使依赖方法无法执行,createSmth和deleteSmth也会一直运行 . 类调用之前和之后将在调用当前类中的第一个/最后一个测试方法之前/之后运行 . @BeforeClass,当多个测试需要共享相同的计算昂贵的设置代码 . @BeforeClass只会被执行一次 .
即使你将在parellel中使用testng.xml运行它也能工作
问题出在testng逻辑中 . 通过大量实验确定,TestNG始终在并行运行结束时运行相关方法 . 意思是,你有3个测试类:Test1.java Test2.java Test3.java
并且每种都有一些测试方法 .
TestNG套件包含3个类将从这些类中运行每个非依赖方法,而不是返回并完成剩下的那些依赖方法 .
疯狂的行为,但看起来就是它/