brunch

You can make anything
by writing

C.S.Lewis

by 김준성 Dec 28. 2019

Codecov vs Coveralls

두개의 coverage report 툴은 어떤 기능들을 갖고 있을까

사람들이 주로 사용하는 coverage report 툴은 크게 codecov, coveralls 로 나뉘는 것 같습니다. 개발을 열심히 배우고 있는 저에게는 저 두 툴이 어떻게 다른지, 어떤 상황에서 어떤 툴을 선택해야 하는게 좋은지 몰랐습니다. 그래서 제 개발 멘토님의 조언에 따라 두 툴의 문서를 정독해 보고 정리해 보았습니다.


Codecov

문서 : https://docs.codecov.io/docs/quick-start 를 통해서 더 자세한 정보를 얻으실 수 있습니다. 


Pull Request Comment: codecov 는 pull-request 가 이루어 질  때 coverage 결과를 PR 코맨트로 보여줍니다. 그래프 형식으로 visualization 할 수도 있고, 표 형태로 보여줄 수도 있습니다. 또한 comment 형식이나 내용도 config 파일을 통해서 customization 이 가능합니다. (Github에서 codecov 봇을 repo에서 사용하도록 설정해야 합니다)

Pull Request Comment

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 뱃지 결과에서 제외시킬 수도 있습니다.


Flag 를 이용해서 각 테스트를 분리한 모습

Viewing Source Code : 소소코드 레벨에서 어떤 코드가 테스트로 커버되었는지, 어떤 코드가 커버되지 않았는지를 볼 수 있습니다. (초록 라인이 커버 된거, 노랑은 부분 커버, 빨강은 커버되지 않은 거)


가격 : 모든 플랜이 public, private repo를 지원하고, 레포 갯수의 제한도 없습니다. 과금 형식은 인원수로 계산이 되어 지는데 공짜로 5명까지는 팀으로 묶을 수 있고, 5명 이후부터는 1인당 10$ 입니다. 1인당 20$ 짜리 플랜은 enterprise 로 on-premise 형식으로 구동이 가능합니다. 


Coveralls

문서: 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


coveralls에서 customization 을 할 수 있는 설정. codecov 에 비해 매우 부족함

가격: public repo 나 인원수에 대한 제한이 있지 않고, private repo 갯수 별로 과금이 달라지는 방식입니다. 인원이 많은 팀이라면 가격 측면에서는 coveralls 가 압도적으로 저렴할 것 같습니다.

coveralls 의 가격 정책 (가성비는 좋다!)


결론

기능적인 측면에서는 codecov 가 압도적으로 우수하나, 팀원이 많아질 수록 비용이 많이 들어갑니다.


역시 좋은 솔루션은 괜히 비싼게 아니네요 ㅠㅠ 저는 개인적으로는 개인 프로젝트와 팀 프로젝트에서 모두 codecov를 권장드리지만, 가성비 입장에서는 coveralls도 나쁘지 않은 옵션이라고 생각합니다. 다만 테스트 규모가 엄청나게 커지고 잘 customization 을 해야 한다면 무조건 codecov 가 아닐까 싶습니다.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari