我有大约 150 个测试。当我全部运行它们时,我总是有大约 2-5% 的测试失败,并且总是有不同的测试......
我想要什么:运行一次测试,如果有损坏的测试,maven 会重新运行它们,然后我可以重新生成带有更改的报告:它只会是通过和失败的测试
可能吗?我应该从什么开始?
我使用 Java+Maven+JUnit)
Allure 不会运行你的测试,它只是显示测试结果。因此,您几乎没有选择重新运行失败的测试:
使用rerunFailingTestsCount
来自 的选项maven surefire plugin
。如果设置此选项,surefire 将在失败后立即重新运行失败的测试。有关更多详细信息,请参阅文档。
在您的易碎测试中使用自定义 jUnit 重试规则:
public class RetryRule implements TestRule {
private int attempts;
private int delay;
private TimeUnit timeUnit;
public RetryRule(int attempts, int delay, TimeUnit timeUnit) {
this.attempts = attempts;
this.delay = delay;
this.timeUnit = timeUnit;
}
@Override
public Statement apply(final Statement base, final Description description) {
return new Statement() {
@Override
public void evaluate() throws Throwable {
Throwable e = null;
for (int i = 0; i <= attempts; i++) {
try {
base.evaluate();
return;
} catch (Throwable t) {
Thread.sleep(timeUnit.toMillis(delay));
}
}
throw e;
}
};
}
}
并将其添加到每个片状测试中:
@Rule
public RetryRule retryRule = new RetryRule(2, 1, TimeUnit.SECONDS);
您可以在此处找到有关 jUnit 规则的更多信息。
如果您想在从 Allure 报告重新运行后清理重复的测试,那么您可以参考这个 repo - 仍在进行中,但基本功能工作正常。现在它清除了由 TesnNG + Allure 生成的重复测试!