如何在不打开浏览器并使用每个函数的情况下运行 PHPUnit Selenium 测试用例?

发布于 2024-12-03 11:37:17 字数 212 浏览 0 评论 0原文

目前,我有一个扩展 PHPUnit_Extensions_SeleniumTestCase 的 PHPUnit 测试用例。每个启动的函数都需要 $this->setBrowserUrl() 并且默认在每个函数调用时启动一个新的 Firefox 浏览器窗口。

我想要一个测试用例,为特定功能启动浏览器,但不为其他功能启动浏览器,以节省打开和关闭浏览器所需的资源和时间。我可以有这样的文件吗?

Currently, I have a PHPUnit test case that extends PHPUnit_Extensions_SeleniumTestCase. Each function that starts requires a $this->setBrowserUrl() and defaults to starting a new Firefox browser window with each function call.

I want to have a test case that launches the browser for specific functions, but not launch the browser for other functions, as to save the resources and time it takes in opening and closing the browser. Is it possible for me to have such a file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

青瓷清茶倾城歌 2024-12-10 11:37:17

您最好的选择可能是创建两个单独的测试套件,一个使用 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
    {
       ...
    }
    ...
}

You best option is probably to create two separate test suites, one that uses uses Selenium commands and the other that does not use any Selenium functionality..

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
    {
       ...
    }
    ...
}
反差帅 2024-12-10 11:37:17

使用 PHPUnit 注释找到了一个自定义解决方案(并写了一篇关于它的博客文章!)

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

编辑:在此处添加一些代码,以使我的答案更完整:)

简而言之,使用自定义注释。在 setUp() 中,解析文档块以获取注释,并标记具有不同质量的测试。这将允许您标记某些测试以使用浏览器运行,以及某些测试不使用浏览器运行。

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

Figured out a custom solution using PHPUnit annotations (and wrote a blog post about it!)

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

EDIT: Adding some code here, as to make my answer more complete :)

In short, use custom annotations. In your setUp(), parse the doc block to grab annotations, and tag tests with different qualities. This would allow you to tag certain tests to run with a browser, and certain tests to run without.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文