8

我在 Java 中使用 Selenium webdriver 和 TestNG 来运行 X 数量的测试用例。

我想要的是,任何测试用例一旦失败就自动重新启动(从开始或从故障点开始)。

我知道TestNG框架有以下方法

@Override
  public void onTestFailure(ITestResult tr) {
    log("F");
  }

但我不知道如何找出它是哪个测试用例,然后我将如何重新启动它。

4

2 回答 2

12

我想看一个包含实际代码的示例,并在这里找到它: Restarting Test immediate with TestNg

观察一旦发生故障,以下测试将如何重新运行一次。

import org.testng.Assert;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.annotations.Test;

public class Retry implements IRetryAnalyzer {
    private int retryCount = 0;
    private int maxRetryCount = 1;

    public boolean retry(ITestResult result) {

        if (retryCount < maxRetryCount) {
            retryCount++;
            return true;
        }
        return false;
    }

    @Test(retryAnalyzer = Retry.class)
    public void testGenX() {
        Assert.assertEquals("james", "JamesFail"); // ListenerTest fails
    }

    @Test(retryAnalyzer = Retry.class)
    public void testGenY() {
        Assert.assertEquals("hello", "World"); // ListenerTest fails

    }
}
于 2013-12-17T04:53:24.707 回答
5

来自 testng.org

每次套件中的测试失败时,TestNG 都会在输出目录中创建一个名为 testng-failed.xml 的文件。此 XML 文件包含仅重新运行这些失败的方法所需的信息,使您能够快速重现失败而无需运行整个测试。

如果您想在失败后准确地重新运行测试,您需要调用失败的方法。您可以从 ITestResult 对象中获取该方法名称。

如果要一起重新运行所有失败的测试用例,则可以在第一次执行后将 testng-failed.xml 作为输入 xml。

于 2012-01-04T04:55:38.060 回答