Pcov를 사용하여 Xdebug보다 2배 이상 빠른 PHPUnit 코드 덮어쓰기 방법
CI 구축 시간 단축
장기적으로 볼 때 매번 구축할 때마다 12초를 절약하는 것은 무엇을 의미하는가?만약 당신이 매번 구축에서 12초를 절약할 수 있다면, 그것은 5번의 구축에서 1분을 절약하는 것과 같다.
In just 100 builds you save 20 minutes and in 1000 builds that number becomes 3 hours and 20 mins.
이것도 당신의 동료를 위해 얼마나 많은 대기 시간을 절약할 수 있는지 생각해 보세요.
Xdebug 대신 PHP 코드를 덮어쓰기
XDebug는 디버거이며 덮어쓸 수도 있습니다.PHPdbg는 Xdebug의 또 다른 대체품이다.Pcov는 PHPUnit 코드를 덮어쓰기 위해 만들어진 것이지 다른 것이 아니다.
Michael Dyrynda도 이 문제를 언급했다. 그는 다음과 같이 말했다.
You have access to the same output formats that are available to PHPUnit (formatted output, clover, JSON, HTML, etc.) with none of the overhead.
그는 또 타격
max_nesting_limit
과 같은 Xdebug의 다른 문제도 지적했다. 너도 그의 블로그 글을 읽어야 한다.PCov 덮어쓰기 코드 고려 사항
Pcov는 PHP7 이상 버전
To show a real-life scenario we are going to see how long Laravel Framework’s 5700+ tests with 15500+ assertions are going to take in our quick experiment.
우리 시작합시다!
PHPUnit 코드 덮어쓰기 속도 향상
저는 Laravel 프레임워크를 선택했습니다. 유행하기 때문일 뿐만 아니라 테스트가 많아서 5700개가 넘었습니다.무엇보다 라벨 8번을 위해서다.x분기, 테스트가 Github Actions에서 실행 중입니다.
라벨 8번 테스트.x는 PHP의 여러 버전에서 운행한다. 예를 들어 7.3, 7.4, 8은 최저에서 안정적인 변체에서 운행한다.같은 테스트도 윈도우즈에서 실행됩니다.
Another reason to choose Laravel 8.x was it is using PHPUnit 9.3 which does not need pcov-clobber to get the PHPUnit coverage.
나는 이전에 블로그에 입문에 관한 글을 쓴 적이 있다Unit testing in Laravel. 이것은 좋은 단원 테스트 복습일 것이다.Data provider for PHPunit도 테스트 코드를 더 적게 작성하지만 더 많은 코드 커버율을 실현하는 좋은 방법이다.
다음은 PHPUnit 코드를 덮어쓰는 데 있어서 Pcov가 Xdebug에 얼마나 빠른지 알아보기 위한 절차입니다.
Fork Laravel/framework repo 및 PHP7.4에 대해서만 테스트 실행
간단하게 보기 위해서 저는 Laravel/framework Githubrepo를 사용했습니다.이후에 Github 운영 테스트 워크플로우를 현재 안정적인 버전의 PHP 7.4에서만 테스트를 실행하도록 변경했습니다.너는 내가 이 pull request 에서 한 변경 사항을 볼 수 있다.
Opening the pull requests ran the tests without PHPUnit code coverage and it took
33 seconds
to run the tests consuming257MB
of memory.
이 Gitub Actions page 에서 이 테스트가 실행되는 상세한 정보를 볼 수 있습니다. 다음은 빠른 화면 캡처입니다.
XDebug를 사용하여 PHPUnit 코드 덮어쓰기 실행
위의 pull 요청을 병합했습니다. PHP 7.4에 대해서만 테스트를 실행합니다.그런 다음 Xdebug를 드라이버로 사용하여 PHPUnit 테스트를 코드 오버레이로 수정했습니다.Gitub action은
shivammathur/setup-php@v2
action을 사용하기 때문에 변경이 매우 간단합니다.구글에서 검색한 후에 나는 이 동작이 이미 성공했고 Code Coverage support 사용하기 쉽다는 것을 발견했다.덮어쓰기 범위를
none
에서 xdebug
로 변경하고 PHPUnit 명령에 --coverage-text
를 추가해야 합니다.vendor/bin/phpunit --verbose --coverage-text
나는 tests.yml
파일의 두 군데에서 이러한 변경을 했는데 결과는pull request이었다.새 pull 요청 = Github Actions CI에서 다시 실행되는 테스트.Xdebug 코드 덮어쓰기가 생겨서 테스트를 실행하는 데 걸리는 시간에 큰 차이가 있는지 몇 번 더 실행했습니다.대체로 같다.
In one of the runs of code coverage with Xdebug took
2 mins 34 seconds
and consumed395 MB
of memory.
나는 단지
Execute tests
임무를 살펴보는 시간일 뿐이다.다음과 같은 화면 표시를 볼 수 있습니다.코드 덮어쓰기 비율은 Xdebug를 사용하는 PHPUnit 코드의 덮어쓰기 비율은 75.65%의 행과 68.90%의 방법을 포함한다.
Pcov의 PHPUnit 코드 커버율 2배 향상
현재 Xdebug의 시간은
154 seconds
입니다. 새로운 덮어쓰기 드라이버 Pcov
가 얼마나 걸리는지 보고 싶습니다.나는 답을 찾기 위해 다시 비슷한 방법을 써서 라레빌 8번지로 갔다.x 분기, 편집을 시작합니다 .github/workflows/tests.yml
.PHP action 지원pcov에 감사드립니다. 범위는 none
에서 pcov
로 변경합니다.내가 변경한 것은 이것pull request에 있다.이것은 Github 기반의 또 다른 구축 작업을 촉발시켰다.
This time surprisingly it took just
1 minute 17 seconds
and consumed393 MB
of memory.
이 작업은 다음과 같이
Execute tests
작업에도 적용됩니다.Xdebug와 마찬가지로 PHPUnit 코드 오버레이율은 PCov 오버레이의 75.65% 행과 68.90% 방법으로 보고됩니다.내 Laravel Framework fork Actions tab에서 다른 테스트 실행을 볼 수 있습니다.
코드 덮어쓰기의 빠른 비교
PHPUnit 테스트가 코드 덮어쓰기와 코드 덮어쓰기 없이 얼마나 오래 걸리는지 빠르게 살펴보겠습니다.
PHPUnit 테스트 실행(PHP 7.4 Linux)
시간을 소모하다
메모리 소모
무보험
33초
257 MB
XDebug 오버레이율
2분 34초(154초)
395 MB
Pcov 적용 범위
1분 17초(77초)
393MB
It is very clear that Pcov took half the time as Xdebug and even consumed lesser memory. PHPUnit code coverage with Pcov took 77 seconds and with Xdebug took double of that at 154 seconds.
docker 용기에서 로컬로 실행하는 동안 결과가 매우 다르다.Xdebug의 경우 이들 Laravel 프레임워크 테스트는 15분 15초(403MB), Pcov 드라이버를 사용하는 테스트는 3분 25초(399MB)가 소요됩니다.
Pcov was 4.43 times faster on my local machine inside a docker container.
저뿐만 아니라 Xdebug 대신 PCov로 코드 커버율을 5배 높였다고 보고했습니다.순수 숫자에 대해 말하자면 나는 테스트를 실시했는데 그 중에서 Xdebug 테스트
17 seconds
를 사용했고 PCov 테스트1 second
를 사용했다.그것은 Xdebug보다 17배 빠르지만, 이것은 Xdebug와 Pcov의 코드 커버율을 비교하는 표준이 되어서는 안 된다.PHPDbg는
PHP Github action
에서 사용할 수 없기 때문에 옵션으로 사용하지 않았습니다.Xdebug와 Pcov 사이를 빠르게 전환하려면 본문guide을 읽으십시오.결론
PHPUnit 코드 범위는 일반적으로 Xdebug과 결합됩니다.XDebug의 코드 수렴 보고 속도가 느린 것이 문제입니다.PCov는 디버깅이 아닌 PHPUnit 코드 덮어쓰기를 위해 만들어졌으며, 코드 수집 덮어쓰기를 더욱 빠르게 한다.
If you want to speed up your code coverage and save time on your CI builds use Pcov in place of Xdebug. You will surely like the time saved after the process is done. Happy faster testing and coverage reports!
Reference
이 문제에 관하여(Pcov를 사용하여 Xdebug보다 2배 이상 빠른 PHPUnit 코드 덮어쓰기 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/geshan/how-to-make-phpunit-code-coverage-2-times-faster-with-pcov-compared-to-xdebug-48n0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)