倾城:如何重新运行所有损坏的测试然后生成报告
Allure: How to rerun all Broken Tests and then generate report
我有大约 150 个测试。当我 运行 他们全部时,我总是有大约 2-5% 的失败测试,并且总是有不同的测试...
我想要的:运行 测试一次,如果有损坏的测试 Maven 重新 运行s 它们然后我可以重新生成报告 changes:it 将只通过和失败的测试
可能吗?
我应该从什么开始?
我用Java+Maven+JUnit)
Allure 不会 运行 您的测试,它只显示测试结果。所以你几乎没有选择来重新运行你失败的测试:
使用 maven surefire plugin
中的 rerunFailingTestsCount
选项。如果设置此选项,surefire 将在测试失败后立即重新运行 失败测试。有关详细信息,请参阅 docs。
在易碎测试中使用自定义 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 规则的更多信息 here。
如果你想在重新运行 之后从 Allure 报告中清除重复测试,那么你可以参考这个 repo - 仍在进行中,但基本功能运行良好。目前它会清除由 TesnNG + Allure 生成的重复测试!!
我有大约 150 个测试。当我 运行 他们全部时,我总是有大约 2-5% 的失败测试,并且总是有不同的测试...
我想要的:运行 测试一次,如果有损坏的测试 Maven 重新 运行s 它们然后我可以重新生成报告 changes:it 将只通过和失败的测试
可能吗? 我应该从什么开始?
我用Java+Maven+JUnit)
Allure 不会 运行 您的测试,它只显示测试结果。所以你几乎没有选择来重新运行你失败的测试:
使用
maven surefire plugin
中的rerunFailingTestsCount
选项。如果设置此选项,surefire 将在测试失败后立即重新运行 失败测试。有关详细信息,请参阅 docs。在易碎测试中使用自定义 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 规则的更多信息 here。
如果你想在重新运行 之后从 Allure 报告中清除重复测试,那么你可以参考这个 repo - 仍在进行中,但基本功能运行良好。目前它会清除由 TesnNG + Allure 生成的重复测试!!