Bazel에는 coverage로 테스트할 수 있는 저장소에서 코드 적용 범위
보고서를 생성하는 bazel coverage 하위 명령어가 있습니다. 다양한 언어 생태계의 특성으로 인해 특정 프로젝트에서 이 작업을 수행하는 것이 항상 간단하지는 않습니다.
이 페이지에서는 적용 범위 보고서를 만들고 보는 일반적인 프로세스를 설명하며 구성이 잘 알려진 언어에 대한 언어별 참고사항도 제공합니다. 먼저 일반 섹션을 읽은 다음 특정 언어의 요구사항을 읽는 것이 좋습니다.
많은 맞춤설정이 가능하지만 이 문서에서는
lcov 보고서 생성 및 사용에 중점을 둡니다. 현재 가장 잘 지원되는 경로입니다.
적용 범위 보고서 만들기
준비
적용 범위 보고서를 만드는 기본 워크플로에는 다음이 필요합니다.
- 테스트 타겟이 있는 기본 저장소
- 언어별 코드 적용 범위 도구가 설치된 툴체인
- 올바른 '계측' 구성
처음 두 가지는 언어별로 다르며 대부분 간단하지만 후자는 복잡한 프로젝트에서 더 어려울 수 있습니다.
이 경우 '계측'은 특정 타겟에 사용되는 적용 범위 도구를 나타냅니다. Bazel을 사용하면 계측이 사용 설정된 테스트 타겟의 필터를 지정하는
--instrumentation_filter
플래그를 사용하여 특정 파일 하위 집합에 대해 이 기능을 사용 설정할 수 있습니다. 테스트에 계측을 사용 설정하려면
--instrument_test_targets
플래그가 필요합니다.
기본적으로 bazel은 타겟 패키지를 일치시키려고 시도하고 관련 필터를 INFO 메시지로 출력합니다.
적용 범위 실행
적용 범위 보고서를 생성하려면 bazel coverage
--combined_report=lcov
[target]을 사용하세요. 이렇게 하면 타겟의 테스트가 실행되어 각 파일의 lcov 형식으로 적용 범위 보고서가 생성됩니다.
완료되면 bazel은 생성된 모든
적용 범위 파일을 수집하고 하나로 병합하는 작업을 실행합니다. 그런 다음 최종적으로
$(bazel info
output_path)/_coverage/_coverage_report.dat 아래에 생성됩니다.
테스트가 실패해도 적용 범위 보고서가 생성되지만 실패한 테스트에는 적용되지 않습니다. 통과한 테스트만 보고됩니다.
적용 범위 보기
적용 범위 보고서는 사람이 읽을 수 없는 lcov 형식으로만 출력됩니다. 여기에서 genhtml 유틸리티 (lcov
프로젝트의 일부)를 사용하여 웹
브라우저에서 볼 수 있는 보고서를 생성할 수 있습니다.
genhtml --branch-coverage --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"
genhtml은 소스 코드도 읽어 이러한 파일에서 누락된 적용 범위를 주석 처리합니다. 이 작업을 수행하려면 genhtml이 bazel 프로젝트의 루트에서 실행되어야 합니다.
결과를 보려면 웹브라우저에서 genhtml 디렉터리에 생성된 index.html 파일을 엽니다.
genhtml 도구 또는
lcov 적용 범위 형식에 관한 추가 도움말 및 정보는 lcov 프로젝트를 참고하세요.
언어별 구성
다음 섹션에서는 Bazel로 코드 적용 범위를 설정하기 위한 언어별 고려사항을 자세히 설명합니다.
C++
Linux
C++ 적용 범위는 기본 구성으로 즉시 사용할 수 있습니다.
macOS
GCOV_PREFIX_STRIP의 기본값은 거의 확실히 잘못되었으며 올바른 값은 설정에 따라 다르므로 수동으로 조정해야 합니다.
값이 잘못되면 적용 범위 데이터가 발견되지 않습니다.
GCOV_PREFIX_STRIP=10
bazel coverage //foo:foo_test --test_env=GCOV_PREFIX_STRIP=10`을 설정하는 예
자바
자바는 기본 구성으로 즉시 사용할 수 있습니다. bazel 툴체인에는 JUnit을 비롯하여 원격 실행에 필요한 모든 항목이 포함되어 있습니다.
Python
Python에서 적용 범위 지원을 사용 설정하는 데 필요한 추가 단계는 rules_python 적용 범위 문서
를 참고하세요.