【问题标题】:TestNG Re run test on failure, not running BeforeClass AfterClass methodsTestNG 在失败时重新运行测试,而不是运行 BeforeClass AfterClass 方法
【发布时间】:2015-06-27 21:48:44
【问题描述】:

我实现了从以下链接重新运行失败的 TestNG 测试类的逻辑:

https://martinholladay.wordpress.com/2013/11/17/webdriver-2-0-automatically-retry-failed-tests/

不幸的是,它运行带有“Test”注释的方法,而不运行 BeforeClass (@BeforeClass) 和 AfterClass (@AfterClass) 方法。我尝试查看 ITestAnnotations 的 setDependsOnMethods 和 getDependsOnMethods 方法无济于事。

有人知道如何让监听器类也运行 BeforeClass 和 AfterClass 方法吗?

public class RetryListener implements IAnnotationTransformer {
    public void transform(ITestAnnotation annotation, Class testClass,
            Constructor testConstructor, Method testMethod) {
        IRetryAnalyzer retry = annotation.getRetryAnalyzer();
        if (retry == null) {
            annotation.setRetryAnalyzer(Retry.class);
        }
    }
}

//The test begins here....

@BeforeClass(alwaysRun = true)
@Parameters("Environment")
public void BeforeClass(String sEnv) throws Exception {
    WebDriver driver = new FirefoxDriver();
    driver.get("www.google.com");

}

@Test
public void TestMethod() {
    //Some test...
}

@AfterClass(alwaysRun = true)
public void AfterClass() {
    driver.quit();
}

【问题讨论】:

  • 能否将相关代码复制到您的问题中?
  • 完成..有帮助吗?
  • @jsmith 是的,我也遇到过类似的问题,RetryListener 没有运行整个测试类,它只是运行失败的测试。所以它不会执行任何东西,除了@Test。要再次运行整个测试类,您必须使用其他东西,例如你可以 testng-failed.xml 从 testng-report 目录。编写一些代码以在遇到任何故障时运行 testng-failed.xml。但它总是在执行结束时运行。

标签: java selenium-webdriver annotations testng


【解决方案1】:

TestNG 只调用失败的@Test 方法。你可以在这里看到实现https://github.com/cbeust/testng/blob/master/src/main/java/org/testng/internal/Invoker.java#L1408

所以不,您不能再次在 RetryListener 中调用 @BeforeClass@AfterClass

【讨论】:

    猜你喜欢
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 2022-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多