Bazel을 사용한 코드 적용 범위

문제 신고 소스 보기 1박 · 7.2 · 7.1 · 7.0 · 6.5 · 6.4

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 유틸리티 (인코브 유틸리티의 일부)를 프로젝트)를 사용하여 웹에서 볼 수 있는 보고서를 생성합니다. 브라우저:

genhtml --output genhtml "$(bazel info output_path)/_coverage/_coverage_report.dat"

genhtml는 소스 코드도 읽어서 누락된 주석을 추가합니다. 포함할 수 있습니다. 이 작업을 수행하려면 genhtml는 bazel 프로젝트의 루트에서 실행됩니다.

결과를 보려면 다음과 같이 생성된 index.html 파일을 열기만 하면 됩니다. genhtml 디렉터리에 액세스할 수 있습니다.

genhtml 도구 또는 lcov 적용 형식(LVC 프로젝트 참고)

원격 실행

원격 테스트 실행으로 실행하는 경우 현재 몇 가지 주의사항이 있습니다.

  • 보고서 조합 작업은 아직 원격으로 실행할 수 없습니다. 이것은 Bazel이 커버리지 출력 파일을 그래프 (이 문제 참조)가 포함되어 있으므로 조합 작업에 대한 입력으로 올바르게 처리되지 않을 수 있습니다. 받는사람 이 문제를 해결하려면 --strategy=CoverageReport=local를 사용하세요.
    • 참고: 대신 --strategy=CoverageReport=local,remote(Bazel이 설정된 경우) local,remote을 사용해 봅니다.
  • --remote_download_minimal 및 유사 플래그도 사용할 수 없습니다. 발생할 수 있습니다
  • 테스트 시 Bazel이 적용 범위 정보를 생성하지 못함 확인할 수 있습니다 이 문제를 해결하려면 --nocache_test_results는 적용 범위 실행에 맞게 특별히 설정할 수 있습니다. 물론 테스트 시간 측면에서 많은 비용이 발생합니다.
  • --experimental_split_coverage_postprocessing--experimental_fetch_all_coverage_outputs
    • 일반적으로 적용 범위는 테스트 작업의 일부로 실행되며 기본적으로 모든 적용 범위를 리모컨의 출력으로 다시 가져오는 것은 아닙니다. 실행할 수 있습니다 이 플래그는 기본값을 재정의하고 커버리지 데이터 자세한 내용은 이 문제를 참고하세요. 확인하세요.

언어별 구성

자바

자바는 기본 구성으로 즉시 작동합니다. 이 bazel 도구 모음에는 원격 실행을 지원합니다

Python

rules_python 적용 범위 문서를 참조하세요. 을 참조하세요.