我对使用Geb和Spock的Grails应用程序进行了功能测试。偶尔,功能测试将因超时或其他偶发行为而失败。在以前使用TestNG的项目中,我有一个retryAnalyzer只是在测试执行期间触发重试,以查看它是否两次都失败(然后真实失败)。
如何让Spock重试失败的测试?
答案 0 :(得分:8)
我知道这个问题已经有一年了,但我们遇到了同样的问题。按照彼得的建议,我创建了一个Spock扩展(https://github.com/anotherchrisberry/spock-retry)。
如果您有基本规范(我们的情况),您只需添加@RetryOnFailure
注释即可:
@RetryOnFailure
class BaseFunctionalSpec extends Specification {
// all tests will execute up to two times before failing
}
或者,您可以将其添加到特定功能:
class SomeSpec extends Specification {
@RetryOnFailure(times=3)
void 'test something that fails sporadically'() {
// will execute test up to three times before failing
}
}
答案 1 :(得分:2)
您必须编写一些JUnit规则(例如https://gist.github.com/897229)或Spock扩展名。你可能不得不忍受一些限制,比如同一个规范实例被重用,而JUnit只报告一个单一的测试,但希望没有什么可以完全排除这种方法。 (我想到的一件事是模拟可能不起作用。)在Spock的未来版本中,重复测试(或其构建块)可能会成为一流的概念,从而消除这些限制。