是否可以在每次PHPUnit测试失败后运行一个函数?

时间:2013-10-03 11:55:38

标签: php phpunit selenium-webdriver

我正在使用PHPUnit和Selenium 2在我的网络应用上进行一些集成测试。我希望每次测试失败时都会保存截图。以下是我到目前为止的情况:

<?php
include 'c:/wamp/www/testarea/selenium/phpunit-selenium/vendor/autoload.php';

class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{       
    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://www.google.com/');
    }

    public function testTitle()
    {
        $this->url('http://www.google.com/');
        file_put_contents("c:/wamp/www/testarea/selenium/phpunit-selenium/screenshots/screenshot1.png",$this->currentScreenshot());
        $this->assertEquals('NOT GOOGLE', $this->title());
    }

}

这样可以正常工作,并在运行测试时保存屏幕截图 - 但是,我希望能够在测试失败后才能保存屏幕截图,这应该在每次测试时都会发生。有没有办法告诉PHPUnit在每次测试失败后自动运行一个函数?

由于

3 个答案:

答案 0 :(得分:8)

尝试使用方法tearDown()onNotSuccessfulTest()

http://phpunit.de/manual/current/en/fixtures.html

答案 1 :(得分:4)

添加到Ricardo Simas的答案,如果你实现了onNotSuccessfulTest方法,请确保调用parent,否则默认的错误处理行为将停止发生。

我想知道为什么我的测试在明显出现错误情况(未找到元素)时正在通过。

e.g。对于我的所有测试用例,我都把它放在一个祖先类中:

public function onNotSuccessfulTest($e){
    file_put_contents(__DIR__.'/../../out/screenshots/screenshot1.png', $this->currentScreenshot());

    parent::onNotSuccessfulTest($e);
}

答案 2 :(得分:0)

要在每次不成功测试之后运行功能,可以使用:

onNotSuccessfulTest()    <- Runs after each failed test.
tearDown()               <- Runs after each test.

要在每次成功测试之后运行功能,可以使用:

public function tearDown()
{
    if ($this->getStatus() == 0) {
        // stuff to do on sucsess
    } 
}