아파치에서 움직인 Php의 코드 커버리지를 PhpStorm에서 보는 방법

전제 조건


  • windows10에서 움직여
  • 아파치 설정은 특별히 필요하지 않습니다
  • xdebug가 움직이는 것
  • 로컬에서 움직이는 것
  • php-7.2.9-Win32-VC15-x64
  • Apache 2.4.34 win64 VC15 (스레드 안전)

  • 준비





    composer require phpunit/php-code-coverage

    에서 떨어진다.

    이하의 샘플은 PHP_CodeCoverage 2.2이므로 클래스명과 다르므로 최신의 README.md를 보고 조금 재작성하면 된다.

    github 샘플에서 보여주는 느낌으로 index.php에서 움직이게합니다.
    $coverage = new PHP_CodeCoverage();
    
    $coverage->start('<name of test>');
    
    CodeCoverageXX::$coverage=$coverage;
    
    
    function shutdown()
    {
        $coverage = CodeCoverageXX::$coverage;
        $coverage->stop();
    
        $writer = new PHP_CodeCoverage_Report_Clover;
        $writer->process($coverage, 'D:\link\var\coverage\\'.date('Ymd_His').'_'.getmypid(). '_Apach.xml');
    
    }
    
    register_shutdown_function('shutdown');
    
    /** shutdownにわたすため **/
    class CodeCoverageXX
    {
        /* @var PHP_CodeCoverage */
        public static $coverage;
    }
    
    
    

    이 코드를 항상 움직이면 느리기 때문에 on/off를 할 수 있도록 해 두는 것

    Apache에서 실행 후



    Show Code Coverage Data로 얻기



    +로 추가하여 체크박스를 붙여 표시한다.
    많은 커버리지를 이것으로 표시하는 것은 힘들기 때문에 다음과 같이 재기록한다
    직렬화하고 저장할 코드.
    $coverage = new PHP_CodeCoverage();
    
    $coverage->start('<name of test>');
    
    CodeCoverageXX::$coverage=$coverage;
    function shutdown()
    {
        $coverage = CodeCoverageXX::$coverage;
        $coverage->stop();
    
        file_put_contents('D:\link\var\coverage\\'.date('Ymd_His').'_'.getmypid().'_Apach.txt', serialize($coverage));
    
    }
    
    register_shutdown_function('shutdown');
    
    

    여러 개의 직렬화 된 객체가 저장되기 때문에

    다음 코드로 병합
    <?php
    
    
    require __DIR__.'/../../bootstrap/autoload.php';
    $list = glob('D:/link/var/coverage/*.txt');
    
    /* @var $coverage PHP_CodeCoverage */
    $coverage = null;
    foreach ($list as $filePath) {
        echo $filePath . PHP_EOL;
        $c = unserialize(file_get_contents($filePath));
        if ($coverage === null) {
            $coverage = $c;
        } else {
            $coverage->merge($c);
        }
    }
    
    if ($coverage === null) {
        $coverage = new PHP_CodeCoverage();
    }
    
    $writer = new PHP_CodeCoverage_Report_Clover;
    $writer->process($coverage, 'D:\link\var\coverage\\'.date('Ymd_His').'_'.getmypid().'_Apach.xml');
    
    foreach ($list as $filePath) {
        unlink($filePath);
        echo $filePath .'.....unlink'. PHP_EOL;
    }
    

    실행 후 Show Code Coverage Data로 취득하면 복수의 이벤트를 정리해 표시할 수 있다.

    WebDriver에서 테스트를 실행하고 PhpStorm에서 볼 수 있습니다!
    이건 편리(´,,・ω・,,`)

    좋은 웹페이지 즐겨찾기