PHPUnit의 실행을 빨리 끝내고 싶을 때

2789 단어 PHPUnitPHP
자주 있는 것입니다만, PHPUnit로 테스트를 쓰고 있는 경우, 테스트 케이스가 늘어나면 서서히 실행 속도가 신경이 쓰입니다. 테스트의 양이 늘어나 완료까지의 시간이 단순히 늘어나기 때문입니다.

그럴 때, 어쨌든 테스트를 빨리 끝내기 위한 tips입니다.

테스트할 양을 줄이기



로컬로 개발할 때마다 모든 테스트를 실행할 필요가 없을 것입니다. 그럴 때는 테스트하는 양 자체를 줄이자.
filter 또는 group 옵션을 사용하여 특정 테스트만 실행하면 실행 테스트의 총량이 줄어들고 완료까지의 시간이 짧아집니다.

참고 : PHPUnit으로 지정된 테스트 만 실행

또한 PhpStorm과 같은 편집기 기능을 사용하면 특정 테스트를 실행할 수 있습니다.

참고 : Testing with PHPUnit

커버리지를 측정하지 않음


filtergroup 이외에 실행 시간을 단축할 수 있는 옵션이 하나 있습니다.
--no-coverage 선택 사항입니다.

개발 환경이나 CI 환경이면, 디버그 용도이거나 코드 커버리지의 계측을 위해 XDEBUG 가 인스톨 되고 있다고 생각합니다. 이 때, 코드 커버리지의 계측이 디폴트로 유효하게 되어 있으면, 매회 커버리지의 계측을 실시하기 위해 시간이 걸립니다.
아래의 예라면 옵션이 없는 경우 5분, 옵션을 붙인 경우 35초 정도. 8배 이상 속도에 차이가 있는 것을 알 수 있습니다.

옵션이 없는 경우


옵션이 있는 경우


디폴트의 ​​변경을 하고 싶지만 장난 없는 사정으로 곧바로 변경할 수 없다.

CI에서 궁리하고 출시를 가속화



또, CI로 커버리지를 계측해 Coveralls 이나 Codecov 단축이 가능합니다.

CircleCI라면, 특정 브랜치에서 실시하는 테스트용의 처리를 전환해 주면 가능하게 됩니다.

참고
- Configuring CircleCI#branches
- Configuring CircleCI#filters

이 방법을 취하면 같은 환경에서도 옵션의 유무만으로 속도를 개선하는 것이 가능해지므로, 여러 가지의 관리 비용을 줄일 수 있게 된다고 생각합니다. (그 밖에 좋은 방법이 있으면 추기·수정하고 싶습니다)

결론



테스트 시간을 단축하는 방법은 그 밖에, 병렬화하거나 --no-coverage 를 필요할 때만 유효하게 하는 등 있다고 생각합니다. 조직에 따라 환경은 달라질까 생각하기 때문에 필요에 따라 좋은 방법을 폐기 선택할 수 있으면 좋을까 생각합니다.

기타 참고
- PHPUnit의 코드 커버리지가 느리기 때문에 포기하지 않고 병렬 실행을 시도합니다.
- CircleCI에서 master 브랜치만 커버리지를 측정하도록 phpunit 실행

좋은 웹페이지 즐겨찾기