如何为我的重试TestNG方法添加睡眠?

时间:2019-01-23 21:38:50

标签: java selenium exception-handling testng thread-sleep

我当前正在与IAnnotationTransformer结合使用IRetryAnalyzer方法,以在测试失败时执行重试。我想在重试发生时添加Thread.sleep()。这是我目前拥有的:

public boolean retry(ITestResult result){
    if (retryCount < maxRetryCount) {
        retryCount++;
        return true;
    }
    return false;
}

当我添加Thread.sleep()时,它要求我为Retry方法添加一个抛出的异常:

public boolean retry(ITestResult result) throws Exception{
    if (retryCount < maxRetryCount) {
        retryCount++;
        Thread.sleep(5);
        return true;
    }
    return false;
}

但是,“ Exception”给我一个错误:“ Overriden方法不会抛出java.lang.Exception”。尽管我尝试了多少次,但似乎无法将睡眠添加到此重试中。有人知道可以解决吗?

3 个答案:

答案 0 :(得分:1)

捕获并抑制将抛出的InterruptedException

try {
    Thread.sleep(5);
} catch (InterruptedException e) {
    //do nothing
}

这将避免您需要在方法定义中添加throws子句。

答案 1 :(得分:0)

Thread.sleep(long)可能抛出InterrupedException。 您可以将其包含在try catch块中,也可以从方法中删除throws Exception

public boolean retry(ITestResult result){

    if (retryCount < maxRetryCount) {

        retryCount++;

        try{

            Thread.sleep(5);

        }catch(Exception e){}

        return true;

    }

    return false;
}

答案 2 :(得分:0)

“ throws”声明和“ try-catch”块之间有区别。不同之处在于,“ try-catch”吞噬了异常,而“ throws”则将其传播。请参考以下链接:

try/catch versus throws Exception

由于重试是一种覆盖的方法,因此有一些有关使用异常处理覆盖方法的规则。

规则为:

1。如果超类方法未声明异常,则子类重写方法无法声明已检查异常,但可以声明未检查异常。

2。如果超类方法声明了异常,则子类重写方法可以声明相同的子类异常,也可以声明无异常,但不能声明父异常。

因此,请根据上述规则声明异常,或将“ Thread.sleep(5000)”包含在如下所示的try-catch块中。

try {
        Thread.sleep(5000);
    } catch (Exception e) {
        //do nothing
    }

注意:

Thread.sleep()实际上将值视为毫秒,因此使用5000而不是5。