Java 如何将睡眠添加到重试TestNG方法中?
我目前正在实现一种IRetryAnalyzer与IAnnotationTransformer相结合的方法,以便在测试失败时执行重试。我想在重试时添加Thread.sleep()。以下是我目前拥有的:Java 如何将睡眠添加到重试TestNG方法中?,java,selenium,exception-handling,testng,thread-sleep,Java,Selenium,Exception Handling,Testng,Thread Sleep,我目前正在实现一种IRetryAnalyzer与IAnnotationTransformer相结合的方法,以便在测试失败时执行重试。我想在重试时添加Thread.sleep()。以下是我目前拥有的: public boolean retry(ITestResult result){ if (retryCount < maxRetryCount) { retryCount++; return true; } return false;
public boolean retry(ITestResult result){
if (retryCount < maxRetryCount) {
retryCount++;
return true;
}
return false;
}
公共布尔重试(ITestResult结果){
if(retryCount
添加Thread.sleep()时,需要为重试方法添加引发的异常:
public boolean retry(ITestResult result) throws Exception{
if (retryCount < maxRetryCount) {
retryCount++;
Thread.sleep(5);
return true;
}
return false;
}
public boolean重试(ITestResult结果)引发异常{
if(retryCount
然而,“Exception”给了我一个错误:“重写的方法不会抛出java.lang.Exception”。不管我做了多少尝试,我似乎都不能在这个重试中添加睡眠。有人知道解决方法吗?捕获并抑制将抛出的
中断异常
try {
Thread.sleep(5);
} catch (InterruptedException e) {
//do nothing
}
这将防止您需要将throws
子句添加到方法定义中。线程。sleep(long)
可能引发InterrupedException
。
您可以将它包含到try-catch
块中,还可以从方法中删除抛出异常
public boolean retry(ITestResult result){
if (retryCount < maxRetryCount) {
retryCount++;
try{
Thread.sleep(5);
}catch(Exception e){}
return true;
}
return false;
}
公共布尔重试(ITestResult结果){
if(retryCount
在“throws”声明和“try catch”块之间存在差异。区别在于,“try-catch”会吞下异常,“throws”会让它传播。请参阅以下链接:
由于retry是一个被重写的方法,所以有一些关于使用异常处理重写方法的规则
规则是:
一,。如果超类方法未声明异常,则子类重写方法无法声明选中的异常,但可以声明未选中的异常
二,。如果超类方法声明异常,子类重写方法可以声明相同的异常、子类异常或无异常,但不能声明父类异常
因此,根据上述规则声明一个异常,或者用try-catch块包围“Thread.sleep(5000)”,如下所示
try {
Thread.sleep(5000);
} catch (Exception e) {
//do nothing
}
注意:
<线程>睡眠()实际上将数值视为毫秒,所以使用5000而不是5。为什么你要在那里睡觉?为什么你想在重播时在任何地方睡5秒?如果你真的需要,你可以把它放在其他地方。@JeffC我正试图解决我的测试套件中关于api和页面加载时间不一致的问题。我知道我可以创建一个等待元素出现然后继续的方法,但我要进入的套件太大了,在我所有1000多个测试中实现这样的方法需要一段时间。测试失败时添加5s睡眠不是解决页面加载时间的方法,等等。我甚至不知道这会有什么帮助。@JeffC如果你有其他方法来提高测试套件的稳定性,我很乐意听到。你解决了实际问题。如果页面加载时间不一致,则直接处理。您添加了允许页面加载时间的等待,等等。谢谢!这很有效。我选择了另一个答案作为被接受的答案,因为它提供了更多的链接,但这是相同的解决方案。谢谢!这很有效。我选择了另一个答案作为被接受的答案,因为它提供了更多的链接,但这是相同的解决方案。正如@J.Jeffreys提到的…这是相同的解决方案。。。我喜欢InterruptedException的精确度。我将避免捕获基本异常。