다음을 통해 공유


PublishTestResults@2 - 테스트 결과 v2 작업 게시

Azure Pipelines에 테스트 결과를 게시합니다.

구문론

# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #failTaskOnFailureToPublishResults: false # boolean. Fail if there is failure in publishing test results. Default: false.
    #failTaskOnMissingResultsFile: false # boolean. Fail if no result files are found. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.
# Publish Test Results v2
# Publish test results to Azure Pipelines.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit' | 'CTest'. Alias: testRunner. Required. Test result format. Default: JUnit.
    testResultsFiles: '**/TEST-*.xml' # string. Required. Test results files. Default: **/TEST-*.xml.
    #searchFolder: '$(System.DefaultWorkingDirectory)' # string. Search folder. Default: $(System.DefaultWorkingDirectory).
    #mergeTestResults: false # boolean. Merge test results. Default: false.
    #failTaskOnFailedTests: false # boolean. Fail if there are test failures. Default: false.
    #testRunTitle: # string. Test run title. 
  # Advanced
    #buildPlatform: # string. Alias: platform. Build Platform. 
    #buildConfiguration: # string. Alias: configuration. Build Configuration. 
    #publishRunAttachments: true # boolean. Upload test results files. Default: true.

입력

testResultsFormat - 테스트 결과 형식
입력 별칭: testRunner. string; 필수 사항입니다. 허용되는 값: JUnit, NUnit, VSTest, XUnit, CTest. 기본값은 JUnit입니다.

게시할 결과 파일의 형식을 지정합니다. 지원되는 형식은 CTest, JUnit, NUnit 2, NUnit 3, Visual Studio Test(TRX) 및 xUnit 2.


testResultsFiles - 테스트 결과 파일
string; 필수 사항입니다. 기본값은 **/TEST-*.xml입니다.

하나 이상의 테스트 결과 파일을 지정합니다.

  • 단일 폴더 와일드카드(*) 및 재귀 와일드카드(**)를 사용할 수 있습니다. 예를 들어 **/TEST-*.xml 모든 하위 디렉터리에서 이름이 TEST- 시작하는 모든 XML 파일을 검색합니다. VSTest를 테스트 결과 형식으로 사용하는 경우 파일 형식을 .trx(예: **/TEST-*.trx)로 변경해야 합니다.
  • 여러 경로를 새 줄로 구분하여 지정할 수 있습니다.
  • 또한 미니매치 패턴을 허용합니다.

예를 들어 !TEST[1-3].xmlTEST1.xml, TEST2.xml또는 TEST3.xml파일을 제외합니다.


searchFolder - 검색 폴더
string; 기본값은 $(System.DefaultWorkingDirectory)입니다.

선택 사항. 테스트 결과 파일을 검색할 폴더를 지정합니다.


mergeTestResults - 병합 테스트 결과
boolean; 기본값은 false입니다.

이 부울 값이 true경우 태스크는 단일 테스트 실행대해 모든 파일의 테스트 결과를 보고합니다. 값이 false경우 태스크는 각 테스트 결과 파일에 대해 별도의 테스트 실행을 만듭니다. 성능 향상을 위해 이 옵션을 false설정하더라도 100개 이상의 결과 파일이 있는 경우 결과는 항상 단일 실행으로 병합됩니다.

비고

병합 테스트 결과 설정을 사용하여 동일한 테스트 프레임워크의 파일을 결합하여 결과 매핑 및 기간이 올바르게 계산되도록 합니다.


failTaskOnFailedTests - 테스트 실패가 있는 경우 실패
boolean; 기본값은 false입니다.

선택 사항. 이 부울 값이 true결과 파일의 테스트가 실패한 것으로 표시되면 작업이 실패합니다. 기본값은 결과 파일의 결과를 게시하는 false.


failTaskOnFailureToPublishResults - 테스트 결과 게시에 오류가 있는 경우 실패
boolean; 기본값은 false입니다.

true테스트 결과를 게시하는 데 실패하면 작업이 실패합니다.


