2011-09-08 39 views
1

目前,我有一個擴展PHPUnit_Extensions_SeleniumTestCase的PHPUnit測試用例。每個啓動的函數都需要一個$ this-> setBrowserUrl(),並且默認每個函數調用都啓動一個新的Firefox瀏覽器窗口。如何運行一個PHPUnit Selenium測試用例,而無需使用瀏覽器打開每個功能?

我想有一個測試用例,可以爲特定功能啓動瀏覽器,但不會爲其他功能啓動瀏覽器,以節省打開和關閉瀏覽器所需的資源和時間。我有可能擁有這樣的文件嗎?

回答

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 
+0

雖然這在理論上可以回答的問題,[這將是優選的](http://meta.stackexchange.com/q/8259),包括在這裏的答案的主要部分,並且提供的鏈接參考。 – BoltClock

1

您最好的選擇可能是創建兩個單獨的測試套件,一個使用使用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 
    { 
     ... 
    } 
    ... 
} 
相關問題