2012-04-16 3 views
22

Ho lavorato con PHPUnit per un po 'di tempo e sta iniziando a sembrare che potrei aver bisogno di suddividere i miei test in gruppi che sarebbero eseguiti come esecuzioni separate di phpunit. Il motivo principale è che la maggior parte dei miei test deve essere eseguita in processi separati, mentre alcuni non possono essere eseguiti in processi separati a causa di un problema documentato here. Quello che mi piacerebbe fare è scrivere uno script bash che attiva diverse esecuzioni di phpunit, ciascuna configurata per eseguire test diversi con impostazioni diverse.Copertura del codice di aggregazione da diverse esecuzioni di PHPUnit

Quindi la mia domanda è: esiste un modo per aggregare i risultati della copertura del codice di più esecuzioni phpunit? Posso farlo direttamente tramite PHPUnit stesso o usando qualche altro strumento? È possibile ottenere quello che sto cercando da una corsa di phpunit usando il concetto di suite di test di PHPUnit?

+0

Hai visto l'ultimo commento su https://github.com/sebastianbergmann/phpunit/issues/254? – vimdude

+0

@abdelsaid: ho guardato quest'ultimo commento e il modo in cui è pertinente a questa domanda è oltre me. –

risposta

21

Utilizzare la "--coverage-php" per PHPUnit per farlo scrivere i dati di copertura come un PHP_CodeCoverage oggetto serializzato, poi combinarle utilizzando PHP_CodeCoverage::merge, in questo modo:

<?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"; 

Si può anche essere in grado di unire la file utilizzando uno strumento denominato phpcov, come descritto qui: https://github.com/sebastianbergmann/phpunit/pull/685

+0

ho provato questo, ma ricevo questi messaggi di errore: – Phoenix

+0

(!) Errore irreversibile: eccezione non rilevata 'RuntimeException' con messaggio 'Impossibile scrivere su /arroyo/www/htdocs/code_coverage_report/index.dashboard.html.' in /arroyo/www/htdocs/cdsm/tests/library/PHPUnit/Text/Template. php on line 150 (!) RuntimeException: impossibile scrivere in /arroyo/www/htdocs/code_coverage_report/index.dashboard.html . in /arroyo/www/htdocs/cdsm/tests/library/PHPUnit/Text/Template. php on line 150 – Phoenix