단위 테스트 보고서

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

CI/CD 파이프라인에 테스트 작업이 포함되어 코드를 확인하는 테스트 작업이 매우 흔합니다. 테스트에 실패하면, 파이프라인도 실패하고 사용자들에게 알림이 전달됩니다. 병합 요청에서 작업 로그를 확인하여 테스트가 실패한 이유를 파악하고 수정해야 합니다.

작업을 설정하여 단위 테스트 보고서를 사용할 수 있으며, GitLab은 해당 보고서를 병합 요청에 표시하여 전체 로그를 확인하지 않고 실패를 식별할 수 있도록 합니다. 단위 테스트 보고서는 현재 JUnit 보고서 형식의 테스트 보고서만 지원합니다.

만약 병합 요청을 사용하지 않지만 작업 로그를 찾아볼 필요 없이 단위 테스트 보고서 출력을 보고 싶다면, 파이프라인 상세보기에서 완전한 단위 테스트 보고서가 이용 가능합니다.

다음의 워크플로우를 고려해보세요:

  1. 기본 브랜치가 매우 견고하고, 프로젝트가 GitLab CI/CD를 사용하며, 파이프라인에 문제가 없음을 나타내고 있습니다.
  2. 팀원 중 한 명이 병합 요청을 제출하여 테스트에 실패하고 파이프라인이 알려진 빨간색 아이콘을 받습니다. 더 자세히 조사하려면, 실패한 테스트의 원인을 파악하기 위해 대부분 수천 줄의 작업 로그를 확인해야 합니다.
  3. 단위 테스트 보고서를 설정하고 즉시 GitLab이 이를 수집하고 병합 요청에 공개합니다. 더 이상 작업 로그를 검색할 필요가 없습니다.
  4. 개발 및 디버깅 워크플로우가 더 간편하고, 빠르며, 효율적으로 됩니다.

작동 방식

먼저, GitLab 러너가 JUnit 보고서 형식의 XML 파일들아티팩트로 GitLab에 업로드합니다. 그런 다음, 병합 요청을 방문하면 GitLab이 헤드 브랜치와 베이스 브랜치의 JUnit 보고서 형식 XML 파일을 비교하기 시작합니다. 여기서:

  • 베이스 브랜치는 대상 브랜치(보통 기본 브랜치)입니다.
  • 헤드 브랜치는 소스 브랜치(각 병합 요청의 최신 파이프라인)입니다.

테스트 요약 패널은 얼마나 많은 테스트가 실패했는지, 오류가 몇 개 있었는지, 그리고 얼마나 많은 것이 수정되었는지를 보여줍니다. 베이스 브랜치의 데이터가 없어 비교를 할 수 없는 경우, 패널은 소스 브랜치의 실패한 테스트 목록만 표시합니다.

결과 유형은 다음과 같습니다:

  • 새로운 실패한 테스트: 베이스 브랜치에서 통과했지만 헤드 브랜치에서 실패한 테스트 케이스들
  • 새로운 오류 발생: 베이스 브랜치에서 통과하였으나 헤드 브랜치에서 테스트 오류로 실패한 테스트 케이스들
  • 기존 실패한 테스트: 베이스 브랜치에서 실패하였고 헤드 브랜치에서도 실패한 테스트 케이스들
  • 해결된 실패: 베이스 브랜치에서 실패하였으나 헤드 브랜치에서 통과한 테스트 케이스들

실패한 테스트 보기

테스트 요약 패널의 각 항목은 테스트 이름과 결과 유형을 보여줍니다. 테스트 이름을 선택하여 실행 시간 및 오류 출력에 대한 세부 정보가 포함된 모달 창을 열 수 있습니다.

테스트 보고서 위젯

실패한 테스트 이름 복사

History

테스트 요약 패널에 실패한 테스트가 나열된 경우에는 실패한 테스트의 이름과 경로를 복사할 수 있습니다. 이름 및 경로를 사용하여 검증을 위해 로컬에서 테스트를 찾아 다시 실행할 수 있습니다.

모든 실패한 테스트의 이름을 복사하려면, 테스트 요약 패널 상단에서 실패한 테스트 복사를 선택하세요. 실패한 테스트는 각 테스트가 공백으로 구분된 문자열로 나열됩니다. 이 옵션은 JUnit 보고서가 실패한 테스트의 <file> 속성을 채우는 경우에만 사용할 수 있습니다.

단일 실패한 테스트의 이름을 복사하려면:

  1. 테스트 요약 패널을 확장하여 테스트 요약 세부 정보 보기를 선택합니다 ().
  2. 검토하려는 테스트를 선택합니다.
  3. 로컬에서 다시 실행할 테스트 이름 복사를 선택합니다 ().

