我想在Spock測試失敗時執行一些操作。具體來說,截圖。可能嗎?怎麼做?當Spock測試失敗時執行一些操作
回答
創建一個監聽器類
class ExampleListener extends AbstractRunListener {
def void error(ErrorInfo error) {
println "Actual on error logic"
}
}
然後將其添加到使用的IGlobalExtension
實現,爲每個規格
class GlobalSpecExtension implements IGlobalExtension {
@Override
void visitSpec(SpecInfo specInfo) {
specInfo.addListener(new ExampleListener())
}
}
執行每個規格
並最終在您的META-INF/services directory
中創建一個名爲org.spockframework.runtime.extension.IGlobalExtension
的文件(如果您使用的是Maven,通常它將在src/test/resources
之下),其全名爲IGlobalExtension
。
com.example.tests.GlobalSpecExtension
實現此目的的最佳方法是編寫一個(全局或註釋驅動的)Spock擴展,該擴展實現並註冊一個AbstractRunListener
。有關示例,請參見OptimizeRunOrderExtension。有關如何註冊全局擴展的信息,請參閱IGlobalExtension描述符。
擴展的文檔並不多,因爲這些API仍然可能會發生變化。如果你想安全地玩(並且可以忍受一些限制),你可以改爲實現JUnit Rule。
這兩種情況都可能遇到的一個問題是,它們不提供對當前規範實例的訪問權限。如果您需要此功能,則可能必須同時使用AbstractRunListener
(通知失敗)和IMethodInterceptor
(獲取規範實例),這兩者都由相同的分機註冊。 (應該不是這個很難,但是這什麼目前還。)
嗨,彼得!我將如何結合這兩個爲了無效,也許重新創建一個破損的驅動程序實例?在雲測試中,如果我收到類似'WebDriverException:Session [TIMEOUT]'的終止會話,我可以攔截並記錄偵聽器中的錯誤,但無法訪問'driver'或驅動程序工廠緩存我可以使其無效。有任何想法嗎? – kriegaex 2016-06-03 11:42:15
我已經成功地做到這一點是這樣的:
class ExampleTest extends GebSpec{
static boolean success = false
def setup(){
success = false
}
def cleanup(){
assert success == true, someAction()
}
def someAction(){
}
def "TestCase"(){
expect:
/*What you expect here*/
(success = true) != null
}
}
之前每個測試用例的「成功」是由設置()方法設置爲false。 在每個測試用例的末尾添加「(success = true)!= null」語句。因此,如果測試用例已經通過,「成功」纔會成立。 在每個測試用例之後,cleanup()方法將驗證「成功」是否爲真。如果不是方法someAction()將被調用。
我無法對user3074543的答案進行upvote或評論,但它比創建擴展更簡單。我想要簡單。所以我縮短了用戶*的一些(我不是指1行方法)。您可以通過記錄失敗而不是成功來簡化邏輯,並減少使用done()助手的鍵入。
class Test extends spock.lang.Specification {
def fail
def setup(){ fail = true }
def done(){ !(fail = false) }
def cleanup(){ fail && doStuffWhenFail() }
def 'test things'(){
expect:
stuff
done()
}
}
- 1. Spock + Gradle。並行測試執行
- 2. Fitnesse在Cruisecontrol.net執行:測試失敗時不會失敗構建
- 3. 執行工作時集成測試失敗
- 4. 當某個時間到來時執行一些操作
- 5. Spock Stepwise - 在單次失敗後繼續運行測試套件
- 6. 如何在第一步失敗時繼續執行測試?
- 7. Evosuite:執行測試用例失敗
- 8. 嘗試生成測試執行報告時specflow失敗
- 9. Spock如何才能重試失敗的Geb測試?
- 10. 測試執行失敗,因爲失敗配置負載
- 11. Azure Worker執行長時間運行操作失敗
- 12. 一些登錄失敗嘗試的操作 - 驗證碼
- 13. 如何在* n *失敗測試後停止MsTest測試執行
- 14. php操作失敗後成功執行jquery操作
- 15. py.test:在測試後執行某些操作
- 16. 從maven執行測試失敗,但不是從Intellij執行
- 17. 測試運行失敗:由於'進程崩潰'導致測試運行失敗。當測試多個Android活動
- 18. 當Browsesttack中的Nightwatch測試斷言失敗時,失敗了Jenkins作業
- 19. 爲什麼測試失敗時這個Ruby代碼會執行?
- 20. 如何停止MsTest在首次失敗時測試執行?
- 21. 當使用setInterval測試功能時,Mocha和Chai測試失敗
- 22. 當測試人員測試失敗時調用拆解
- 23. ElasticSearch運行測試時隨機失敗
- 24. 運行所有的單元測試,即使一些失敗!
- 25. 當我嘗試構建我的項目時,執行失敗
- 26. 測試時測試失敗Openmdao
- 27. 執行整個測試套件時,單元測試用例失敗
- 28. 使用Spock測試集創建一個Groovy可執行jar以執行
- 29. 當通知欄被選中時執行某些操作
- 30. OOZIE:PIG作業執行失敗
使用services目錄中的軟件包名稱創建文件的理由是什麼? – eddyrokr 2017-02-24 08:55:34