2012-03-07 116 views
72

我想用PHPUnit測試我的symfony2應用程序。我有一個項目,其中一切都按預期工作,但在另一個項目中,我有這種奇怪的行爲,即PHPUnit在所有測試結束時隨機停止執行測試套件,並在完成測試套件並編寫代碼後重新啓動或重新啓動測試覆蓋。其他時候它正常運行。phpunit隨機重新啓動測試

下面是一些輸出,使可見正在發生的事情(測試正在重新啓動一遍又一遍):

PHPUnit 3.6.10 by Sebastian Bergmann. 

Configuration read from C:\workspace\cllctr\app\phpunit.xml 

................................................................. 65/83 (78%) 
...........PHPUnit 3.6.10 by Sebastian Bergmann. 

Configuration read from C:\workspace\cllctr\app\phpunit.xml 

................................................................. 65/83 (78%) 
...PHPUnit 3.6.10 by Sebastian Bergmann. 

Configuration read from C:\workspace\cllctr\app\phpunit.xml 

................................................................. 65/83 (78%) 
............PHPUnit 3.6.10 by Sebastian Bergmann. 

Configuration read from C:\workspace\cllctr\app\phpunit.xml 

................................................................. 65/83 (78%) 
............PHPUnit 3.6.10 by Sebastian Bergmann. 

Configuration read from C:\workspace\cllctr\app\phpunit.xml 

................................................................. 65/83 (78%) 
.................. 

Time: 01:03, Memory: 43.00Mb 

OK (83 tests, 145 assertions) 

Writing code coverage data to XML file, this may take a moment. 

Generating code coverage report, this may take a moment. 

下面是測試套件重新啓動的實例執行的所有測試後:

PHPUnit 3.6.10 by Sebastian Bergmann. 

Configuration read from C:\workspace\cllctr\app\phpunit.xml 

................................................................. 65/83 (78%) 
.................. 

Time: 01:29, Memory: 53.25Mb 

OK (83 tests, 145 assertions) 

Writing code coverage data to XML file, this may take a moment. 

Generating code coverage report, this may take a moment. 
PHPUnit 3.6.10 by Sebastian Bergmann. 

Configuration read from C:\workspace\cllctr\app\phpunit.xml 

................................................................. 65/83 (78%) 
............PHPUnit 3.6.10 by Sebastian Bergmann. 

由於我的其他項目運行時沒有任何問題,因此我的代碼中必定存在一些問題。但我無法弄清楚什麼可能觸發這種行爲!日誌不顯示任何意外/奇怪。

編輯

昨天,我發現了一些奇怪:我決定從MongoDB中切換到MySQL的,因爲一些無關的原因。轉換完成後,所有測試運行沒有任何問題。我嘗試了很多次,但無法再現它。由於這隻發生在我的功能測試中,我傾向於認爲問題在於我的WebTestCase類,它運行一些命令來清除和重建數據庫。也許有人也使用MongoDB可以重現這種行爲?

+0

看起來它總是發生在同一個地方,65/83。你能找出它正在進行的測試嗎?運行時嘗試使用'--verbose'選項。 – 2012-03-08 19:27:41

+0

65/83意味着在第1行中,執行65個測試(每個點是一個測試)。在第二行中,您會看到執行的測試數量並不相同,因此我懷疑這是一項失敗的測試。由於測試有時有效,有時會循環,我懷疑這是因爲一次測試。但我會進一步調查! – Sgoettschkes 2012-03-09 08:36:16

+1

我的不好!我的腦子裏有確實的知識。這裏有個問題 - 你是否在一個孤立的PHP進程中運行每個測試?這可能會導致這種不尋常的活動。我們一直使用相同版本的PHPUnit,並且沒有看到任何與您所看到的一樣瘋狂的東西! – 2012-03-09 08:59:22

回答

1

我建議檢查數據庫服務器連接限制和池。

例如,如果您擁有100個連接的最大限制,並且某些測試將連接打開(「泄漏」),則會達到此限制。

這也可以解釋爲什麼它有時會起作用,有時會達到極限,因爲您的數據庫可以同時處理其他任務,所以有時會達到天花板,其他時候沒有其他任何運行時,您可以成功運行測試。

檢查永久網絡連接和其他外部資源。