Как запустить тестовый пример PHPUnit Selenium, не открывая браузер с каждой функцией? - PullRequest
1 голос
/ 08 сентября 2011

В настоящее время у меня есть тестовый пример PHPUnit, который расширяет PHPUnit_Extensions_SeleniumTestCase. Каждая запускаемая функция требует $ this-> setBrowserUrl () и по умолчанию запускает новое окно браузера Firefox при каждом вызове функции.

Мне нужен тестовый набор, который запускает браузер для определенных функций, но не запускает браузер для других функций, чтобы сэкономить ресурсы и время, необходимое для открытия и закрытия браузера. Могу ли я иметь такой файл?

Ответы [ 2 ]

1 голос
/ 11 сентября 2011

Лучшим вариантом для вас, вероятно, является создание двух отдельных наборов тестов, один из которых использует команды Selenium, а другой - не использует никаких функций Selenium.

class BrowserTests extends PHPUnit_Extensions_SeleniumTestCase
{
    protected function setUp()
    {
        $this->setBrowser('*firefox /usr/lib/firefox/firefox-bin');
        ...    
    }

    public function testOne()
    {
          ...
    }
    ...
}

class NonBrowsterTests extends PHPUnit_Framework_TestCase
{
    protected function setUp()
    {
        ...
    }

    public function testOne
    {
       ...
    }
    ...
}
0 голосов
/ 09 августа 2012

Разобрался с индивидуальным решением, используя аннотации PHPUnit (и написал в блоге об этом!)

http://blog.behance.net/dev/custom-phpunit-annotations

РЕДАКТИРОВАТЬ: добавив код здесь, чтобы сделать мой ответ более полным:)

Короче говоря, используйте пользовательские аннотации. В вашем setUp () проанализируйте блок doc, чтобы получить аннотации и пометить тесты с разными качествами. Это позволит вам пометить определенные тесты для запуска с помощью браузера, а некоторые тесты для запуска без.

protected function setUp() {

  $class      = get_class( $this );
  $method     = $this->getName();
  $reflection = new ReflectionMethod( $class, $method );
  $doc_block  = $reflection->getDocComment();

  // Use regex to parse the doc_block for a specific annotation
  $browser = self::parseDocBlock( $doc_block, '@browser' );

  if ( !self::isBrowser( $browser )
    return false;

  // Start Selenium with the specified browser

} // setup

private static function parseDocBlock( $doc_block, $tag ) {

 $matches = array();

  if ( empty( $doc_block ) )
    return $matches;

  $regex = "/{$tag} (.*)(\\r\\n|\\r|\\n)/U";
  preg_match_all( $regex, $doc_block, $matches );

  if ( empty( $matches[1] ) )
    return array();

  // Removed extra index
  $matches = $matches[1];

  // Trim the results, array item by array item
  foreach ( $matches as $ix => $match )
    $matches[ $ix ] = trim( $match );

  return $matches;

} // parseDocBlock
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...