JanakiL, 这是一个非常好的问题。我试图找到一些解决办法,但我没找到这个任务的清洁解决方案。 我只能建议做一些变通方法,最终会奏效。 所以,为了重新运行套件,您需要执行以下步骤:
您需要创建@ClassRule以执行整个套件。 所有套件,您可以重新尝试使用下面的代码:
公共类Retrier实现TestRule {
private int retryCount;
private int failedAttempt = 0;
@Override
public Statement apply(final Statement base,
final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
base.evaluate();
while (retryNeeded()){
log.error(description.getDisplayName() + " failed");
failedAttempt++;
}
}
}
retryNeeded() - 决定你是否需要做重试或没有方法
这将重试套件中的所有测试。非常重要的是,重试会在@AfterClass方法之后执行。
如果您需要在成功重试后进行“绿色构建”,您需要编写一堆另一个令人沮丧的代码。
- 您需要创建@rule,不会允许“发布”失败的结果。作为例子:
public class FailedRule extends TestWatcher {
@Override
public Statement apply(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
List<Throwable> errors = new ArrayList<Throwable>();
try {
base.evaluate();
} catch (AssumptionViolatedException e) {
log.error("", e.getMessage());
if (isLastRun()) {
throw e;
}
} catch (Throwable t) {
log.error("", t.getMessage());
if (isLastRun()) {
throw t;
}
}
};
};
}
}
isLastRun() - 方法,以验证它是否是最后的运行和故障测试只有在情况下,IR是最后一次运行。
只有最后一次重试需要发布才能标记测试失败并生成“红色”。 3.最后,在您的测试类,你需要做的注册两个规则:
@Rule
public FailedRule ruleExample = new FailedRule();
@ClassRule
public static Retrier retrier = new Retrier (3);
在Retrier你可以通过尝试重试的次数。
我希望有人能提出更好的解决方案!
感谢您的解决方案user1459144。 – JanakiL 2014-11-26 05:46:07