specs2- 对测试失败采取行动
specs2- Take action on test failure
如果我的测试失败,有没有办法采取某种行动?
我有一个使用 selenium/fluentlinium 来填充 texts/click 按钮并断言结果的测试。我希望能够在测试条件失败时采取行动。类似下面的内容
class TestSpecial extends Specification{
"Website should" {
"do the right thing" in new WithBrowser( webDriver = WebDriverFactory( FIREFOX ) ){
browser.$( ".xyz1" ).text( "a" )
browser.$( ".xyz2" ).click()
browser.$( ".xyz3" ).getText must equalTo( "foo" )
browser.$( ".xyz1" ).text( "b" )
browser.$( ".xyz2" ).click()
browser.$( ".xyz3" ).getText must equalTo( "bar" )
}
onFailure
{
//context remains same, so I can use browser
MySnapshotFunction.takeSnapshot( browser )
}
}
}
有没有办法让测试在失败时抛出,以便我可以在 catch 块中拍摄快照?
我认为一种方法是使用中给出的建议:
How to do setup/teardown in specs2 when using "in new WithApplication"
创建我自己的 'WithBrowser' 自定义实现,在开始之前将每个测试标记为失败,并要求该实现的用户在测试块结束时将测试标记为通过。拆解代码中的自定义实现拍摄快照。我已经着眼于使用这种方法,但欢迎对此提出任何 better/simpler 解决方案。
您应该能够使用 Around
特性:
import org.specs2.mutable._
import org.specs2.execute._
trait TakeSnapshot extends org.specs2.mutable.Around {
def browser: Browser
abstract override def around[R : AsResult](r: =>R) = super.around {
val result = AsResult(r)
if (!result.isSuccess) {
takeSnapshot(browser)
}
result
}
def takeSnapshot(browser: Browser) =
println("take snapshot")
}
}
// then
"do the right thing" in
new WithBrowser(webDriver=WebDriverFactory(FIREFOX)) with TakeSnapshot {
browser.$( ".xyz1" ).text( "a" )
browser.$( ".xyz2" ).click()
browser.$( ".xyz3" ).getText must equalTo( "foo" )
browser.$( ".xyz1" ).text( "b" )
browser.$( ".xyz2" ).click()
browser.$( ".xyz3" ).getText must equalTo( "bar" )
}
当我在一个失败的例子上执行它时,我得到了类似
的跟踪
execute t // comes from a println in WithBrowser
take snapshot
quit browser // comes from a println in Browser
如果我的测试失败,有没有办法采取某种行动? 我有一个使用 selenium/fluentlinium 来填充 texts/click 按钮并断言结果的测试。我希望能够在测试条件失败时采取行动。类似下面的内容
class TestSpecial extends Specification{
"Website should" {
"do the right thing" in new WithBrowser( webDriver = WebDriverFactory( FIREFOX ) ){
browser.$( ".xyz1" ).text( "a" )
browser.$( ".xyz2" ).click()
browser.$( ".xyz3" ).getText must equalTo( "foo" )
browser.$( ".xyz1" ).text( "b" )
browser.$( ".xyz2" ).click()
browser.$( ".xyz3" ).getText must equalTo( "bar" )
}
onFailure
{
//context remains same, so I can use browser
MySnapshotFunction.takeSnapshot( browser )
}
}
}
有没有办法让测试在失败时抛出,以便我可以在 catch 块中拍摄快照?
我认为一种方法是使用中给出的建议:
How to do setup/teardown in specs2 when using "in new WithApplication"
创建我自己的 'WithBrowser' 自定义实现,在开始之前将每个测试标记为失败,并要求该实现的用户在测试块结束时将测试标记为通过。拆解代码中的自定义实现拍摄快照。我已经着眼于使用这种方法,但欢迎对此提出任何 better/simpler 解决方案。
您应该能够使用 Around
特性:
import org.specs2.mutable._
import org.specs2.execute._
trait TakeSnapshot extends org.specs2.mutable.Around {
def browser: Browser
abstract override def around[R : AsResult](r: =>R) = super.around {
val result = AsResult(r)
if (!result.isSuccess) {
takeSnapshot(browser)
}
result
}
def takeSnapshot(browser: Browser) =
println("take snapshot")
}
}
// then
"do the right thing" in
new WithBrowser(webDriver=WebDriverFactory(FIREFOX)) with TakeSnapshot {
browser.$( ".xyz1" ).text( "a" )
browser.$( ".xyz2" ).click()
browser.$( ".xyz3" ).getText must equalTo( "foo" )
browser.$( ".xyz1" ).text( "b" )
browser.$( ".xyz2" ).click()
browser.$( ".xyz3" ).getText must equalTo( "bar" )
}
当我在一个失败的例子上执行它时,我得到了类似
的跟踪execute t // comes from a println in WithBrowser
take snapshot
quit browser // comes from a println in Browser