2

php-code-coverageを使用して、1 つの HTTP リクエストから (Apache 経由で) カバレッジ情報を収集しています。複数のリクエストのカバレッジ データを保存し、その結果を 1 つの包括的なレポートにまとめたいと考えています。

これは簡単ですか?私は次のようなことを望んでいました:

<?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');
4

1 に答える 1

2

前述のように、 phpcov (composer 経由でインストール) を使用してこれを実行することができました。

Apache .htaccess を使用して、PHP_CodeCoverage オブジェクトをファイルにシリアライズする php スクリプトを先頭/末尾に追加するには、パスを適切に調整する必要があります。

.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);
}

次に、phpcov を使用してレポートを作成します。

./vendor/bin/phpcov merge --html="./cov/report/" ./cov -vvv
于 2014-03-12T22:46:02.457 に答える