用于检测字符串中的PHP错误/警告的库

时间:2011-09-15 09:32:41

标签: php phpunit

我们正在使用PHPUnit来运行单元测试和功能测试,这些测试通过HTTP查询某些URL,并针对某些XPath检查输出。

现在有时,PHP错误会出现在页面的HTML输出中(display_errors已启用,因为它是一个开发系统)并且我希望有详细的phpunit错误消息以及来自html页面的错误。

处理错误没问题,我知道怎么做。问题是提取错误消息 - 当启用xdebug时,堆栈跟踪 - 来自HTML输出。

我可以使用哪个库已经使用了吗?


问题

  

如果您为该页面本身编写测试而不是检索页面的内容可能会更好?

不幸的是,并非所有遗留代码都可以轻松测试。因此,做一些HTTP查询和检查HTML有时是唯一(或最简单)的选项。

  

设置自定义错误处理程序并不容易记录单元测试时发生的所有错误吗?

测试部分在远程服务器上运行,我无法从单元测试中直接访问。

当然,我将它们记录在一些公共可访问文件中并通过http获取它们 - 但是我需要弄清楚错误属于哪个测试,并且当几个人同时运行测试时会遇到问题。

2 个答案:

答案 0 :(得分:1)

我不知道这样的图书馆,但是这个穷人用preg_match的解决方案对我来说效果很好。像

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

答案 1 :(得分: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 - 我没有尝试过这个代码,但它应该让你开始。