PHPUnit的合并两个或更多clover.xml报告(phpunit merge two or m

2019-08-02 04:41发布

我有一个项目的不同扩展名的几个clover.xml报告。 我想将它们组合成一个clover.xml,然后创建成一个三叶草HTML。 但我看到PHPUnit的班没办法PHP_CodeCoveragePHP_CodeCoverage_Report_HTMLPHP_CodeCoverage_Report_Clover

这些类都不接受现有clover.xml。 我想我也许可以用这些方法来工作,追加和合并的PHP_CodeCoverage 。 但是,这并不接受文件。

Answer 1:

如果您正在运行詹金斯或类似的包括PHP脚本在Ant生成文件合并使用这些文件的SimpleXML

一个例子是在这里http://kuttler.eu/post/merging-and-splitting-xml-files-with-simplexml/

然后在您的文章生成操作詹金斯将使用clover.xml来生成代码覆盖



Answer 2:

正如上面jkrnak评论你不能简单地合并XML文件作为有计算值,如覆盖线等..这是在输出时间计算。 您需要将“合并”,同时还与本地的PHP代码工作。 在我来说,我想捕捉的一系列纽曼执行的Web服务调用的覆盖。 要做到这一点,我在开始执行横跨调用(使用高速缓存)仍然存在设置一个标志,然后也保存在缓存中的对象PHP_CodeCoverage也。 我实现(Laravel)看起来是这样的:

if ( isset($_GET['initCoverage']) )
{
    Cache::put( 'recordCoverage', true, 1440 );
}

if ( Cache::has('recordCoverage') )
{
    if ( Cache::has('coverage') )
    {
        $coverage = Cache::get('coverage');
    }
    else
    {
        $filter = new PHP_CodeCoverage_Filter;
        $filter->addDirectoryToBlacklist( base_path() . '/vendor' );

        $coverage = new PHP_CodeCoverage( null, $filter );
    }

    $coverage->start( Request::method() . " " . Request::path() );

    if ( isset($_GET['dumpCoverage']) )
    {
        if ( Cache::has('coverage') ) 
        {
            // Prevent timeout as writing coverage reports takes a long time
            set_time_limit( 0 );

            $coverage = Cache::get( 'coverage' );
            $writer = new PHP_CodeCoverage_Report_Clover;
            $writer->process($coverage, 'results/coverage/clover.xml');
        }

        Cache::forget('recordCoverage');
        Cache::forget('coverage');
    }
    else
    {
        register_shutdown_function( function($coverage) 
        {
            $coverage->stop();

            Cache::put( 'coverage', $coverage, 1440);
        }, $coverage);
    }
}

这捕获在一个单一的覆盖对象,然后输出,当我做的“dumpCoverage”标志的调用一系列的测试。



Answer 3:

多年以后这个问题仍然没有解决一部分。 有一个项目由SB ,可以合并三叶草文件,但它需要PHP 5.6。

无上述工作的答案足够良好的。 这里有一个要点放在一起合并的。 建设性的批评欢迎。

用法:

php clover-merge.php -o merged.xml -f clover-phpunit.xml -f clover-phpspec.xml

在这里张贴为后人太:

<?php
$options = getopt("f:o:");
if (! isset($options['f'])) {
    echo "Files have to be specified with -f\n";
    exit(1);
}
if (! isset($options['o'])) {
    echo "Output has to be specified with -o\n";
    exit(1);
}

$files = $options['f'];
if (! is_array($files)) {
    $files = array($files);
}
$output = $options['o'];

$buffer = '';
foreach ($files as $file) {
    if (! file_exists($file)) {
        echo "File '$file' doesn't exist\n";
        exit(2);
    }
    $report = simplexml_load_file($file);
    $buffer .= $report->project->asXML();
}

$fh = fopen($output ,'w');
if (! $fh) {
    echo "Cannot open '$output' for writing\n";
    exit(2);
}
fwrite($fh, sprintf('<?xml version="1.0" encoding="UTF-8"?><coverage>%s</coverage>', $buffer));
fclose($fh);


文章来源: phpunit merge two or more clover.xml reports