커버리지 리포팅

커버리지 리포팅 (Coverage reporting)

테스트 job의 로그 출력에서 커버리지 백분율을 추출해서 MR과 분석 화면에 표시하고 싶다면, coverage 키워드를 사용해요. 이 키워드는 백분율만 보여주고, MR diff에 라인별 주석을 만들지는 않습니다. 라인 주석을 표시하려면 artifacts:reports:coverage_report를 별도로 구성해야 해요.

출처: 문서

본문

  • 티어(Tier): Free, Premium, Ultimate
  • 제공 방식(Offering): GitLab.com, GitLab Self-Managed, GitLab Dedicated

커버리지 리포팅 구성하기

커버리지 리포팅을 구성하는 방법:

  1. 테스트 도구의 출력과 일치하는 정규 표현식으로 job에 coverage 키워드를 추가해요: test: script: - pytest --cov coverage: '/TOTAL.*? (100(?:\\.0+)?\\%|[1-9]?\\d(?:\\.\\d+)?\\%)$/'
  2. 여러 job의 커버리지를 합치려면 각 job에 coverage 키워드를 추가해요.

커버리지 정규 표현식 패턴

다음 정규 표현식 패턴은 흔한 테스트 커버리지 도구의 출력과 일치해요. 도구 출력 형식은 시간이 지나며 변할 수 있으니 신중하게 테스트해 보세요.

Python과 Ruby

도구 언어 명령 정규 표현식 패턴
pytest-cov Python pytest --cov /TOTAL.*? (100(?:\\.0+)?\\%\|[1-9]?\\d(?:\\.\\d+)?\\%)$/
SimpleCov Ruby rspec spec /Line\\sCoverage:\\s\\d+\\.\\d+%/

C/C++와 Rust

도구 언어 명령 정규 표현식 패턴
gcovr C/C++ gcovr /^TOTAL.*\\s+(\\d+\\%)$/
Tarpaulin Rust cargo tarpaulin /^\\d+.\\d+% coverage/

Java와 JVM

도구 언어 명령 정규 표현식 패턴
JaCoCo Java/Kotlin ./gradlew test jacocoTestReport /Total.*?([0-9]{1,3})%/
scoverage Scala sbt coverage test coverageReport /(?i)total.*? (100(?:\\.0+)?\\%\|[1-9]?\\d(?:\\.\\d+)?\\%)$/

Node.js

도구 명령 정규 표현식 패턴
tap tap --coverage-report=text-summary /^Statements\\s*:\\s*([^%]+)/
nyc nyc npm test /All files[^\\x7c]*\\x7c[^\\x7c]*\\s+([\\d\\.]+)/
Jest jest --ci --coverage /All files[^\\x7c]*\\x7c[^\\x7c]*\\s+([\\d\\.]+)/
node:test node --experimental-test-coverage --test /all files[^\\x7c]*\\x7c[^\\x7c]*\\s+([\\d\\.]+)/

PHP

도구 명령 정규 표현식 패턴
Pest pest --coverage --colors=never /Statement coverage[A-Za-z\\.*]\\s*:\\s*([^%]+)/
PHPUnit phpunit --coverage-text --colors=never /^\\s*Lines:\\s*\\d+.\\d+\\%/

Go

도구 명령 정규 표현식 패턴
go test (단일) go test -cover /coverage: \\d+.\\d+% of statements/
go test (프로젝트) go test -coverprofile=cover.profile && go tool cover -func cover.profile /total:\\s+\\(statements\\)\\s+\\d+.\\d+%/

.NET과 PowerShell

도구 언어 명령 정규 표현식 패턴
OpenCover .NET 없음 /(Visited Points).*\\((.*)\\)/
dotnet test .NET dotnet test /Total\\s*\\x7c*\\s(\\d+(?:\\.\\d+)?)/
Pester PowerShell 없음 /Covered \\d{1,3}[.,]?\\d{0,2}%/

Elixir

도구 명령 정규 표현식 패턴
ExCoveralls 없음 /\\[TOTAL\\]\\s+(\\d+\\.\\d+)%/
Mix mix test --cover /\\d+.\\d+\\%\\s+\\x7c\\s+Total/

커버리지 체크 승인 규칙 추가하기

  • 티어(Tier): Premium, Ultimate

프로젝트의 테스트 커버리지를 낮추는 MR을 특정 사용자나 그룹이 승인하도록 요구할 수 있어요.

전제 조건:

  • 커버리지 리포팅을 구성해 두세요.

Coverage-Check 승인 규칙을 추가하는 방법:

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾아요.
  2. 왼쪽 사이드바에서 Settings > Merge requests를 선택해요.
  3. Merge request approvals 아래에서 다음 중 하나를 해요: - Coverage-Check 승인 규칙 옆에서 Enable을 선택하거나, - 수동 설정의 경우 Add approval rule을 선택하고 Rule nameCoverage-Check를 입력해요.
  4. Target branch를 선택해요.
  5. Required number of approvals의 수를 설정해요.
  6. 승인을 제공할 Users 또는 Groups를 선택해요.
  7. Save changes를 선택해요.

Coverage-Check 승인 규칙은 MR이 전반적 커버리지를 개선하더라도, 머지 베이스 파이프라인에 커버리지 데이터가 없으면 승인을 요구해요.

커버리지 이력 확인하기

프로젝트나 그룹의 커버리지 추세를 시간에 따라 추적할 수 있어요.

프로젝트 기준

  1. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾아요.
  2. 왼쪽 사이드바에서 Analyze > Repository analytics를 선택해요.
  3. 드롭다운 목록에서 이력 데이터를 확인할 job을 선택해요.
  4. 선택 사항. 데이터를 다운로드하려면 **Download raw data (.csv)**를 선택해요.

그룹 기준

  • 티어(Tier): Premium, Ultimate
  1. 상단 바에서 Search or go to를 선택하고 그룹을 찾아요.
  2. 왼쪽 사이드바에서 Analyze > Repository analytics를 선택해요.
  3. 선택 사항. 데이터를 다운로드하려면 **Download historic test coverage data (.csv)**를 선택해요.

커버리지 배지 표시하기

프로젝트에 커버리지 배지를 추가하려면 테스트 커버리지 리포트 배지 문서를 참고하세요.

문제 해결 (Troubleshooting)

커버리지 리포팅을 다룰 때 다음 문제가 생길 수 있어요.

MR 위젯에 커버리지 백분율이 표시되지 않아요

coverage 키워드는 정규 표현식으로 job의 로그 출력에서 백분율을 추출해요. 백분율이 표시되지 않으면:

  • 정규 표현식이 도구의 실제 출력과 일치하는지 확인하세요. job 로그에서 한 줄을 복사해서 정규 표현식에 대해 테스트해 보세요.
  • 일부 도구는 정규 표현식 일치를 깨뜨리는 ANSI 색상 코드를 출력해요. 도구가 색상 출력 끄기를 지원하지 않으면 파싱 전에 코드를 제거하세요: lein cloverage | perl -pe 's/\\e\\[?.*?[\\@-~]//g'
  • job이 성공적으로 완료됐는지 확인하세요. 커버리지는 성공한 job에서만 추출돼요.
  • 자식 파이프라인(child pipeline)의 커버리지 출력은 기록되지 않아요. 자세한 내용은 issue 280818을 참고하세요.

coverage 키워드는 MR 위젯에 백분율만 표시해요. diff에 라인별 주석을 표시하려면 artifacts:reports:coverage_report를 별도로 구성하세요.

더 알아보기 (Learn more)