jkrnakが上でコメントしたように、XMLファイルを単純にマージすることはできません.出力時に計算される行がカバーされているなどの計算値があるためです。ネイティブ PHP コードで作業しながら「マージ」する必要があります。私の場合、newman によって実行された一連の 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」フラグを使用して呼び出しを行うと出力されます。