단위 테스트 보고서
많은 CI/CD 파이프라인에는 코드를 확인하는 테스트 작업이 포함되어 있는 것이 매우 일반적입니다. 테스트가 실패하면 파이프라인도 실패하고 사용자들에게 통지됩니다. Merge Request을 작업하는 사람은 테스트가 실패한 곳을 확인하여 수정해야 합니다.
작업을 구성하여 단위 테스트 보고서를 사용할 수 있으며, GitLab은 통합 요청에 보고서를 표시하여 전체 로그를 확인하지 않고도 실패를 식별할 수 있게 합니다. 단위 테스트 보고서는 현재 JUnit 보고서 형식의 테스트 보고서만 지원합니다.
만약 통합 요청을 사용하지 않더라도 작업 로그를 검색하지 않고도 단위 테스트 보고서 출력을 보고 싶다면, 파이프라인 상세 보기에서 전체 단위 테스트 보고서를 볼 수 있습니다.
다음 작업 흐름을 고려해 보세요:
- 기본 브랜치가 매우 안정적이고 프로젝트가 GitLab CI/CD를 사용하며 파이프라인에서 문제가 없음을 나타내고 있습니다.
- 팀원이 Merge Request을 제출하면 테스트가 실패하고 파이프라인이 알려진 빨간 아이콘을 표시합니다. 더 조사하려면 종종 수천 줄에 달하는 실패 테스트의 원인을 찾기 위해 작업 로그를 확인해야 합니다.
- 단위 테스트 보고서를 구성하면 즉시 GitLab이 이를 수집하고 통합 요청에 노출시킵니다. 더 이상 작업 로그를 검색할 필요가 없습니다.
- 개발 및 디버깅 작업 흐름이 더욱 쉽고 빠르며 효율적으로 됩니다.
작동 방식
먼저, GitLab Runner는 JUnit 보고서 형식 XML 파일을 GitLab에 artifacts로 모두 업로드합니다. 그런 다음 통합 요청에 방문하면 GitLab은 head와 base 브랜치의 JUnit 보고서 형식 XML 파일을 비교하기 시작합니다.
- base 브랜치는 대상 브랜치(보통 기본 브랜치)입니다.
- head 브랜치는 소스 브랜치(각 Merge Request의 최신 파이프라인)입니다.
테스트 요약 패널은 얼마나 많은 테스트가 실패했는지, 얼마나 많은 에러가 있었는지, 그리고 얼마나 많은 테스트가 수정되었는지를 보여줍니다. 만약 기본 브랜치의 데이터를 사용할 수 없어서 비교를 할 수 없는 경우, 패널은 소스 브랜치의 실패한 테스트 디렉터리만 표시합니다.
결과의 종류는 다음과 같습니다:
- 새로운 실패 테스트: 기본 브랜치에서 통과되었지만 head 브랜치에서 실패한 테스트 케이스입니다.
- 새로운 발생한 에러: 기본 브랜치에서 통과되었지만 head 브랜치에서 테스트 에러로 인해 실패한 테스트 케이스입니다.
- 이미 있는 실패: 기본 브랜치에서 실패하고 head 브랜치에서도 실패한 테스트 케이스입니다.
- 해결된 실패: 기본 브랜치에서 실패했지만 head 브랜치에서 통과한 테스트 케이스입니다.
실패한 테스트 보기
테스트 요약 패널의 각 항목은 테스트 이름과 결과 유형을 보여줍니다. 테스트 이름을 선택하면 실행 시간 및 오류 출력에 대한 세부 정보가 있는 모달 창이 열립니다.
실패한 테스트명 복사하기
테스트 요약 패널에 실패한 테스트가 나열된 경우에는 실패한 테스트의 이름과 경로를 복사할 수 있습니다. 이름과 경로를 사용하여 로컬에서 검증을 위해 테스트를 찾고 다시 실행할 수 있습니다.
모든 실패한 테스트의 이름을 복사하려면 테스트 요약 패널 상단에서 실패한 테스트 복사를 선택합니다. 실패한 테스트는 테스트가 공간으로 구분된 문자열로 표시됩니다. 이 옵션은 JUnit 보고서가 실패한 테스트의 <file>
속성을 채우는 경우에만 사용할 수 있습니다.
단일 실패한 테스트의 이름을 복사하려면:
- 테스트 요약 패널을 확장하여 테스트 요약 세부 정보 보기를 선택합니다().
- 검토하려는 테스트를 선택합니다.
- 로컬에서 다시 실행할 테스트명 복사를 선택합니다().
최근 실패 횟수
프로젝트의 기본 브랜치에서 지난 14일 동안 테스트가 실패했다면, 해당 테스트에 대해 지난 14일 동안 {default_branch}에서 {n} 번 실패
와 같은 메시지가 표시됩니다.
이 계산에는 완료된 파이프라인의 실패 테스트가 포함되지만 차단된 파이프라인은 포함되지 않습니다. Issue 431265은 계산에 차단된 파이프라인도 포함하도록 제안하고 있습니다.
설정 방법
통합 요청에서 단위 테스트 보고서를 활성화하려면 .gitlab-ci.yml
에 artifacts:reports:junit
를 추가하고 생성된 테스트 보고서의 경로를 지정해야 합니다. 보고서는 .xml
파일이어야 하며, 그렇지 않을 경우 GitLab은 Error 500을 반환합니다.
다음 Ruby 예제에서는 test
단계의 작업이 실행되고 GitLab이 해당 단위 테스트 보고서를 수집합니다. 작업이 실행된 후 XML 보고서가 artifact로서 GitLab에 저장되며, 그 결과는 통합 요청 위젯에서 표시됩니다.
## https://github.com/sj26/rspec_junit_formatter를 사용하여 rspec로 JUnit 보고서 형식 XML 파일을 생성
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
단위 테스트 보고서 출력 파일을 브라우저에서 볼 수 있도록 하려면, 예제에 표시된 것처럼 artifacts:paths
키워드로 경로를 포함해야 합니다. (작업이 실패하는 경우에도 보고서를 업로드하려면, 예를 들어 테스트가 통과되지 않는 경우) artifacts:when:always
키워드를 사용합니다.
동일한 이름과 클래스를 가진 다중의 테스트를 JUnit 보고서 형식 XML 파일에 가질 수 없습니다.
GitLab 15.0 및 그 이전에는 parallel:matrix 작업에서의 테스트 보고서가 종합되어 일부 보고서 정보가 표시되지 않을 수 있습니다. 그러나 GitLab 15.1 및 이후에는 해당 버그가 수정되었습니다. 이후 모든 보고서 정보가 표시됩니다.
GitLab에서 단위 테스트 보고서 보기
- GitLab 12.5에 도입됨 (기본적으로 비활성화된
junit_pipeline_view
피처 플래그 뒤에 있음)- GitLab 13.3에서 피처 플래그가 제거됨.
파이프라인의 일부로 JUnit 보고서 형식 XML 파일이 생성 및 업로드되면, 이러한 보고서는 파이프라인 세부 정보 페이지 내에서 볼 수 있습니다. 이 페이지의 Tests 탭은 XML 파일에서 보고된 테스트 스위트 및 케이스의 디렉터리을 표시합니다.
알려진 모든 테스트 스위트를 볼 수 있으며 각각을 선택하여 스위트를 구성하는 케이스를 포함한 자세한 정보를 볼 수 있습니다.
또한 GitLab API를 통해 보고서를 검색할 수도 있습니다.
단위 테스트 보고서 구문 분석 오류
JUnit 보고서 XML을 구문 분석하는 동안 오류가 발생하면 해당 작업 이름 옆에 표시기가 표시됩니다. 아이콘 위로 마우스를 올리면 툴팁으로 구문 분석기 오류가 표시됩니다. 그룹화된 작업에서 여러 구문 분석 오류가 나오는 경우, GitLab은 그룹에서 첫 번째 오류만 표시합니다.
테스트 케이스 구문 분석 제한에 대해서는 단위 테스트 보고서당 최대 테스트 케이스를 참조하세요.
GitLab은 JUnit 보고서의 매우 큰 노드를 구문 분석하지 않습니다. 이를 선택 사항으로 만드는 데 대한 이슈가 열려 있습니다.
GitLab에서 JUnit 스크린샷 보기
- GitLab 13.0에 도입됨 (
:junit_pipeline_screenshots_view
피처 플래그 뒤에 있음)- GitLab 13.12에서 피처 플래그가 제거됨.
스크린샷을 artifacts로 GitLab에 업로드할 수 있습니다. JUnit 보고서 형식 XML 파일에 attachment
태그가 포함되어 있으면 GitLab은 해당 첨부 파일을 구문 분석합니다.
스크린샷 첨부물을 업로드할 때:
-
attachment
태그는 업로드한 스크린샷의$CI_PROJECT_DIR
의 상대 경로를 포함해야 합니다. 예:<testcase time="1.00" name="Test"> <system-out>[[ATTACHMENT|/path/to/some/file]]</system-out> </testcase>
-
스크린샷을 업로드하는 작업은 테스트 실패시에도 여전히 스크린샷을 업로드하도록
artifacts:when: always
를 설정해야 합니다.
첨부물을 업로드하면 파이프라인 테스트 보고서에 스크린샷 링크가 포함되어 있습니다. 예:
문제 해결
테스트 보고서가 비어 보임
단위 테스트 보고서는 GitLab에서 볼 때 비어 보일 수 있습니다. 이는 보고서가 만료된 경우에 발생할 수 있습니다. 보고서가 너무 빨리 만료되는 경우, 보고서 artifact의 expire_in
값을 더 길게 설정하세요.
또는 새로운 보고서를 생성하도록 새로운 파이프라인을 실행할 수 있습니다.