단위 테스트 보고서
CI/CD 파이프라인에는 코드 검증을 위한 테스트 작업이 포함되는 것이 매우 일반적입니다.
테스트가 실패하면 파이프라인이 실패하고 사용자에게 알림이 전송됩니다.
병합 요청에서 작업하는 사람은 작업 로그를 확인하여 테스트가 실패한 원인을 찾아 이를 수정해야 합니다.
작업을 단위 테스트 보고서를 사용하도록 구성할 수 있으며, GitLab은 병합 요청에 보고서를 표시하여 전체 로그를 확인하지 않고도 실패를 더 쉽게 식별할 수 있습니다.
현재 단위 테스트 보고서는 JUnit 보고서 형식의 테스트 보고서만 지원합니다.
병합 요청을 사용하지 않더라도 작업 로그를 뒤지지 않고 단위 테스트 보고서 출력을 보고 싶다면 단위 테스트 보고서가 파이프라인 세부 정보 보기에서 제공됩니다.
다음 워크플로우를 고려해 보세요:
-
기본 브랜치가 매우 안정적이고, 프로젝트가 GitLab CI/CD를 사용하며,
파이프라인이 손상된 것이 없음을 나타냅니다. -
팀의 누군가가 병합 요청을 제출하고, 테스트가 실패하며 파이프라인에
알려진 빨간 아이콘이 표시됩니다. 더 조사하려면 작업 로그를 살펴보고 실패한 테스트의 원인을 파악해야 하며, 대개 수천 줄이 포함되어 있습니다. -
단위 테스트 보고서를 구성하면 GitLab이 이를 자동으로 수집하고
병합 요청에 노출합니다. 이제 작업 로그를 검색할 필요가 없습니다. -
개발 및 디버깅 워크플로우가 더 쉽고 빠르며 효율적으로 변합니다.
작동 방식
우선, GitLab Runner는 모든 JUnit 보고서 형식 XML 파일을
산출물로 GitLab에 업로드합니다.
그런 다음 병합 요청을 방문하면 GitLab은 헤드 및 기본 브랜치의 JUnit 보고서 형식 XML 파일을 비교하기 시작하는데,
- 기본 브랜치는 대상 브랜치(일반적으로 기본 브랜치)입니다.
- 헤드 브랜치는 소스 브랜치(각 병합 요청에서 최신 파이프라인)입니다.
테스트 요약 패널은 얼마나 많은 테스트가 실패했는지, 얼마나 많은 테스트에 오류가 있었는지,
얼마나 많은 테스트가 수정되었는지 보여줍니다.
기본 브랜치에 대한 데이터가 없기 때문에 비교가 불가능한 경우 패널은
소스 브랜치의 실패한 테스트 목록만 표시합니다.
결과의 유형은 다음과 같습니다:
- 새로 실패한 테스트: 기본 브랜치에서 통과했지만 헤드 브랜치에서 실패한 테스트 사례입니다.
- 새로 발생한 오류: 기본 브랜치에서 통과했지만 헤드 브랜치에서 테스트 오류로 실패한 테스트 사례입니다.
- 기존 실패: 기본 브랜치에서 실패하고 헤드 브랜치에서도 실패한 테스트 사례입니다.
- 해결된 실패: 기본 브랜치에서 실패했지만 헤드 브랜치에서 통과한 테스트 사례입니다.
실패한 테스트 보기
테스트 요약 패널의 각 항목은 테스트 이름과 결과 유형을 보여줍니다.
테스트 이름을 선택하여 실행 시간과 오류 출력을 포함한 세부 사항이 있는 모달 창을 엽니다.
실패한 테스트 이름 복사
- GitLab 15.2에서 소개됨.
테스트 요약 패널에 실패한 테스트가 나열된 경우 이름과 경로를 복사할 수 있습니다.
이름과 경로를 사용하여 로컬에서 테스트를 찾아 재실행하여 확인할 수 있습니다.
모든 실패한 테스트의 이름을 복사하려면 테스트 요약 패널 상단에서
실패한 테스트 복사를 선택합니다. 실패한 테스트는 문자열로 나열되며 테스트는 공백으로 구분됩니다.
이 옵션은 JUnit 보고서가 실패한 테스트에 대해 <file>
속성을 채울 때만 사용 가능합니다.
단일 실패한 테스트의 이름을 복사하려면:
- 테스트 요약 패널을 확장하여 테스트 요약 세부정보 표시를 선택합니다. ()
- 검토할 테스트를 선택합니다.
- 로컬에서 재실행할 테스트 이름 복사를 선택합니다. ()
최근 실패 수
프로젝트의 기본 브랜치에서 지난 14일 동안 테스트가 실패한 경우, 해당 테스트에 대해 지난 14일 동안 {default_branch}에서 {n}회 실패
라는 메시지가 표시됩니다.
계산에는 완료된 파이프라인에서 실패한 테스트가 포함되지만, 차단된 파이프라인은 포함되지 않습니다. 이슈 431265에서는 차단된 파이프라인도 계산에 포함할 것을 제안합니다.
설정 방법
병합 요청에서 유닛 테스트 보고서를 활성화하려면, .gitlab-ci.yml
파일에서 artifacts:reports:junit
을 추가하고 생성된 테스트 보고서의 경로를 지정해야 합니다.
보고서는 .xml
파일이어야 하며, 그렇지 않을 경우 GitLab에서 500 오류를 반환합니다.
다음 예제에서 Ruby에 대한 test
단계에서 작업이 실행되며, GitLab은 해당 작업에서 유닛 테스트 보고서를 수집합니다. 작업이 실행된 후 XML 보고서는 아티팩트로 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에서 유닛 테스트 보고서 보기
JUnit 보고서 형식 XML 파일이 생성되고 파이프라인의 일부로 업로드되면, 이러한 보고서는 파이프라인 세부 페이지에서 볼 수 있습니다. 이 페이지의 테스트 탭은 XML 파일에서 보고된 테스트 수트 및 케이스의 목록을 표시합니다.
모든 알려진 테스트 수트를 보고 이를 선택하여 구성 요소인 케이스의 세부 정보를 볼 수 있습니다.
보고서는 GitLab API를 통해서도 검색할 수 있습니다.
유닛 테스트 보고서 구문 분석 오류
JUnit 보고서 XML을 구문 분석하는 중 오류가 발생하면, 작업 이름 옆에 표시됩니다. 아이콘 위에 마우스를 올리면 툴팁으로 구문 분석 오류가 표시됩니다. 그룹화된 작업에서 여러 구문 분석 오류가 발생하는 경우, GitLab은 그룹의 첫 번째 오류만 표시합니다.
테스트 케이스 구문 분석 한계에 대한 내용은 유닛 테스트 보고서당 최대 테스트 케이스를 참조하세요.
GitLab은 JUnit 보고서의 매우 큰 노드를 구문 분석하지 않습니다. 이를 선택적으로 만들기 위해 문제가 제기되었습니다.
GitLab에서 JUnit 스크린샷 보기
스린샷을 아티팩트로 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
로 설정해야 하며, 이는 테스트가 실패할 때에도 여전히 스크린샷을 업로드하도록 합니다.
첨부파일이 업로드된 후, 파이프라인 테스트 보고서에는 스크린샷에 대한 링크가 포함됩니다. 예를 들면:
문제 해결
테스트 보고서가 비어 있는 것처럼 보임
유닛 테스트 보고서는 병합 요청에서 보기에서 비어 있는 것처럼 보일 수 있습니다.
보고서를 포함하는 아티팩트가 만료되었기 때문입니다.
아티팩트가 자주 너무 일찍 만료되면 보고서 아티팩트에 대해 더 긴 expire_in
값을 설정하세요.
또는 새 파이프라인을 실행하여 새 보고서를 생성할 수 있습니다.