Bazel 테스트 인사이트
tuist bazel setup을 통해 연결된 Bazel 워크스페이스(자세한 내용은 Bazel 프로젝트 시작하기 참조).
tuist bazel setup는 .bazelrc.tuist에서 케이스별 보고를 구성하므로, 일반적인 bazel test는 다른 모든 빌드 시스템이 사용하는 동일한 대시보드에 개별 테스트 케이스를 보고합니다:
bazel test //app:tests
격리도 적용하려면 대신 Tuist 래퍼를 통해 테스트를 실행하세요. -- 뒤의 인수는 bazel test로 전달됩니다:
tuist bazel test -- //app:tests
추적 대상#
Tuist는 test.xml 보고서를 파싱하고 Bazel이 각 테스트 타겟에 대해 생성하는 test.log 출력을 캡처한 다음, 이를 공유 테스트 실행 모델로 집계합니다. 각 실행은 다음을 기록합니다:
- 개별 테스트 케이스의 통과, 실패 및 건너뜀 상태와 소요 시간.
- 테스트 타겟, 클래스 및 스위트 구조.
- Bazel이 불안정한 테스트를 재시도하도록 구성된 경우 재시도 시도 횟수.
- 타겟의
test.log에서 캡처된 실패 출력.
테스트 실행, 테스트 케이스 및 개별 테스트 페이지는 모두 Bazel에서도 다른 빌드 시스템과 동일하게 작동합니다.
케이스별 JUnit 보고서 생성#
케이스별 행은 테스트 타겟이 Bazel이 제공하는 $XML_OUTPUT_FILE 경로에 JUnit test.xml을 작성하는지에 따라 달라집니다. 러너가 이를 작성하지 않으면 Bazel은 타겟 이름으로 합성된 단일 케이스 보고서로 대체하며, Tuist는 타겟당 하나의 행(Bazel 타겟으로 라벨링됨)을 표시하고 원본 test.log는 여전히 실행 페이지에서 확인할 수 있습니다.
대부분의 Bazel 테스트 규칙은 이미 실제 test.xml을 생성합니다:
java_test및kt_jvm_test: JUnit이 내장되어 있습니다.- GoogleTest를 사용한
cc_test: 최신 gtest에 대해 컴파일하면 러너가 JUnit을 작성합니다. 이전 설정에서는--gtest_output=xml:$XML_OUTPUT_FILE가 필요합니다. py_test:--junitxml=$XML_OUTPUT_FILE와 함께 pytest를 사용하거나rules_pythonpytest 러너를 사용합니다.go_test:go test -json를gotestsum --junitfile=$XML_OUTPUT_FILE로 파이프하거나 JUnit을 생성하는 헬퍼로 감싸세요.
rules_rust 및 rules_rs의 rust_test는 표준 libtest 하네스를 실행하며, 이는 안정版 Rust에서 JUnit을 작성하지 않습니다. libtest 출력을 파싱하고 JUnit을 $XML_OUTPUT_FILE에 작성하는 스크립트로 테스트 타겟을 감싸면 Tuist에서 케이스별 행을 유지하면서도 동일한 실행이 단일 Bazel 테스트 타겟으로 남습니다.
테스트 식별자#
케이스는 타겟 레이블, 클래스 이름(슈트 이름으로 대체) 및 테스트 이름으로 식별됩니다. 이로 인해 서로 다른 클래스에서 동일한 이름의 메서드가 분리됩니다. 다른 상위 스위트 이름을 사용한 이전 보고서는 기존 식별자 아래에서 이력을 유지합니다. 기존 식별자에 적용된 상태 변경 사항은 새 식별자에 다시 적용해야 하며, 명령은 실패가 기존 식별자와 일치할 때 경고하여 어떤 정책을 이동해야 할지 알려줍니다.
CI 컨텍스트 제공#
Tuist는 Bazel의 빌드 메타데이터에서 git 커밋 및 브랜치 정보를 읽어 동일한 커밋에서의 실행을 환경 간에 비교할 수 있도록 합니다. 대부분의 지속적 통합 시스템은 이를 이미 설정하지만, 그렇지 않은 경우 명시적으로 전달하세요:
tuist bazel test -- \
--build_metadata=CI=true \
--build_metadata=GIT_COMMIT="$GIT_COMMIT" \
--build_metadata=GIT_BRANCH="$GIT_BRANCH" //app:tests
동일한 --build_metadata 플래그는 Bazel 빌드 인사이트 페이지에서 호출 태깅을 위해 설명하는 것이므로, 단일 플래그 세트로 두 표면 모두를 커버합니다.
불안정한 테스트 및 격리#
재시도, 실행 간 불안정성 감지 및 케이스별 격리(음소거 및 건너뛰기)는 모두 tuist bazel test를 통해 작동합니다. 전체 워크플로는 Bazel 불안정한 테스트를 참조하세요.
데이터 보존#
Tuist는 테스트 실행을 생성한 Bazel 호출, 해당 로그 및 대기 중인 테스트 수집 기록을 90일 동안 보관합니다. 테스트 케이스와 해당 실행 이력은 다른 모든 빌드 시스템과 동일한 모델을 사용하며 해당 기간의 적용을 받지 않습니다. 전체 정책은 데이터 보존을 참조하세요.