如果Selenium服务器没有运行,如何在PHPUnit中跳过测试?

时间:2009-09-13 17:56:16

标签: selenium phpunit

我想添加一套Selenium测试作为应用程序的全局PHPUnit测试套件的一部分。我已经将Selenium测试套件连接到全局AllTests.php文件中,一切运行正常,而Selenium服务器正在运行。

但是,如果Selenium服务器没有运行,我希望脚本跳过Selnium测试,这样其他开发人员就不会被迫安装Selenium服务器以便运行测试。我通常会尝试在每个测试用例的setUp方法中进行连接,如果失败则将测试标记为跳过,但这似乎会抛出一个带有消息的RuntimeException:

  

The response from the Selenium RC server is invalid: ERROR Server Exception: sessionId should not be null; has this session been started yet?

在这种情况下,有没有人有一种方法可以将Selenium测试标记为跳过?

3 个答案:

答案 0 :(得分:2)

您可以使用PHPUnit 3.4中引入的test dependencies

基本上

  1. 编写一个检查Selenium是否已启动的测试。
  2. 如果没有,请拨打$ this-> markTestAsSkipped()。
  3. 让所有需要测试的硒都依赖于这个。

答案 1 :(得分:0)

我首选的selenium / PHPUnit配置:

维护集成(硒)测试可能需要做很多工作。我使用firefox selenium IDE开发测试用例,它不支持将测试套件导出到PHPUnit,并且只支持单个测试用例。因此 - 如果我必须维护甚至5次测试,那么每次需要更新时,需要进行大量的手动工作来重新PHPUnit。 这就是我设置PHPUnit以使用Selenium IDE的HTML测试文件的原因!他们可以重新加载&在PHPUnit和amp;之间重用selenium IDE

<?php 
class RunSeleniumTests extends PHPUnit_Extensions_SeleniumTestCase {
    protected $captureScreenshotOnFailure = true;
    protected $screenshotPath = 'build/screenshots';
    protected $screenshotUrl = "http://localhost/site-under-test/build/screenshots";
    //This is where the magic happens! PHPUnit will parse all "selenese" *.html files
    public static $seleneseDirectory = 'tests/selenium';
    protected function setUp() {
            parent::setUp();
            $selenium_running = false;
            $fp = @fsockopen('localhost', 4444);
            if ($fp !== false) {
                    $selenium_running = true;
                    fclose($fp);
            }
            if (! $selenium_running)
                $this->markTestSkipped('Please start selenium server');

            //OK to run tests
            $this->setBrowser("*firefox");
    $this->setBrowserUrl("http://localhost/");
    $this->setSpeed(0);
    $this->start();
            //Setup each test case to be logged into WordPress
            $this->open('/site-under-test/wp-login.php');
            $this->type('id=user_login', 'admin');
            $this->type('id=user_pass', '1234');
            $this->click('id=wp-submit');
            $this->waitForPageToLoad();
    }
    //No need to write separate tests here - PHPUnit runs them all from the Selenese files stored in the $seleneseDirectory above!
} ?>

答案 2 :(得分:0)

您可以尝试skipWithNoServerRunning() 有关更多信息,请参阅this link