Grails 如何使Spock重试失败的Geb测试?

Grails 如何使Spock重试失败的Geb测试?,grails,groovy,spock,geb,Grails,Groovy,Spock,Geb,我对使用Geb和Spock的Grails应用程序进行了功能测试。有时,功能测试会因超时或其他零星行为而失败。在以前使用TestNG的项目中,我会让retryAnalyzer在测试执行期间触发重试,以查看它是否两次都失败(然后真正失败) 如何让Spock重试失败的测试?您必须编写一个小JUnit规则(例如类似的规则)或Spock扩展。您可能不得不忍受一些限制,比如重复使用同一个spec实例,JUnit只报告一个测试,但希望没有什么能完全排除这种方法。(我想到的一件事是,模仿可能不起作用。)在Spo

我对使用Geb和Spock的Grails应用程序进行了功能测试。有时,功能测试会因超时或其他零星行为而失败。在以前使用TestNG的项目中,我会让retryAnalyzer在测试执行期间触发重试,以查看它是否两次都失败(然后真正失败)


如何让Spock重试失败的测试?

您必须编写一个小JUnit规则(例如类似的规则)或Spock扩展。您可能不得不忍受一些限制,比如重复使用同一个spec实例,JUnit只报告一个测试,但希望没有什么能完全排除这种方法。(我想到的一件事是,模仿可能不起作用。)在Spock的未来版本中,重复测试(或其构建块)很可能会成为一个一流的概念,从而消除这些限制。

我知道这个问题已经提出一年了,但我们也遇到了同样的问题。根据Peter的建议,我创建了一个Spock扩展()

如果您有一个基本规范(这是我们的情况),您只需添加一个
@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
    }
}

我最终选择了junit规则路线,并添加了一个类似于此处的类:。我将println语句放在base.evaluate()调用的周围,我可以告诉您我的规则正在运行,但我发现它总是返回,而且我从未看到抛出的可丢弃项,即使失败也是如此。有没有别的办法告诉你考试失败了?我期待着尝试一下。这是最好的扩展