failTaskOnMissingResultsFile - 결과 파일을 찾을 수 없는 경우 실패
boolean; 기본값은 false입니다.

결과 파일을 찾을 수 없으면 작업을 실패합니다.


testRunTitle - 실행 타이틀
string;

선택 사항. 결과를 보고할 테스트 실행의 이름을 지정합니다. 빌드 또는 릴리스 파이프라인에 선언된 변수 이름을 사용할 수 있습니다.


빌드 플랫폼buildPlatform -
입력 별칭: platform. string;

선택 사항. 테스트 실행을 보고할 빌드 플랫폼을 지정합니다. 예를 들어 x64 또는 x86입니다. 빌드 작업에서 플랫폼에 대한 변수를 정의한 경우 여기에서 사용합니다.


빌드 구성buildConfiguration -
입력 별칭: configuration. string;

선택 사항. 테스트 실행을 보고할 빌드 구성을 지정합니다. 예를 들어 Debug 또는 Release입니다. 빌드 작업에서 구성에 대한 변수를 정의한 경우 여기에서 사용합니다.


publishRunAttachments - 테스트 결과 파일 업로드
boolean; 기본값은 true입니다.

선택 사항. 이 부울 값이 true경우 태스크는 모든 테스트 결과 파일을 테스트 실행에 첨부 파일로 업로드합니다.


작업 제어 옵션

모든 작업에는 작업 입력 외에 제어 옵션이 있습니다. 자세한 내용은 컨트롤 옵션 및 일반적인 작업 속성참조하세요.

출력 변수

없음.

비고

이 작업은 포괄적인 테스트 보고 및 분석 환경을 제공하기 위해 테스트가 실행될 때 Azure Pipelines 또는 TFS에 테스트 결과를 게시합니다. 필요한 결과 형식을 지원하는 선택한 테스트 실행기를 사용할 수 있습니다. 지원되는 결과 형식에는 CTest, JUnit(PHPUnit포함), NUnit 2, NUnit 3, Visual Studio Test(TRX) 및 xUnit 2포함됩니다.

Visual Studio 테스트 작업 Dot NetCore CLI 작업과 같은 기타 기본 제공 작업은 테스트 결과를 파이프라인에 자동으로 게시할 있습니다. 개미, Maven, Gulp, GruntXcode와 같은 작업은 작업 내에서 게시 결과를 옵션으로 제공하거나 CoberturaJaCo같은 라이브러리를 빌드할 있습니다. 이러한 작업을 사용하는 경우 파이프라인에서 테스트 결과 작업을 게시하기 별도의 작업이 필요하지 않습니다.

게시된 테스트 결과는 파이프라인 요약의 테스트 탭 표시됩니다. 결과를 통해 파이프라인 품질을 측정하고, 추적 가능성을 검토하고, 오류를 해결하고, 오류 소유권을 유도할 수 있습니다.

다음 예제에서는 태스크가 테스트 결과를 게시하도록 구성된 것을 보여 있습니다.

테스트 기록 페이지 열기

또한 빌드 파이프라인에서 이 작업을 사용하여 검사 보고를 얻기 위해 Azure Pipelines 또는 TFS에 테스트를 실행할 때 생성되는 코드 검사 결과를 게시할 수 있습니다.

필수 조건

Windows 자체 호스팅 에이전트를 사용하는 경우 컴퓨터에 다음 필수 구성 요소가 설치되어 있어야 합니다.

작업 기본값

기본 옵션은 JUnit 형식을 사용하여 테스트 결과를 게시합니다. VSTest를 testRunner사용하는 경우 testResultsFiles 옵션을 **/TEST-*.trx변경해야 합니다.

testResultsFormattestRunner 입력 이름의 별칭입니다. 결과 파일은 특정 실행기뿐만 아니라 여러 실행기에서 생성할 수 있습니다. 예를 들어 jUnit 결과 형식은 jUnit뿐만 아니라 많은 실행기에서 지원됩니다.

