코드 커버리지
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
코드 커버리지를 구성하여 소스 코드의 얼마나 많은 부분이 테스트로 커버되는지 추적하고 시각화하세요. coverage 키워드를 사용하여 테스트 커버리지를 모니터링하고 머지 리퀘스트에서 커버리지 요구 사항을 강제합니다. 커버리지 보고를 사용하면 다음을 수행할 수 있습니다:
코드 커버리지를 구성하여 소스 코드의 얼마나 많은 부분이 테스트로 커버되는지 추적하고 시각화하세요. 다음을 수행할 수 있습니다:
coverage키워드를 사용하여 전체 커버리지 지표와 추세를 추적합니다.artifacts:reports:coverage_report키워드를 사용하여 줄별 커버리지를 시각화합니다.
커버리지 보고 구성#
coverage 키워드를 사용하여 테스트 커버리지를 모니터링하고 머지 리퀘스트에서 커버리지 요구 사항을 강제합니다.
커버리지 보고를 사용하면 다음을 수행할 수 있습니다:
- 머지 리퀘스트에 전체 커버리지 비율을 표시합니다.
- 여러 테스트 작업의 커버리지를 집계합니다.
- 커버리지 검사 승인 규칙을 추가합니다.
- 시간에 따른 커버리지 추세를 추적합니다.
커버리지 보고를 구성하려면:
-
파이프라인 구성에
coverage키워드를 추가합니다:test-unit: script: - coverage run unit/ coverage: '/TOTAL.+ ([0-9]{1,3}%)/' test-integration: script: - coverage run integration/ coverage: '/TOTAL.+ ([0-9]{1,3}%)/' -
테스트 출력 형식에 맞게 정규 표현식(regex)을 구성합니다. 일반적인 패턴은 커버리지 regex 패턴을 참조하세요.
-
여러 작업의 커버리지를 집계하려면 포함할 각 작업에
coverage키워드를 추가합니다. -
선택 사항. 커버리지 검사 승인 규칙을 추가합니다.
커버리지 regex 패턴#
다음 샘플 regex 패턴은 일반적인 테스트 커버리지 도구의 커버리지 출력을 파싱하도록 설계되었습니다.
regex 패턴을 신중하게 테스트하세요. 도구 출력 형식은 시간이 지남에 따라 변경될 수 있으며, 이러한 패턴은 더 이상 예상대로 작동하지 않을 수 있습니다.
| 도구 | 언어 | 명령 | Regex 패턴 |
|---|---|---|---|
| pytest-cov | Python | pytest --cov |
/TOTAL.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/ |
| Simplecov-html | Ruby | rspec spec |
/Line\sCoverage:\s\d+\.\d+%/ |
| 도구 | 언어 | 명령 | Regex 패턴 |
|---|---|---|---|
| gcovr | C/C++ | gcovr |
/^TOTAL.*\s+(\d+\%)$/ |
| tarpaulin | Rust | cargo tarpaulin |
/^\d+.\d+% coverage/ |
| 도구 | 언어 | 명령 | Regex 패턴 |
|---|---|---|---|
| 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+)?\%)$/ |
| 도구 | 명령 | Regex 패턴 |
|---|---|---|
| tap | tap --coverage-report=text-summary |
/^Statements\s*:\s*([^%]+)/ |
| nyc | nyc npm test |
`/All files[^|]*\ |
| jest | jest --ci --coverage |
`/All files[^|]*\ |
| node:test | node --experimental-test-coverage --test |
`/all files[^|]*\ |
| 도구 | 명령 | Regex 패턴 |
|---|---|---|
| pest | pest --coverage --colors=never |
/Statement coverage[A-Za-z\.*]\s*:\s*([^%]+)/ |
| phpunit | phpunit --coverage-text --colors=never |
/^\s*Lines:\s*\d+.\d+\%/ |
| 도구 | 명령 | Regex 패턴 |
|---|---|---|
| go test (single) | go test -cover |
/coverage: \d+.\d+% of statements/ |
| go test (project) | go test -coverprofile=cover.profile && go tool cover -func cover.profile |
/total:\s+\(statements\)\s+\d+.\d+%/ |
| 도구 | 언어 | 명령 | Regex 패턴 |
|---|---|---|---|
| OpenCover | .NET | 없음 | /(Visited Points).*\((.*)\)/ |
| dotnet test (MSBuild) | .NET | dotnet test |
`/Total\s*\ |
| Pester | PowerShell | 없음 | /Covered (\d{1,3}(\.|,)?\d{0,2}%)/ |
| 도구 | 명령 | Regex 패턴 |
|---|---|---|
| excoveralls | 없음 | /\[TOTAL\]\s+(\d+\.\d+)%/ |
| mix | mix test --cover |
/\d+.\d+\%\s+|\s+Total/ |
커버리지 시각화#
artifacts:reports:coverage_report 키워드를 사용하여 머지 리퀘스트에서 어떤 특정 코드 줄이 테스트로 커버되는지 확인합니다.
다음 형식으로 커버리지 보고서를 생성할 수 있습니다:
- Cobertura: Java, JavaScript, Python, Ruby를 포함한 여러 언어에 사용.
- JaCoCo: Java 프로젝트에만 사용.
커버리지 시각화는 아티팩트 보고서를 사용하여 다음을 수행합니다:
- 와일드카드 경로에서 하나 이상의 커버리지 보고서를 수집합니다.
- 모든 보고서의 커버리지 정보를 결합합니다.
- 결합된 결과를 머지 리퀘스트 diff에 표시합니다.
커버리지 파일은 백그라운드 작업에서 파싱되므로, 파이프라인 완료와 머지 리퀘스트에 시각화가 표시되는 사이에 지연이 있을 수 있습니다.
기본적으로 커버리지 시각화 데이터는 생성 후 일주일이 지나면 만료됩니다.
커버리지 시각화 구성#
커버리지 시각화를 구성하려면:
-
커버리지 보고서를 생성하도록 테스트 도구를 구성합니다.
-
파이프라인에
artifacts:reports:coverage_report구성을 추가합니다:test: script: - run tests with coverage artifacts: reports: coverage_report: coverage_format: cobertura # 또는 jacoco path: coverage/coverage.xml
언어별 구성 세부 정보는 다음을 참조하세요:
자식 파이프라인의 커버리지 보고서#
자식 파이프라인의 커버리지 보고서는 머지 리퀘스트 diff 주석에 나타납니다. 그러나 상위 파이프라인은 자체 작업에 이러한 커버리지 보고서를 사용할 수 없습니다.
상위 파이프라인이 자식 파이프라인의 커버리지 보고서를 가져오는 기능에 대한 지원은 이슈 285100에서 제안되고 있습니다.
커버리지 검사 승인 규칙 추가#
프로젝트의 테스트 커버리지를 줄이는 머지 리퀘스트를 특정 사용자나 그룹이 승인하도록 요구할 수 있습니다.
사전 조건:
Coverage-Check 승인 규칙을 추가하려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Settings > Merge requests를 선택합니다.
- Merge request approvals 아래에서 다음 중 하나를 수행합니다:
Coverage-Check승인 규칙 옆에서 Enable을 선택합니다.- 수동 설정의 경우 Add approval rule을 선택한 다음 Rule name으로
Coverage-Check를 입력합니다.
- Target branch를 선택합니다.
- Number of approvals required를 설정합니다.
- 승인을 제공할 Users 또는 Groups를 선택합니다.
- Save changes를 선택합니다.
Coverage-Check 승인 규칙은 머지 기본 파이프라인에 커버리지 데이터가 없을 때 승인이 필요합니다. 머지 리퀘스트가 전체 커버리지를 향상시키더라도 마찬가지입니다.
커버리지 결과 보기#
파이프라인이 성공적으로 실행된 후, 다음 위치에서 코드 커버리지 결과를 볼 수 있습니다:
-
머지 리퀘스트 위젯: 커버리지 비율과 대상 브랜치와의 비교를 확인합니다.

