PHP Code Coverage bez PHPUnit

Łukasz Piotrowski Komentarzy 0

    Czasami jest taka sytuacja że dostajemy kod w spadku lub do modyfikacji. Trzeba się w ten kod wgryźć, zrozumieć jak działa. Prosta sprawa jeśli jest to jakiś framework, jeśli mamy testy, jeśli kod jest czytelny.

    Ale co w przypadku ukochanego przez wszystkich programistów "Spagetti"?

    Tutaj przyjdzie nam z pomocą paczka PHP_CodeCoverage. Dzięki niej w bardzo prosty sposób wygenerujemy sobie metryki który kod został uruchomiony przy jakimś requeście. Podobnie to wygląda do Code Coverage podczas uruchamiania Testów Jednostkowych.

    Do dzieła!


    Instalacja

    Aby zainstalować musimy albo pobrać paczkę zip z GitHub albo dodać do composer.json:

    {
        "require": {
            "phpunit/php-code-coverage": "^3"
        }
    }

    Użycie

    Aby rozpocząć śledzenie wykonywanego kodu musimy uruchomić scrapper dodając kilka linijek kodu:

    $filter = new PHP_CodeCoverage_Filter();
    
    // Path to directory of files which should be included on reports
    $filter->addDirectoryToWhitelist(realpath(__DIR__));
    
    $coverage = new PHP_CodeCoverage(null, $filter);
    
    // Start script
    $coverage->start(uniqid(), true);
    
    //
    // Code which should be analyzed
    //
    
    // Stop scrapping
    $coverage->stop();
    
    $writer = new PHP_CodeCoverage_Report_HTML;
    // Path where to render report
    $writer->process($coverage, '/var/www/domain.com/code-coverage-article/');

    Po uruchomieniu kodu powinien wygenerować się nam raport w postaci HTML obrazujący listę plików oraz kod oznaczony na zielono/czerwono który wykonał się (lub nie) podczas uruchomienia.

    Raport wygląda mniej więcej tak: Code Coverage Main Table Code Coverage Details

    Uwagi

    1. Dodanie filtra jest istotne, ponieważ dzięki niemu skrypt na podstawie znalezionych plików umieszcza je w raporcie lub nie.
    2. Generowanie metryk obciąża dość znacznie działanie, toteż nie należy używać tego na wersji produkcyjnej, bo można zajechać sobie serwer.
    3. Wymaga min PHP 5.6
    Top