Составить несколько результатов покрытия xdebug в один отчет?

Я использую покрытие php-кода для сбора информации о покрытии из одного HTTP-запроса (через apache). Я хотел бы сохранить данные покрытия из нескольких запросов, а затем сопоставить результаты в один полный отчет.

Легко ли это сделать? Я надеялся на что-то вроде:

<?php require 'PHP/CodeCoverage/Autoload.php'; $coverage = new PHP_CodeCoverage; $coverage->start('<some request>'); // ... $coverage->stop(); $writer = new PHP_CodeCoverage_Report_XXX; $writer->process($coverage, '/tmp/reportYYY.xml'); // at some later date, collate all the results. $writer = new PHP_CodeCoverage_Report_HTML; $writer->process('/tmp/reportX.xml'); // ... $writer->process('/tmp/reportZ.xml'); 

Мне удалось запустить этот запуск с помощью phpcov (установленного через композитор), как упоминалось:

Используя Apache .htaccess для добавления / добавления php-скриптов, которые сериализуют объект PHP_CodeCoverage в файл, вам необходимо соответствующим образом настроить пути:

.htaccess:

 # Prepend the file php_value auto_prepend_file "prepend.php" # Append file to bottom of page php_value auto_append_file "append.php" 

prepend.php:

 <?php require_once '../vendor/autoload.php'; $coverage = new PHP_CodeCoverage; $coverage->start('Site coverage'); 

append.php:

 <?php $coverage->stop(); $cov = serialize($coverage); //serialize object to disk file_put_contents('../cov/site.' . date('U') . '.cov', $cov); 

Поскольку я сериализую объект, мне пришлось отредактировать /vendor/phpunit/phpcov/src/MergeCommand.php:

 protected function execute(InputInterface $input, OutputInterface $output) { $mergedCoverage = new PHP_CodeCoverage; $finder = new FinderFacade( array($input->getArgument('directory')), array(), array('*.cov') ); foreach ($finder->findFiles() as $file) { print "Merging $file" . PHP_EOL; //$_coverage = include($file); $_coverage = unserialize(file_get_contents($file)); $mergedCoverage->merge($_coverage); unset($_coverage); } $this->handleReports($mergedCoverage, $input, $output); } с protected function execute(InputInterface $input, OutputInterface $output) { $mergedCoverage = new PHP_CodeCoverage; $finder = new FinderFacade( array($input->getArgument('directory')), array(), array('*.cov') ); foreach ($finder->findFiles() as $file) { print "Merging $file" . PHP_EOL; //$_coverage = include($file); $_coverage = unserialize(file_get_contents($file)); $mergedCoverage->merge($_coverage); unset($_coverage); } $this->handleReports($mergedCoverage, $input, $output); } 

Затем, используя phpcov, создайте отчет:

 ./vendor/bin/phpcov merge --html="./cov/report/" ./cov -vvv