-
머지 리퀘스트 diff: 어떤 줄이 테스트로 커버되는지 검토합니다. Cobertura 및 JaCoCo 보고서에서 사용 가능합니다.
-
파이프라인 작업: 개별 작업의 커버리지 결과를 모니터링합니다.
커버리지 기록 보기#
프로젝트 또는 그룹의 코드 커버리지 변화를 시간에 따라 추적할 수 있습니다.
프로젝트의 경우#
프로젝트의 코드 커버리지 기록을 보려면:
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 Analyze > Repository analytics를 선택합니다.
- 드롭다운 목록에서 기록 데이터를 볼 작업을 선택합니다.
- 선택 사항. 데이터의 CSV 파일을 보려면 **Download raw data (.csv)**를 선택합니다.
그룹의 경우#
그룹의 모든 프로젝트에 대한 코드 커버리지 기록을 보려면:
- 상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
- 왼쪽 사이드바에서 Analyze > Repository analytics를 선택합니다.
- 선택 사항. 데이터의 CSV 파일을 보려면 **Download historic test coverage data (.csv)**를 선택합니다.
커버리지 배지 표시#
파이프라인 배지를 사용하여 프로젝트의 코드 커버리지 상태를 공유합니다.
프로젝트에 커버리지 배지를 추가하려면 테스트 커버리지 보고서 배지를 참조하세요.
문제 해결#
코드 커버리지에서 색상 코드 제거#
일부 테스트 커버리지 도구는 정규 표현식에서 올바르게 파싱되지 않는 ANSI 색상 코드를 출력합니다. 이로 인해 커버리지 파싱이 실패합니다.
일부 커버리지 도구는 출력에서 색상 코드를 비활성화하는 옵션을 제공하지 않습니다. 이 경우, 커버리지 도구의 출력을 색상 코드를 제거하는 한 줄 스크립트로 파이프합니다.
예를 들면:
lein cloverage | perl -pe 's/\e\[?.*?[\@-~]//g'
