我想在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