使用@Test(dependsOnMethods = ..)testNG注释标记测试方法使它们不能执行

时间:2015-01-30 14:24:00

标签: java selenium annotations dependencies testng

我的生产测试套件运行中遇到了问题。

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 个答案:

答案 0 :(得分:1)

请参阅您的代码,

 @BeforeClass
protected void beforeClassInit(){
     setUp(///);
}

@Test
public void login()  {
    //login activities
}

@Test(dependsOnMethods = "login", alwaysRun=true)
public void createSmth() {
    ///
}

@Test(dependsOnMethods = "createSmth", alwaysRun=true)
public void deleteSmth()  {
    ///
}

@AfterClass(alwaysRun = true)
protected void afterClass()  {
    shutDown();
}
即使依赖方法无法执行,

createSmth和deleteSmth也会一直运行。类调用之前和之后将在调用当前类中的第一个/最后一个测试方法之前/之后运行。 @BeforeClass,当多个测试需要共享相同的计算昂贵的设置代码。 @BeforeClass只会被执行一次。

即使您将在parellel

中使用testng.xml运行,它仍然有效

答案 1 :(得分:0)

问题在于testng逻辑。 通过大量实验确定,TestNG始终在并行运行结束时运行相关方法。 意思是,你有3个测试类: Test1.java Test2.java Test3.java

并且每种都有一些测试方法。

TestNG套件包含3个类将从这些类中运行每个非依赖方法,而不是返回并完成剩下的那些依赖方法。

疯狂的行为,但看起来像是/