首页 文章

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

提问于
浏览
0

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

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

    请参阅您的代码,

    @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

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

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

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

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

相关问题