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

Marking test methods with @Test(dependsOnMethods=..) testNG annotation make them not to execute

我的生产测试套件出现问题 运行s。

testng.xml 已使用自定义侦听器在多线程环境中设置 运行 测试套件。因此,每个测试都有多个驱动程序实例 运行 单独并行运行。 上次套件开始失败,我注意到奇怪的行为:

在其@Test 注释中具有dependsOnMethods 的每个测试方法中的每个测试都不会执行。驱动程序只是跳过它们,并且不会执行 @AfterTest 方法作为结果。 或者,我想它不会跳过它们,它不会向依赖方法报告 "login" 方法已完成并且它们可以继续执行。

但我不知道为什么会这样

像这样:

@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();
}

问题出在测试逻辑上。 通过大量的实验,它被定义为,TestNG 总是 运行s 依赖方法在并行结束时 运行。 意思是,你有 3 个测试 类: Test1.java Test2.java Test3.java

而且各自都有一些测试方法。

TestNG 套件包含 3 类 将 运行 来自那些 类 的每个非依赖方法,然后返回并完成 运行 那些离开的依赖方法.

疯狂的行为,但看起来就是这样/

查看你的代码,

 @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 始终 运行 即使依赖方法将无法执行。 class注解前后会在运行before/after当前class中的first/last测试方法被调用。 @BeforeClass 当多个测试需要共享相同的计算昂贵的设置代码时。 @BeforeClass 只会执行一次

即使您 运行 在 parellel

中使用 testng.xml 也能正常工作