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 project의 일부)를 사용하여 웹브라우저에서 볼 수 있는 보고서를 생성할 수 있습니다.
genhtml --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"
genhtml
는 소스 코드도 읽고 이러한 파일에서 누락된 적용 범위에 주석을 지정합니다. 이렇게 하려면 genhtml
가 bazel 프로젝트의 루트에서 실행되어야 합니다.
결과를 보려면 웹브라우저의 genhtml
디렉터리에서 생성된 index.html
파일을 열기만 하면 됩니다.
genhtml
도구 또는 lcov
커버리지 형식에 관한 추가 도움말 및 정보는 lcov project를 참고하세요.
원격 실행
원격 테스트 실행으로 실행하는 경우 현재 몇 가지 주의사항이 있습니다.
- 보고서 조합 작업은 아직 원격으로 실행할 수 없습니다. Bazel이 범위 출력 파일을 그래프의 일부로 고려하지 않기 때문에 (이 문제 참고) 조합 작업에 대한 입력으로 올바르게 처리할 수 없습니다. 이 문제를 해결하려면
--strategy=CoverageReport=local
를 사용합니다.- 참고: Bazel이 전략을 확인하는 방법으로 인해
local,remote
를 시도하도록 Bazel이 설정된 경우--strategy=CoverageReport=local,remote
와 같은 값을 대신 지정해야 할 수 있습니다.
- 참고: Bazel이 전략을 확인하는 방법으로 인해
--remote_download_minimal
및 유사 플래그는 전자의 결과로 사용할 수 없습니다.- 이전에 테스트가 캐시된 경우 현재 Bazel이 커버리지 정보를 생성하지 못합니다. 이 문제를 해결하기 위해
--nocache_test_results
를 커버리지 실행에 맞게 설정할 수 있지만 이 방법은 테스트 시간 측면에서 많은 비용이 발생합니다. --experimental_split_coverage_postprocessing
및--experimental_fetch_all_coverage_outputs
- 일반적으로 적용 범위는 테스트 작업의 일부로 실행되므로 기본적으로 모든 적용 범위가 원격 실행의 출력으로 다시 제공되지는 않습니다. 이러한 플래그는 기본값을 재정의하고 커버리지 데이터를 가져옵니다. 자세한 내용은 이 문제를 참고하세요.
언어별 구성
자바
자바는 기본 구성으로 즉시 작동해야 합니다. bazel 도구 모음에는 JUnit을 비롯하여 원격 실행에 필요한 모든 것이 포함됩니다.
Python
Python에서 적용 범위 지원을 사용 설정하는 데 필요한 추가 단계는 rules_python
적용 범위 문서를 참조하세요.