YAML을 사용하여 Python에 대한 테스트 결과를 게시하려면 다른 언어에 대한 예제를 포함하는 이러한 항목의 에코시스템 섹션에서 Python 참조하세요.

결과 형식 매핑

이 표에는 빌드 또는 릴리스 요약의 테스트 탭 보고된 필드와 지원되는 테스트 결과 형식의 특성과의 해당 매핑이 나열되어 있습니다.

범위 분야 Visual Studio 테스트(TRX)
테스트 실행 제목 테스트 실행 타이틀 작업에 지정됨
시작 날짜 /TestRun/Times.Attributes[""]시작합니다. 값
완료 날짜 /TestRun/Times.Attributes[""]마칩니다. 값
기간 완료 날짜 - 시작 날짜
첨부 파일 아래 첨부 파일 지원 섹션을 참조하세요.
테스트 결과 제목 /TestRun/Results/UnitTestResult.Attributes["testName"]입니다. value 또는 /TestRun/Results/WebTestResult.Attributes["testName"]입니다. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["testName"]입니다. 값
시작 날짜 /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value 또는 /TestRun/Results/WebTestResult.Attributes["startTime"]입니다. Value 또는 /TestRun/Results/TestResultAggregation.Attributes["startTime"]입니다. 값
완료 날짜 /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value + /TestRun/Results/UnitTestResult.Attributes["기간"]입니다. Value 또는 /TestRun/Results/WebTestResult.Attributes["startTime"]입니다. Value + /TestRun/Results/WebTestResult.Attributes["기간"]입니다. Value 또는 /TestRun/Results/TestResultAggregation.Attributes["startTime"]입니다. Value + /TestRun/Results/TestResultAggregation.Attributes["기간"]입니다. 값
기간 /TestRun/Results/UnitTestResult.Attributes["기간"]입니다. 값 또는 /TestRun/Results/WebTestResult.Attributes["기간"]입니다. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["기간"]입니다. 값
소유자 /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["이름"]입니다. 값
결과 /TestRun/Results/UnitTestResult.Attributes["결과"]입니다. 값 또는 /TestRun/Results/WebTestResult.Attributes["결과"]입니다. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["결과"]입니다. 값
오류 메시지 /TestRun/Results/UnitTestResult/Output/ErrorInfo/Message.InnerText 또는 /TestRun/Results/WebTestResultOutput/ErrorInfo/Message.InnerText 또는 /TestRun/Results/TestResultAggregation/Output/ErrorInfo/Message.InnerText
스택 추적 /TestRun/Results/UnitTestResult/Output/ErrorInfo/StackTrace.InnerText 또는 /TestRun/Results/WebTestResultOutput/ErrorInfo/StackTrace.InnerText 또는 /TestRun/Results/TestResultAggregation/Output/ErrorInfo/StackTrace.InnerText
첨부 파일 아래 첨부 파일 지원 섹션을 참조하세요.
콘솔 로그 /TestRun/Results/UnitTestResult/output/StdOut.InnerText 또는 /TestRun/Results/WebTestResultOutput/output/StdOut.InnerText 또는 /TestRun/Results/TestResultAggregation/Output/StdOut.InnerText
콘솔 오류 로그 /TestRun/Results/UnitTestResult/output/StdErr.InnerText 또는 /TestRun/Results/WebTestResultOutput/output/StdErr.InnerText 또는 /TestRun/Results/TestResultAggregation/Output/StdErr.InnerText
에이전트 이름 /TestRun/Results/UnitTestResult.Attributes["computerName"]. Value 또는 /TestRun/Results/WebTestResult.Attributes["computerName"]입니다. Value 또는 /TestRun/Results/TestResultAggregation.Attributes["computerName"]입니다. 값
테스트 파일 /TestRun/TestDefinitions/UnitTest.Attributes["스토리지"]. 값
우선권 /TestRun/TestDefinitions/UnitTest.Attributes["우선 순위"]입니다. 값

비고

기간날짜가 시작되고 완료된 사용할 수 없는 경우에만 사용됩니다.

