커버리지 리포팅
GitLab v19.1Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
coverage 키워드를 사용하여 테스트 job의 로그 출력에서 커버리지 비율을 추출하고, 머지 리퀘스트 및 분석 화면에 표시할 수 있습니다. 이 키워드는 커버리지 비율만 표시합니다. 테스트 도구의 출력과 일치하는 정규 표현식을 사용하여 job에 coverage 키워드를 추가합니다:
coverage 키워드를 사용하여 테스트 job의 로그 출력에서 커버리지 비율을 추출하고, 머지 리퀘스트 및 분석 화면에 표시할 수 있습니다.
이 키워드는 커버리지 비율만 표시합니다. MR diff에서 라인별 어노테이션은 생성하지 않습니다.
라인 어노테이션을 표시하려면 artifacts:reports:coverage_report를 별도로 구성하세요.
커버리지 리포팅 구성#
커버리지 리포팅을 구성하려면:
-
테스트 도구의 출력과 일치하는 정규 표현식을 사용하여 job에
coverage키워드를 추가합니다:test: script: - pytest --cov coverage: '/TOTAL.*? (100(?:\.0+)?\%|[1-9]?\d(?:\.\d+)?\%)$/' -
여러 job에서 커버리지를 집계하려면 각 job에
coverage키워드를 추가합니다.
커버리지 정규식 패턴#
다음 정규식 패턴은 일반적인 테스트 커버리지 도구의 출력과 일치합니다. 도구의 출력 형식은 시간이 지남에 따라 변경될 수 있으므로 신중하게 테스트하세요.
Python 및 Ruby
| 도구 | 언어 | 명령어 | 정규식 패턴 |
|---|---|---|---|
| pytest-cov | Python | pytest --cov | /TOTAL.*? (100(?:.0+)?% |
| Simplecov-html | 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+)?% |
Node.js
| 도구 | 명령어 | 정규식 패턴 |
|---|---|---|
| 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[^ |
PHP
| 도구 | 명령어 | 정규식 패턴 |
|---|---|---|
| pest | pest --coverage --colors=never | /Statement coverage[A-Za-z.]\s:\s*([^%]+)/ |
| phpunit | phpunit --coverage-text --colors=never | /^\sLines:\s\d+.\d+%/ |
Go
| 도구 | 명령어 | 정규식 패턴 |
|---|---|---|
| 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+%/ |
.NET 및 PowerShell
| 도구 | 언어 | 명령어 | 정규식 패턴 |
|---|---|---|---|
| OpenCover | .NET | None | /(Visited Points).((.))/ |
| dotnet test | .NET | dotnet test | /Total\s* |
| Pester | PowerShell | None | /Covered (\d{1,3}(. |
Elixir
| 도구 | 명령어 | 정규식 패턴 |
|---|---|---|
| excoveralls | None | /[TOTAL]\s+(\d+.\d+)%/ |
| mix | mix test --cover | /\d+.\d+%\s+ |
커버리지 확인 승인 규칙 추가#
DETAILS: Tier: Premium, Ultimate
프로젝트의 테스트 커버리지를 낮추는 머지 리퀘스트에 대해 특정 사용자 또는 그룹의 승인을 요구할 수 있습니다.
사전 조건:
- 커버리지 리포팅을 구성합니다.
Coverage-Check 승인 규칙을 추가하려면:
-
상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 Settings > Merge requests를 선택합니다.
-
Merge request approvals 아래에서 다음 중 하나를 수행합니다:
Coverage-Check 승인 규칙 옆에서 Enable을 선택합니다.
-
수동 설정의 경우 Add approval rule을 선택한 후 Rule name으로
Coverage-Check를 입력합니다. -
Target branch를 선택합니다.
-
Required number of approvals 수를 설정합니다.
-
승인을 제공할 Users 또는 Groups를 선택합니다.
-
Save changes를 선택합니다.
Coverage-Check 승인 규칙은 머지 베이스 파이프라인에 커버리지 데이터가 없을 때 승인을 요구합니다.
머지 리퀘스트가 전체 커버리지를 향상시키는 경우에도 마찬가지입니다.
커버리지 기록 보기#
시간 경과에 따라 프로젝트 또는 그룹의 커버리지 추이를 추적할 수 있습니다.
프로젝트의 경우#
-
상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.
-
왼쪽 사이드바에서 Analyze > Repository analytics를 선택합니다.
-
드롭다운 목록에서 기록 데이터를 보고 싶은 job을 선택합니다.
-
선택 사항. 데이터를 다운로드하려면 **Download raw data (.csv)**를 선택합니다.
그룹의 경우#
DETAILS: Tier: Premium, Ultimate
-
상단 바에서 Search or go to를 선택하고 그룹을 찾습니다.
-
왼쪽 사이드바에서 Analyze > Repository analytics를 선택합니다.
-
선택 사항. 데이터를 다운로드하려면 **Download historic test coverage data (.csv)**를 선택합니다.
커버리지 배지 표시#
프로젝트에 커버리지 배지를 추가하려면 테스트 커버리지 리포트 배지를 참조하세요.
문제 해결#
커버리지 리포팅을 사용할 때 다음과 같은 문제가 발생할 수 있습니다.
MR 위젯에 커버리지 비율이 표시되지 않는 경우#
coverage 키워드는 정규 표현식을 사용하여 job의 로그 출력에서 비율을 추출합니다.
비율이 표시되지 않는 경우:
-
정규식이 도구의 실제 출력과 일치하는지 확인합니다. job 로그에서 한 줄을 복사하여 정규식에 대해 테스트해보세요.
-
일부 도구는 정규식 매칭을 방해하는 ANSI 색상 코드를 출력합니다. 도구에서 색상 출력 비활성화를 지원하지 않는 경우, 파싱 전에 코드를 제거합니다:
lein cloverage | perl -pe 's/\e\[?.*?[\@-~]//g' -
job이 성공적으로 완료되었는지 확인합니다. 커버리지는 성공한 job에서만 추출됩니다.
-
하위 파이프라인의 커버리지 출력은 기록되지 않습니다. 자세한 내용은 이슈 280818을 참조하세요.
coverage 키워드는 MR 위젯에 비율만 표시합니다. diff의 라인별 어노테이션을 보려면
artifacts:reports:coverage_report를 별도로 구성하세요.