Библиотека для обнаружения ошибок / предупреждений PHP в строках - PullRequest
3 голосов
/ 15 сентября 2011

Мы используем PHPUnit для запуска как модульных, так и функциональных тестов, которые запрашивают некоторые URL-адреса через HTTP и проверяют выходные данные по некоторым XPath.

Теперь иногда ошибки PHP появляются в выводе HTML страниц (display_errors включено, так как это система разработки), и я хотел бы получать подробные сообщения об ошибках phpunit с ошибкой со страницы html.

Обработка ошибок не проблема, я знаю, как это сделать. Проблема заключается в извлечении сообщения об ошибке, а при включенном xdebug трассировке стека из вывода HTML.

Есть ли библиотека, которую я могу использовать, которая уже это делает?


Вопросы

вероятно, было бы лучше, если бы вы написали тест для этой страницы, а не что-то, что извлекает страницу?

К сожалению, не весь устаревший код легко тестируется. Поэтому выполнение некоторых HTTP-запросов и проверка HTML иногда является единственным (или самым простым) вариантом.

Не проще ли установить специальный обработчик ошибок, который регистрирует все ошибки, возникающие при модульном тестировании?

Тесты частично выполняются на удаленных серверах, к которым у меня нет прямого доступа из моих модульных тестов.

За исключением, конечно, я регистрирую их в каком-то общедоступном файле и извлекаю их также через http - но затем мне нужно выяснить, к какому тесту относится ошибка, и возникают проблемы, когда тесты выполняются несколькими людьми одновременно.

Ответы [ 2 ]

1 голос
/ 26 февраля 2012

Я бы сопоставил время прогона теста и время сообщения об ошибке из файла журнала.Поэтому вместо display_errors = On или, кроме того, я бы также записал ошибку.Предполагается, что вы выполняете модульные тесты на сервере.

Если нет, вам придется использовать syslog-ng, чтобы получить доступ к файлу журнала.Если бы все это было облачным, я бы запихнул его в loggly и использовал бы их API для поиска.В любом случае!

Я не знаю ни одного решения «под ключ», но это то, что я хотел бы попытаться сделать в двух словах.* тестовый слушатель :

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 - я не пробовал код, но он должен помочь вам начать работу.

1 голос
/ 15 сентября 2011

Я не знаю о такой библиотеке, но решение для бедного человека с preg_match работает довольно хорошо для меня. Как

 if (preg_match('~\n(Notice|Warning|Fatal error): (.+?) in (\S+) on line (\d+)~')......
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...