testName 정규화된 이름 형식은 네임스페이스.Testclass.Methodname 문자 제한이 512인. 테스트가 데이터 기반이고 매개 변수가 있는 경우 문자 제한에 매개 변수가 포함됩니다.

테스트 결과를 게시하는 동안 다음과 같은 오류가 발생할 수 있습니다. 테스트 결과를 게시하지 못했습니다. 잘못된 우선 순위가 지정된

이 오류는 테스트 메서드 중 하나라도 우선 순위가 255보다 높은 경우 코드에서 테스트 메서드 우선 순위를 수정하고 테스트를 다시 실행하는 경우에 발생합니다. 생성된 trx 파일을 검토하여 우선 순위가 255보다 큰 모든 테스트를 확인할 수 있습니다.

첨부 파일 지원

테스트 결과 게시 태스크는 다음 형식에 대한 테스트 실행 및 테스트 결과 모두에 대한 첨부 파일을 지원합니다. 공용 프로젝트의 경우 총 2GB의 첨부 파일을 지원합니다.

  • TRX(Visual Studio Test)
  • NUnit 3
  • JUnit

Visual Studio 테스트(TRX)

범위 유형 경로
테스트 실행 데이터 수집기 /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. 값
테스트 결과 /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["경로는 "]. 값
코드 커버리지 /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. Value And /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. 값
테스트 결과 데이터 수집기 /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachments/A.Attributes["href"]. 값 또는 /TestRun/Results/WebTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]입니다. 값 또는 /TestRun/Results/TestResultAggregation/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. 값
테스트 결과 /TestRun/Results/UnitTestResult/ResultFiles/ResultFile.Attributes["경로는 "]. 값 또는 /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["경로는 "]. 값 또는 /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["경로는 "]. 값

비고

테스트 결과 파일을 첨부 파일로 업로드하는 옵션은 작업의 기본 옵션이며 모든 형식에 적용됩니다.

예시

도커

Docker 기반 앱의 경우 애플리케이션을 빌드하고 테스트를 실행하는 여러 가지 방법이 있습니다.

  • 빌드 파이프라인 빌드 및 테스트: 빌드 및 테스트는 파이프라인에서 실행되고 테스트 결과는 게시 테스트 결과 작업을 사용하여 게시됩니다.
  • 다단계 Dockerfile빌드 및 테스트: 빌드 및 테스트는 다단계 Docker 파일을 사용하여 컨테이너 내에서 실행됩니다. 이러한 테스트 결과는 파이프라인에 다시 게시되지 않습니다.
  • Dockerfile 사용하여 결과를 빌드, 테스트 및 게시하는: 빌드 및 테스트는 컨테이너 내에서 실행되고 결과는 파이프라인에 다시 게시됩니다. 아래 예제를 참조하세요.

Docker 파일을 사용하여 결과 빌드, 테스트 및 게시

이 방법에서는 Docker 파일을 사용하여 코드를 빌드하고 컨테이너 내에서 테스트를 실행합니다. 그런 다음 테스트 결과를 호스트에 복사하여 파이프라인에 게시합니다. 테스트 결과를 Azure Pipelines에 게시하려면 테스트 결과 게시 작업을 사용할 수 있습니다. 최종 이미지는 Docker 또는 Azure Container Registry에 게시됩니다.

코드 가져오기
  1. 다음을 사용하여 프로젝트 디렉터리의 루트에 Dockerfile.build 파일을 만듭니다.

    # Build and run tests inside the docker container
    FROM mcr.microsoft.com/dotnet/sdk:2.1
    WORKDIR /app
    # copy the contents of agent working directory on host to workdir in container
    COPY . ./
    # dotnet commands to build, test, and publish
    RUN dotnet restore
    RUN dotnet build -c Release
    RUN dotnet test dotnetcore-tests/dotnetcore-tests.csproj -c Release --logger "trx;LogFileName=testresults.trx"
    RUN dotnet publish -c Release -o out
    ENTRYPOINT dotnet dotnetcore-sample/out/dotnetcore-sample.dll
    

    이 파일에는 코드를 빌드하고 테스트를 실행하는 지침이 포함되어 있습니다. 그런 다음 테스트가 컨테이너 내의 파일 testresults.trx 복사됩니다.

  2. 런타임 및 배포 아티팩트만 포함하는 최종 이미지를 최대한 작게 만들려면 기존 Dockerfile 내용을 다음으로 바꿉니다.

    # This Dockerfile creates the final image to be published to Docker or
    # Azure Container Registry
    # Create a container with the compiled asp.net core app
    FROM mcr.microsoft.com/dotnet/aspnet:2.1
    # Create app directory
    WORKDIR /app
    # Copy only the deployment artifacts
    COPY /out .
    ENTRYPOINT ["dotnet", "dotnetcore-sample.dll"]
    
