두개의 coverage report 툴은 어떤 기능들을 갖고 있을까
사람들이 주로 사용하는 coverage report 툴은 크게 codecov, coveralls 로 나뉘는 것 같습니다. 개발을 열심히 배우고 있는 저에게는 저 두 툴이 어떻게 다른지, 어떤 상황에서 어떤 툴을 선택해야 하는게 좋은지 몰랐습니다. 그래서 제 개발 멘토님의 조언에 따라 두 툴의 문서를 정독해 보고 정리해 보았습니다.
문서 : https://docs.codecov.io/docs/quick-start 를 통해서 더 자세한 정보를 얻으실 수 있습니다.
Pull Request Comment: codecov 는 pull-request 가 이루어 질 때 coverage 결과를 PR 코맨트로 보여줍니다. 그래프 형식으로 visualization 할 수도 있고, 표 형태로 보여줄 수도 있습니다. 또한 comment 형식이나 내용도 config 파일을 통해서 customization 이 가능합니다. (Github에서 codecov 봇을 repo에서 사용하도록 설정해야 합니다)
Commit Status: PR 하단 부분과 commit 옆에 CI Test 결과와 같이 Codecov 의 coverage 결과도 출력이 되게 되는데, 이때 PR 을 blocking 하는 옵션을 설정할 수 있습니다. 물론 blocking 기준은 config 를 통해서 customization 이 가능합니다. (예: 기존보다 coverage 가 떨어지거나, 특정 threshold 이하로 coverage 가 하락하면 PR Merge 를 Blocking 합니다. )
Merging Report: codecov 는 여러 개로 분리된 테스트 결과를 굉장히 잘 묶어주는 장점이 있습니다. 예를 들어 20개의 도커에서 동시에 테스트가 이루어진다고 했을 때, 20개의 별도의 테스트 결과들을 예쁘게 하나로 취합해 보여주며, 테스트 결과가 전부 수집 되었을 때 사용자에게 slack 을 보내주는 기능 등을 지원합니다.
Flag: 여러개의 테스트가 있을 때 각 테스트에 Flag (e.g., unit, integration, frontend, backend, etc)를 지정하여 각 테스트 역할별로 독립적인 coverage 결과를 볼 수 있습니다. 또는 mono-repo 에서 프로젝트 별로 Flag 를 별도로 지정하여, 프로젝트 별 coverage 를 볼 수 있습니다. 또한 nightly flag 를 이용해서, 특정 테스트 coverage 를 메인 리포트나 README 뱃지 결과에서 제외시킬 수도 있습니다.
Viewing Source Code : 소소코드 레벨에서 어떤 코드가 테스트로 커버되었는지, 어떤 코드가 커버되지 않았는지를 볼 수 있습니다. (초록 라인이 커버 된거, 노랑은 부분 커버, 빨강은 커버되지 않은 거)
가격 : 모든 플랜이 public, private repo를 지원하고, 레포 갯수의 제한도 없습니다. 과금 형식은 인원수로 계산이 되어 지는데 공짜로 5명까지는 팀으로 묶을 수 있고, 5명 이후부터는 1인당 10$ 입니다. 1인당 20$ 짜리 플랜은 enterprise 로 on-premise 형식으로 구동이 가능합니다.
문서: https://docs.coveralls.io/ codecov 보다 문서의 퀄리티와 양이 확연하게 떨어집니다. Language Integration, Custom API, CI setup 이외에 기능들에 대해서는 기술되어 있지 않습니다. 필자도 이 글을 쓰면서 coveralls에 어떤 기능이 있는지 알기 위해 직접 토이 프로젝트에 적용하여 볼 수 밖에 없었습니다.
기능: codecov에서 제공하는 기본적인 기능들(Pull Request Comment, Commit Status, Notification, Viewing Source Code)을 지원합니다. 다만 Customization은 codecov 에 비해 거의 없다시피 할 정도로 부족합니다. 가장 대표적으로 codecov 에서는 codecov.yaml 을 통해 다양한 설정과 customization 이 가능했지만, coveralls의 config 에는 인증을 위한 token 외에는 넣을 수 없습니다.
지원 : Pull Request Comment, Commit Status, Notification, Viewing Source Code
미지원 : Flag, Merging Report, Exclude (path, test, module, branch), Notification Customization, Visualization, On-Premise
가격: public repo 나 인원수에 대한 제한이 있지 않고, private repo 갯수 별로 과금이 달라지는 방식입니다. 인원이 많은 팀이라면 가격 측면에서는 coveralls 가 압도적으로 저렴할 것 같습니다.
기능적인 측면에서는 codecov 가 압도적으로 우수하나, 팀원이 많아질 수록 비용이 많이 들어갑니다.
역시 좋은 솔루션은 괜히 비싼게 아니네요 ㅠㅠ 저는 개인적으로는 개인 프로젝트와 팀 프로젝트에서 모두 codecov를 권장드리지만, 가성비 입장에서는 coveralls도 나쁘지 않은 옵션이라고 생각합니다. 다만 테스트 규모가 엄청나게 커지고 잘 customization 을 해야 한다면 무조건 codecov 가 아닐까 싶습니다.