如何为我的 Retry TestNG 方法添加休眠?
How do I add a sleep to my Retry TestNG method?
我目前正在结合 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 method does not throw java.lang.Exception"。尽管我已经尝试了很多,但似乎我实际上无法为这次重试添加睡眠。有人知道解决方法吗?
抓住并抑制将被抛出的 InterruptedException
。
try {
Thread.sleep(5);
} catch (InterruptedException e) {
//do nothing
}
这将使您无需将 throws
子句添加到方法定义中。
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;
}
'throws' 声明和 'try-catch' 块之间存在差异。不同之处在于,'try-catch' 吞下了异常,而 'throws' 将让它传播。参考下面link:
try/catch versus throws Exception
由于重试是一种重写方法,所以有一些关于方法重写和异常处理的规则。
规则是:
1。如果超类方法不声明异常,子类覆盖方法不能声明检查异常但可以声明未检查异常。
2。如果超类方法声明异常,子类覆盖方法可以声明相同、子类异常或无异常但不能声明父类异常。
所以,按照上面的规则声明一个异常或者像下面这样用try-catch块包围'Thread.sleep(5000)'。
try {
Thread.sleep(5000);
} catch (Exception e) {
//do nothing
}
注:
Thread.sleep() 实际上会将值视为毫秒,因此使用 5000 而不是 5。
我目前正在结合 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 method does not throw java.lang.Exception"。尽管我已经尝试了很多,但似乎我实际上无法为这次重试添加睡眠。有人知道解决方法吗?
抓住并抑制将被抛出的 InterruptedException
。
try {
Thread.sleep(5);
} catch (InterruptedException e) {
//do nothing
}
这将使您无需将 throws
子句添加到方法定义中。
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;
}
'throws' 声明和 'try-catch' 块之间存在差异。不同之处在于,'try-catch' 吞下了异常,而 'throws' 将让它传播。参考下面link:
try/catch versus throws Exception
由于重试是一种重写方法,所以有一些关于方法重写和异常处理的规则。
规则是:
1。如果超类方法不声明异常,子类覆盖方法不能声明检查异常但可以声明未检查异常。
2。如果超类方法声明异常,子类覆盖方法可以声明相同、子类异常或无异常但不能声明父类异常。
所以,按照上面的规则声明一个异常或者像下面这样用try-catch块包围'Thread.sleep(5000)'。
try {
Thread.sleep(5000);
} catch (Exception e) {
//do nothing
}
注:
Thread.sleep() 实际上会将值视为毫秒,因此使用 5000 而不是 5。