최근 실패 횟수

지난 14일 동안 프로젝트의 기본 브랜치에서 테스트가 실패했다면, 해당 테스트에 대해 지난 14일 동안 {default_branch}에서 {n}번 실패과 같은 메시지가 표시됩니다.

이 계산에는 완료된 파이프라인에서 실패한 테스트가 포함되지만, 차단된 파이프라인은 포함되지 않습니다. Issue 431265은 계산에 차단된 파이프라인도 포함하도록 제안합니다.

설정 방법

병합 요청에서 Unit 테스트 보고서를 활성화하려면 .gitlab-ci.ymlartifacts:reports:junit를 추가하고 생성된 테스트 보고서의 경로를 지정해야 합니다. 보고서는 반드시 .xml 파일이어야 하며, 그렇지 않으면 GitLab이 오류 500을 반환합니다.

다음 Ruby 예시에서는 test 단계의 작업이 실행되고 GitLab이 해당 작업에서 Unit 테스트 보고서를 수집합니다. 작업 실행 후 XML 보고서가 artifact로 GitLab에 저장되며, 결과는 병합 요청 위젯에 표시됩니다.

## rspec로 JUnit 보고서 형식의 XML 파일 생성에 https://github.com/sj26/rspec_junit_formatter를 사용합니다.
ruby:
  stage: test
  script:
    - bundle install
    - bundle exec rspec --format progress --format RspecJunitFormatter --out rspec.xml
  artifacts:
    when: always
    paths:
      - rspec.xml
    reports:
      junit: rspec.xml

Unit 테스트 보고서 출력 파일을 탐색할 수 있게 하려면 예시처럼 artifacts:paths 키워드로 이를 포함해야 합니다. 작업이 실패해도(예: 테스트가 통과되지 않은 경우) 보고서를 업로드하려면 artifacts:when:always 키워드를 사용하십시오.

JUnit 보고서 형식의 XML 파일에는 동일한 이름과 클래스를 가진 여러 테스트를 포함할 수 없습니다.

GitLab 15.0 이하 버전에서는 parallel:matrix 작업으로부터의 테스트 보고서가 집계되어 일부 보고서 정보가 표시되지 않을 수 있습니다. GitLab 15.1 이상에서는 이 버그가 수정되어 모든 보고서 정보가 표시됩니다.

GitLab에서 Unit 테스트 보고서 보기

  • GitLab 12.5에 도입되었지만 기본으로 비활성화된 기능 플래그 (junit_pipeline_view)가 있습니다.
  • GitLab 13.3에서 기능 플래그가 제거되었습니다.

파이프라인의 일부로 JUnit 보고서 형식의 XML 파일이 생성되고 업로드되면, 이러한 보고서는 파이프라인 세부 정보 페이지 내에서 볼 수 있습니다. 해당 페이지의 Tests 탭에는 XML 파일에서 보고된 테스트 스위트 및 케이스 목록이 표시됩니다.

테스트 보고서 위젯

모든 알려진 테스트 스위트를 볼 수 있으며, 각각을 선택하여 해당 스위트를 구성하는 케이스를 포함한 자세한 정보를 볼 수 있습니다.

또한 GitLab API를 통해 보고서를 검색할 수도 있습니다.

Unit 테스트 보고서 구문 분석 오류

  • GitLab 13.10에 도입되었습니다.

JUnit 보고서 XML 파일의 구문 분석으로 오류가 발생하면 해당 작업 이름 옆에 표시 기호가 나타납니다. 해당 아이콘 위로 마우스를 올리면 툴팁에서 파서 오류가 표시됩니다. 그룹화된 작업에서 여러 구문 분석 오류가 발생한 경우, GitLab은 해당 그룹에서 첫 번째 오류만 표시합니다.

오류가 있는 테스트 보고서

테스트 케이스 구문 분석 제한 사항은 Unit 테스트 보고서 당 최대 테스트 케이스를 참조하십시오.

GitLab은 JUnit 보고서의 매우 큰 노드를 구문 분석하지 않습니다. 이를 선택 사항으로 만드는Kafka Connect REST API 문제가 하나 있습니다.

문제 해결

테스트 보고서가 비어 있는 것처럼 보임

단위 테스트 보고서는 병합 요청에서 확인할 때 비어 있는 것으로 보일 수 있습니다. 보고서를 포함하고 있는 artifact가 만료될 경우입니다. 이 artifact가 너무 일찍 만료되는 경우, 보고서 artifact에 대해 더 긴 expire_in 값을 설정하세요.

또는 새로운 파이프라인을 실행하여 새 보고서를 생성할 수 있습니다.