目前,我有一個擴展PHPUnit_Extensions_SeleniumTestCase的PHPUnit測試用例。每個啓動的函數都需要一個$ this-> setBrowserUrl(),並且默認每個函數調用都啓動一個新的Firefox瀏覽器窗口。如何運行一個PHPUnit Selenium測試用例,而無需使用瀏覽器打開每個功能?
我想有一個測試用例,可以爲特定功能啓動瀏覽器,但不會爲其他功能啓動瀏覽器,以節省打開和關閉瀏覽器所需的資源和時間。我有可能擁有這樣的文件嗎?
目前,我有一個擴展PHPUnit_Extensions_SeleniumTestCase的PHPUnit測試用例。每個啓動的函數都需要一個$ this-> setBrowserUrl(),並且默認每個函數調用都啓動一個新的Firefox瀏覽器窗口。如何運行一個PHPUnit Selenium測試用例,而無需使用瀏覽器打開每個功能?
我想有一個測試用例,可以爲特定功能啓動瀏覽器,但不會爲其他功能啓動瀏覽器,以節省打開和關閉瀏覽器所需的資源和時間。我有可能擁有這樣的文件嗎?
想出了一個使用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
您最好的選擇可能是創建兩個單獨的測試套件,一個使用使用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
{
...
}
...
}
雖然這在理論上可以回答的問題,[這將是優選的](http://meta.stackexchange.com/q/8259),包括在這裏的答案的主要部分,並且提供的鏈接參考。 – BoltClock