java - 为什么@AfterSuit 在没有alwaysRun=true 的情况下不运行?

标签 java selenium annotations testng

我有以下@AfterSuit方法。如果我删除 alwaysRun=true,TestNG 不会执行它。

@AfterSuite(alwaysRun=true)
public void finishsuit()
{
    System.out.println("completed suit");
}

我检查了alwaysRun的文档,它说:

For after methods (afterSuite, afterClass, ...): If set to true, this configuration method will be run even if one or more methods invoked previously failed or was skipped.

这就是我的理解:如果 @Test 中的任何一个在 <test> 中指定的任何类中定义的方法属于当前诉讼失败,则 @AfterSuit除非我们指定alwaysRun=true,否则不会执行.

但就我而言,@Test 都没有。正在失败。仍然是我的@AfterSuite如果没有 alwaysRun=true 则不会执行

最佳答案

您可能正在组中运行测试方法,而 AfterSuite 不属于任何组,这就是您需要 alwaysRun=true 的原因。

但是因为我发现您对alwaysRun 行为有点困惑,所以我将继续解释...

对于 @BeforeXXXX 方法,如果您想要运行该方法(尽管该方法不属于您正在运行的组),则需要分配alwaysRun。 例如。

public class TestConfig {

    @BeforeSuite
    public void beforeSuite() {
        doSomething();
    }
    
}

public class TestClassA extends TestConfig {

    @Test(groups = { "groupA" })
    public void testA() {
        doTest();
    }

}

在这种情况下,如果我们运行组“groupA”,则 @BeforeSuite 方法不是我们正在执行的组的一部分,除非我们指定alwaysRun = true

这同样适用于 @AfterXXXX 方法,此外,如果您想运行它们,尽管它们的 @Before 对应项已失败或有任何依赖方法,则它们需要 alwaysRun=true。例如:

public class TestClassA {
    
    @BeforeSuite( groups = { "testA" })
    public void beforeSuite() {
        doSomethingBefore();
        throw new RuntimeException();
    }
    
    @Test( groups = { "testA" })
    public void testA() {
        doTest();
    }
    
    @AfterSuite( groups = { "testA" })
    public void afterSuite() {
        doSomethingAfter();
    }
    
}

现在,@AfterSuite 方法将不会运行,因为它的对应 @BeforeSuite 方法已失败。如果 @AfterSuite 位于 @BeforeClass 失败的类上,同样适用。但如果我们添加 alwaysRun=true testng 将忽略之前的任何失败并继续进行。

这些都不适用于@TEST方法。 @BeforeXXXX 和 @AfterXXXX 方法将忽略任何 @Test 结果运行,除非您指定 test dependency .

最后,@Test方法中的alwaysRun的行为方式与ignoreMissingDependency=true类似。例如:

@Test
public void testA() {
    doTestA();
}

@Test(dependsOnMethods = { testA }))
public void testB() {
    doTestB();
}

同样,在这种情况下,testB 将不会运行,因为它依赖于@TestA,除非我们分配alwaysRun=true(或ignoreMissingDependency=true)。

关于java - 为什么@AfterSuit 在没有alwaysRun=true 的情况下不运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59574868/

相关文章:

java - 局部字符串变量未初始化错误

java - Java中的图像和音频特征提取

java - 无法找到动态文本的 Xpath

java - Spring 错误 - java.lang.NoSuchMethodError : > org. springframework.beans.factory.annotation.InjectionMetadata.<init>

java - maven-dependency-plugin 不排除匹配文件

java - 此行错误 :"private String[][] variable=new String[][] {var1,var2,var n}"

selenium - 使用 selenium webdriver 跳过一个 div 后继续计数 DIVS

java - org.openqa.selenium.ElementNotVisibleException : element not interactable while trying to click an element through selenium

java - 自定义注释不验证方法参数

java - 使用 JPA 1.0 注释派生复合键(复合键多对一)