我對使用Geb和Spock的Grails應用程序進行了功能測試。偶爾,功能測試會因超時或其他零星行爲而失敗。在之前使用TestNG的項目中,我會讓retryAnalyzer在測試執行過程中觸發一次重試,以查看它是否兩次都失敗(然後失敗)。Spock如何才能重試失敗的Geb測試?
如何讓Spock重試失敗的測試?
我對使用Geb和Spock的Grails應用程序進行了功能測試。偶爾,功能測試會因超時或其他零星行爲而失敗。在之前使用TestNG的項目中,我會讓retryAnalyzer在測試執行過程中觸發一次重試,以查看它是否兩次都失敗(然後失敗)。Spock如何才能重試失敗的Geb測試?
如何讓Spock重試失敗的測試?
你必須寫一個小的JUnit規則(例如像https://gist.github.com/897229)或斯波克擴展。你可能不得不忍受一些限制,比如同一個spec實例被重用,JUnit只報告一個單獨的測試,但希望沒有任何東西完全排除這個方法。 (想到的一件事是,嘲諷可能無法正常工作。)在斯波克的未來版本中,重複測試(或它的積木)將有可能成爲一個一流的理念,廢除這些限制。
我知道這個問題已經有一年了,但我們一直有同樣的問題。遵循彼得的建議,我創建了一個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
}
}
我期待着嘗試一下。 – 2013-10-29 21:42:31
這是最好的擴展 – 2015-06-25 18:14:13
我終於走了下來JUnit的路由規則,並添加一個類似於此的一類:http://stackoverflow.com/questions/8295100/how-to-re-run-failed-junit-tests-immediately。我把println語句圍繞base.evaluate()調用,我可以告訴我的規則運行的,但是我發現它總是* *回報,我從來沒有看到一個Throwable的拋出,甚至失敗。還有另一種方法可以告訴測試失敗嗎? – 2012-10-19 17:31:19