2013-11-25 33 views
4

我有一些testsuites(PHPUnit-Selenium,PHPUnit),我想按特定順序運行它們。所以我想運行「安裝(硒驅動)」測試套件,然後運行「單元測試」測試套件。我知道我應該在單元測試中避免依賴關係,但我的問題不在於此(我使用具有很多依賴關係的舊應用程序工作,我需要安裝並使用selenium測試此安裝,然後運行單元測試等)。PHPUnit:按特定順序執行testSuites

所以,我不需要爲我的「測試用例」訂購特定的訂單,但這樣做可以,但僅適用於我的「測試套件」。這裏是我的phpunit.xml配置文件:

<phpunit backupGlobals="false"> 

    <selenium> 
     <browser name="Firefox" browser="*firefox" timeout="600" /> 
    </selenium> 

    <testsuites> 
     <testsuite name="install (selenium driven)"> 
      <file>./_install.php</file> 
      <exclude>./bin</exclude> 
     </testsuite> 
     <testsuite name="unit tests"> 
      <directory>./</directory> 
      <exclude>./selenium</exclude> 
     </testsuite> 
    </testsuites> 
</phpunit> 

所以,當我運行PHPUnit的,現在看來,這不等待「安裝(硒驅動)」的結果,所以「單元測試」失敗(MySQL的錯誤,但是沒關係)。我該如何處理這個問題?我想兩個獨立的步驟:

  1. 運行 「安裝(硒驅動)」 測試套件
  2. 運行 「單元測試」 測試套件

其他信息:

  • 我有很多testCases文件,所以我不想指定他們
  • 我知道我應該避免backupGlobals=false太,我很抱歉,我不能:(...
  • 我知道bootstrap選項,但我需要「測試」安裝(所以它是一個測試套件)

非常感謝,如果你有一個線索! (我試圖找到一個解決方案,但我現在沒有找到任何...)

+1

也許使用批處理文件逐個調用每個測試套件,使用命令行開關或不同的XML配置文件啓動PHPUnit以運行1個測試套件,以便您可以手動安排訂單。保持一種痛苦,但現在會工作。 –

回答

1

史蒂文斯科特的評論使用批處理文件和兩個配置文件,將是我會做的。它遵循Unix的哲學,即使用簡單工具將簡單工具串在一起,而不是一個能夠完成所有工作的大型複雜工具。

下面是一個替代方案,它基於猜測「安裝」不只是進行功能測試,而且還要設置單元測試需要的數據庫和其他固件。那麼,如何將功能測試移到單元測試套件中的setupBeforeClass()調用中。使用shell_exec()運行phpunit來運行功能測試,如果失敗,請撥打die或類似的名稱,以便單元測試不會運行。

P.S.你聽起來像你知道你在做什麼,但是對於任何後來的人來說:當你有機會時,單元測試應該被重構爲使用模擬DB,以便它們可以首先運行,並且經常運行。仍然保留現有的單元測試套件,但將它合併到功能測試套件中,因爲它聽起來就像它屬於的地方。事實上(合併兩個測試套件,然後在各處使用明確的@depends)是另一種方法。

+0

感謝Darren Cook&Steven Scott!現在沒關係,我運行了兩個單獨的phpunit(由jenkins驅動)並且工作正常。 –