2012-04-16 15 views
22

He estado trabajando con PHPUnit por un tiempo, y está empezando a parecer que podría necesitar dividir mis pruebas en grupos que se ejecutarían como ejecuciones separadas de phpunit. La razón principal de esto es que la mayoría de mis pruebas deben ejecutarse en procesos separados, mientras que otras no se pueden ejecutar en procesos separados debido a un problema documentado here. Lo que me gustaría hacer es escribir un script bash que active varias ejecuciones de phpunit, cada una configurada para ejecutar diferentes pruebas con diferentes configuraciones.Agregando cobertura de código de varias ejecuciones de PHPUnit

Así que mi pregunta es: ¿hay alguna manera de agregar los resultados de cobertura de código de múltiples ejecuciones phpunit? ¿Podría hacer eso directamente a través de PHPUnit, o usando alguna otra herramienta? ¿Es posible obtener lo que estoy buscando de una ejecución de phpunit usando el concepto de suite de pruebas de PHPUnit?

+0

¿Viste el último comentario en https://github.com/sebastianbergmann/phpunit/issues/254? – vimdude

+0

@abdelsaid: Miré el último comentario, y cómo es relevante para esta pregunta me supera. –

Respuesta

21

Utilice la opción "--coverage-php" a PHPUnit para conseguirlo para escribir los datos de cobertura como PHP_CodeCoverage objeto serializado, luego combinarlas usando PHP_CodeCoverage::merge, así:

<?php 
/** 
* Deserializes PHP_CodeCoverage objects from the files passed on the command line, 
* combines them into a single coverage object and creates an HTML report of the 
* combined coverage. 
*/ 

if ($argc <= 2) { 
    die("Usage: php generate-coverage-report.php cov-file1 cov-file2 ..."); 
} 

// Init the Composer autoloader 
require realpath(dirname(__FILE__)) . '/../vendor/autoload.php'; 

foreach (array_slice($argv, 1) as $filename) { 
    // See PHP_CodeCoverage_Report_PHP::process 
    // @var PHP_CodeCoverage 
    $cov = unserialize(file_get_contents($filename)); 
    if (isset($codeCoverage)) { 
    $codeCoverage->filter()->addFilesToWhitelist($cov->filter()->getWhitelist()); 
    $codeCoverage->merge($cov); 
    } else { 
    $codeCoverage = $cov; 
    } 
} 

print "\nGenerating code coverage report in HTML format ..."; 

// Based on PHPUnit_TextUI_TestRunner::doRun 
$writer = new PHP_CodeCoverage_Report_HTML(
    'UTF-8', 
    false, // 'reportHighlight' 
    35, // 'reportLowUpperBound' 
    70, // 'reportHighLowerBound' 
    sprintf(
    ' and <a href="http://phpunit.de/">PHPUnit %s</a>', 
    PHPUnit_Runner_Version::id() 
    ) 
); 

$writer->process($codeCoverage, 'coverage'); 

print " done\n"; 
print "See coverage/index.html\n"; 

También puede ser capaz de fusionar el archivos usando una herramienta llamada phpcov, como se describe aquí: https://github.com/sebastianbergmann/phpunit/pull/685

+0

intenté esto, pero recibo estos mensajes de error: – Phoenix

+0

(!) Error fatal: excepción no detectada 'RuntimeException' con el mensaje 'No se pudo escribir en /arroyo/www/htdocs/code_coverage_report/index.dashboard.html.' en /arroyo/www/htdocs/cdsm/tests/library/PHPUnit/Text/Template.php en la línea 150 (!) RuntimeException: no se pudo escribir en /arroyo/www/htdocs/code_coverage_report/index.dashboard.html . en /arroyo/www/htdocs/cdsm/tests/library/PHPUnit/Text/Template.php en la línea 150 – Phoenix

Cuestiones relacionadas