빌드 파이프라인 정의
  1. Docker 허브 계정이 있고 이미지를 Docker 레지스트리에 푸시하려는 경우 .vsts-ci.docker.yml 파일의 내용을 다음으로 바꿉니다.

    # Build Docker image for this app, to be published to Docker Registry
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      buildConfiguration: 'Release'
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId)/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd
        docker push $(dockerId)/dotnetcore-sample:$BUILD_BUILDID
      env:
        pswd: $(dockerPassword)
    

    또는 Azure Container Registry를 구성하고 해당 레지스트리에 이미지를 푸시하려는 경우 .vsts-ci.yml 파일의 내용을 다음으로 바꿉니다.

    # Build Docker image for this app to be published to Azure Container Registry
    pool:
      vmImage: 'ubuntu-latest'
    variables:
      buildConfiguration: 'Release'
    
    steps:
    - script: |
        docker build -f Dockerfile.build -t $(dockerId)/dotnetcore-build:$BUILD_BUILDID .
        docker run --name dotnetcoreapp --rm -d $(dockerId)/dotnetcore-build:$BUILD_BUILDID
        docker cp dotnetcoreapp:app/dotnetcore-tests/TestResults $(System.DefaultWorkingDirectory)
        docker cp dotnetcoreapp:app/dotnetcore-sample/out $(System.DefaultWorkingDirectory)
        docker stop dotnetcoreapp
    
    - task: PublishTestResults@2
      inputs:
        testRunner: VSTest
        testResultsFiles: '**/*.trx'
        failTaskOnFailedTests: true
    
    - script: |
        docker build -f Dockerfile -t $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID .
        docker login -u $(dockerId) -p $pswd $(dockerid).azurecr.io
        docker push $(dockerId).azurecr.io/dotnetcore-sample:$BUILD_BUILDID 
      env:
        pswd: $(dockerPassword)
    
  2. 리포지토리의 주 분기에 변경 내용을 푸시합니다.

  3. Azure Container Registry를 사용하는 경우 Azure Portal에서 레지스트리 미리 만든 있는지 확인합니다. Azure Portal에서 레지스트리 설정의 액세스 키 섹션에 표시된 관리자 사용자 이름 및 암호를 복사합니다.

  4. 다음을 사용하여 빌드 파이프라인 업데이트

    • 에이전트 풀: Hosted Ubuntu 1604
      • dockerId : 값을 DockerHub의 Docker ID 또는 Azure Container Registry의 관리자 사용자 이름으로 설정합니다.
      • dockerPassword : DockerHub 또는 관리자 암호 Azure Container Registry의 암호로 값을 설정합니다.
    • YAML 파일 경로 : /.vsts-ci.docker.yml
  5. 새 빌드를 큐에 대기하고 Docker 이미지를 만들고 레지스트리에 푸시하고 테스트 결과를 Azure DevOps에 푸시합니다.

요구 사항

요구 사항 설명
파이프라인 유형 YAML, 클래식 빌드, 클래식 릴리스
다음에서 실행 에이전트, DeploymentGroup
요구 없음
기능 이 작업은 작업의 후속 작업에 대한 요구 사항을 충족하지 않습니다.
명령 제한 어느 것이든
settable 변수 어느 것이든
에이전트 버전 2.0.0 이상
작업 범주 테스트