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 中,您可以传递尝试重试的次数。
我希望有人可以提出更好的解决方案!