2011-09-15 54 views
3

我們使用PHPUnit來運行單元測試和功能測試,這些測試和功能測試通過HTTP查詢一些URL並檢查某些XPath的輸出。用於檢測字符串中的PHP錯誤/警告的庫

現在有時,PHP錯誤出現在頁面的HTML輸出中(display_errors處於打開狀態,因爲它是一個開發系統),我想從html頁面錯誤地提供詳細的phpunit錯誤消息。

處理錯誤是沒有問題的,我知道該怎麼做。問題在於提取錯誤消息 - 並且在啓用xdebug時,從HTML輸出中獲取堆棧跟蹤。

有沒有我可以使用的庫,它已經做到了?


問題

它可能會更好,如果你寫的,而不是東西,檢索頁面,該頁面本身的測試,?

不幸的是,並非所有遺留代碼都易於測試。所以做一些HTTP查詢和檢查HTML有時是唯一的(或者最簡單的)選項。

設置自定義錯誤處理程序會記錄單元測試時發生的所有錯誤嗎?

這些測試部分在遠程服務器上運行,我無法從單元測試中直接訪問它們。

除了當然我將它們記錄在一些公共可訪問的文件中,並通過http獲取它們 - 但是之後我需要弄清楚錯誤屬於哪個測試,並且在幾個人同時運行測試時遇到問題。

+0

設置自定義錯誤處理程序並不容易,它會記錄單元測試時發生的所有錯誤嗎? – Sjoerd

+0

不是你的問題的答案,但它可能會更好(如果沒有具體的東西阻止你),如果你爲該頁面本身寫了一個測試,而不是檢索頁面的東西? – Nanne

回答

1

我不知道這樣的圖書館,但窮人的preg_match解決方案對我來說效果很好。像

if (preg_match('~\n(Notice|Warning|Fatal error): (.+?) in (\S+) on line (\d+)~')...... 
+0

是的,這是可能的,但不夠遠。我還想在他們那裏得到xdebug stacktraces,並手工製作preg來做這件事,這不是我想做的事情。在這種情況下,lib會更好。 – cweiske

1

我相關的測試運行,並從日誌文件中的錯誤消息的時間的時間。所以,而不是display_errors = On,或者另外,我也會記錄錯誤。這假定您正在服務器服務器上運行單元測試。

如果沒有,您必須使用syslog-ng來獲取您的日誌文件。如果所有這些都是基於雲的,我會將它推入loggly並使用它們的API進行搜索。無論如何!

我不知道任何交鑰匙解決方案,但這是我想嘗試做的簡而言之。

基本的想法是寫一test listener

class CweiskeListener extends PHPUnit_Framework_TestListener 
{ 
    public function endTest(PHPUnit_Framework_Test $test, $time) 
    { 
     // Feb 25 20:36:06 
     $syslogDateStr = date('M d h:i'); 
     // run something like: 
     $logOut = system("cat /var/log/syslog|grep {$syslogDateStr}"); 
     // fail the test here? 
    } 
} 

HTH - 我還沒有嘗試過的代碼,但它應該讓你開始。