目前,我有一个扩展PHPUnit_Extensions_SeleniumTestCase的PHPUnit测试用例。每个启动的函数都需要$ this-> setBrowserUrl(),默认情况下每个函数调用都会启动一个新的Firefox浏览器窗口。
我希望有一个测试用例,用于启动特定功能的浏览器,但不启动其他功能的浏览器,以节省打开和关闭浏览器所需的资源和时间。我有可能拥有这样的文件吗?
答案 0 :(得分:1)
您最好的选择可能是创建两个独立的测试套件,一个使用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
{
...
}
...
}
答案 1 :(得分:0)
使用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