PHP로 커버리지를 내면 phpdbg

2021년 2월 26일 추가

최근에는 PCOV이 좋은 것 같습니다.
PCOV는 PHPUnit8 이후의 대응이므로, 이 기사는 PHPUnit8 미만의 방향입니다.

2021년 8월 2일 추가
그러나 phpdbg에 비해 커버리지가 떨어지는 경우도있는 것 같습니다.

단위 테스트를 평가하기 위해 코드 커버리지를 사용하는 것이 자주 있다고 생각합니다.
종래부터, PHPUnit 에는 코드 커버리지 해석 기능이 구현되고 있어 HTML 를 비롯한 몇개의 형식으로, 리포트를 출력 가능합니다.

PHP5는 xdebug가 제공하는 명령문 커버리지 기능을 사용해 왔지만, 매우 느리고 1100 Assertions 정도의 EC-CUBE3 커버리지를 출력하는 데 2시간 이상 걸립니다.
게다가 빠른 CPU로 해도 상당히 빠르지 않습니다.
Windows 환경에서는 특히 느린 것처럼 6시간 정도 걸립니다.

PHP7 + PHP_CodeCoverage 2.2부터는 phpdbug을 사용할 수 있습니다.

HTML 보고서를 인쇄하려면 다음을 수행합니다.
phpdbg -qrr path/to/phpunit --coverage-html <output dir>

xdebug 에서는 2시간 이상 걸리고 있었던 것이, phpdbg 에서는, 무려 6분 정도로 끝났습니다!
Time: 6.01 minutes, Memory: 218.00Mb

보고서도 xdebug 와 같이 출력할 수 있습니다.



Coveralls.io에서 이러한 보고서를 만들 수도 있습니다.

다만, xdebug 에서는 정상이었던 테스트가 몇개의 에러가 되어 버리는 경우가 있는 것 같습니다만, PHP7 의 버전 업에 수반해 개선되고 있습니다.
완벽이라고는 할 수 없지만, 커버리지 리포트를 내는 정도라면 큰 지장은 없다고 생각합니다.

2021년 8월 2일 추가

phpdbg와 xdebug3 비교



2020년 11월에 xdebug3이 출시되었습니다. xdebug2에 비해 성능이 향상된 것 같습니다.
2000 Assertion 약한 EC-CUBE4에서는 30분 미만으로 출력할 수 있습니다.
phpdbg의 경우 20 분이 걸립니다. 그래서 큰 차이는 없어졌습니다.
또, xdebug3 쪽이 정확한 커버리지 계측을 할 수 있다고 합니다만, 0.1% 정도의 차이 와 같습니다.

Too many open files 라고 할 때는



큰 프로젝트에서 phpdbg를 실행하면 Too many open files 오류가 발생합니다. 이를 피하려면 Docker Container를 통해 phpdbg를 실행하는 것이 좋습니다.

Travis-CI에서는 ulimit -n 30000에 대한 제한이 있지만 Docker Container에서는 ulimit -n 524288까지 사용할 수 있습니다.
docker run -v "$PWD":/usr/src/myapp:cached -w /usr/src/myapp --rm nanasess/phpdbg phpdbg -qrr -dmemory_limit=-1 ./path/to/bin/phpunit --coverage-clover=coverage.clover

Dockerfile은 여기
htps : // 기주 b. 코 m / 나나세 s / phpdbg

See Also


  • htps : // / ぇphp. c / 네 ws / 2015/08 / ph puni t-4-8- 코코 코 ゔ ぇ 라게 쏘 rt
  • Travis CI의 예
  • 좋은 웹페이지 즐겨찾기