Я пытаюсь создать отчет по охвату HTML-кода для запуска PHP-приложения. Моя цель - профилировать приложение с XDebug, пока я запускаю свои функциональные тесты, чтобы определить охват кода моего функционального набора тестов.Как генерировать отчеты о покрытии кода PHP из вывода xdebug
Я могу измерить покрытие кода для своих модульных тестов через phpunit (который использует API-интерфейс покрытия php-кода для индивидуального анализа каждого модульного теста, а затем сводит его в отчет о покрытии кода). И поскольку эти инструменты построены поверх xdebug, я надеюсь, что есть способ взять выходной файл из профайлера XDebug и сгенерировать отчет HTML.
Вот что я до сих пор:
Я могу создать файл cachegrind.out, добавив следующую конфигурацию в php.ini:
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir=/var/log/xdebug_profiler
xdebug.profiler_output_name=cachegrind.out
xdebug.profiler_append=1
xdebug.coverage_enable=1
Затем работает мои функциональные тесты с XDebug Расширение Chrome Chrome в режиме «ПРОФИЛЬ». Это добавляет XDEBUG_PROFILE в поле cookie HTTP-запросов, которое, в свою очередь, запускает профайлер в приложении PHP. (В качестве альтернативы вы можете просто включить профилировщик для всех запросов с помощью xdebug.profiler_enable = 1)
Проблема, с которой я сталкиваюсь, заключается в преобразовании выходного файла (cachegrind.out) в тот же вид html-отчета, который предоставляется PHPUnit. Я могу сделать вывод профилировщика с помощью kcachegrind, но у этого приложения нет способа экспортировать отчет о покрытии кода, не говоря уже о том, чтобы указать включенные/исключенные файлы.
Я также изучил инструмент командной строки phpcov, но, несмотря на то, что он поддерживает сериализованные объекты PHP_CodeCoverage, он не работает с XDebug cachegrind файлами.
Я надеюсь, что могу написать PHP, который импортирует выходной файл профайлера XDebug (cachegrind.out) в объект PHP_CodeCoverage, а затем после примера в исходном коде PHPUnit, чтобы сделать HTML-отчет. Кто-нибудь имеет опыт профилирования запущенного приложения PHP таким образом? Есть ли более простой способ сделать это?
Я хотел бы избежать использования PHP_CodeCoverage непосредственно в исходном коде PHP-приложения, если это возможно.
Это кажется, что много работы, чтобы избежать использования уже- существующих инструментов.Почему бы вам не использовать обычные инструменты для тестирования на основе XDEBUG на базе PHP? –