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

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

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

Syntax

# 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.
# Publish Test Results v2
# Publish Test Results to Azure Pipelines/TFS.
- task: PublishTestResults@2
  inputs:
    testResultsFormat: 'JUnit' # 'JUnit' | 'NUnit' | 'VSTest' | 'XUnit'. 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.
    #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입니다.


testResultsFormat - 테스트 결과 형식
입력 별칭: testRunner. string. 필수 요소. 허용되는 값: JUnit, , , VSTest. XUnitNUnit 기본값은 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].xml , TEST2.xml또는 TEST3.xml라는 TEST1.xml파일을 제외합니다.


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

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


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

이 부울 값이 이면 태스크는 true단일 테스트 실행에 대해 모든 파일의 테스트 결과를 보고합니다. 값이 이 false면 태스크는 각 테스트 결과 파일에 대해 별도의 테스트 실행을 만듭니다.

참고

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


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, TRX(Visual Studio Test) 및 xUnit 2가 포함됩니다.

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

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

다음 예제에서는 태스크가 테스트 결과를 게시하도록 구성되어 있는지 보여줍니다.

테스트 기록 페이지 열기

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

사전 요구 사항

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

작업 기본값

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

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

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

결과 형식 매핑

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

범위 필드 Visual Studio 테스트(TRX)
테스트 실행 제목 작업에 지정된 테스트 실행 제목
시작 날짜 /TestRun/Times.Attributes["start"]. 값
완료 날짜 /TestRun/Times.Attributes["finish"]. 값
Duration 완료 날짜 - 시작 날짜
Attachments 아래 첨부 파일 지원 섹션을 참조하세요.
테스트 결과 제목 /TestRun/Results/UnitTestResult.Attributes["testName"]. 값 또는 /TestRun/Results/WebTestResult.Attributes["testName"]. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["testName"]. 값
시작 날짜 /TestRun/Results/UnitTestResult.Attributes["startTime"]. 값 또는 /TestRun/Results/WebTestResult.Attributes["startTime"]. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["startTime"]. 값
완료 날짜 /TestRun/Results/UnitTestResult.Attributes["startTime"]. Value + /TestRun/Results/UnitTestResult.Attributes["duration"]. 값 또는 /TestRun/Results/WebTestResult.Attributes["startTime"]. Value + /TestRun/Results/WebTestResult.Attributes["duration"]. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["startTime"]. Value + /TestRun/Results/TestResultAggregation.Attributes["duration"]. 값
Duration /TestRun/Results/UnitTestResult.Attributes["duration"]. 값 또는 /TestRun/Results/WebTestResult.Attributes["duration"]. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["duration"]. 값
소유자 /TestRun/TestDefinitions/UnitTest/Owners/Owner.Attributes["name"]. 값
결과 /TestRun/Results/UnitTestResult.Attributes["results"]. 값 또는 /TestRun/Results/WebTestResult.Attributes["results"]. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["result"]. 값
오류 메시지 /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
Attachments 아래 첨부 파일 지원 섹션을 참조하세요.
콘솔 로그 /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"]. 값 또는 /TestRun/Results/WebTestResult.Attributes["computerName"]. 값 또는 /TestRun/Results/TestResultAggregation.Attributes["computerName"]. 값
테스트 파일 /TestRun/TestDefinitions/UnitTest.Attributes["storage"]. 값
우선 순위 /TestRun/TestDefinitions/UnitTest.Attributes["priority"]. 값

참고

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

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

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

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

첨부 파일 지원

테스트 결과 게시 작업은 다음 형식에 대한 테스트 실행 및 테스트 결과 모두에 대한 첨부 파일을 지원합니다. 퍼블릭 프로젝트의 경우 총 첨부 파일 2GB를 지원합니다.

Visual Studio 테스트(TRX)

범위 Type 경로
테스트 실행 데이터 수집기 /TestRun/ResultSummary/CollectorDataEntries/Collector/UriAttachments/UriAttachment/A.Attributes["href"]. 값
테스트 결과 /TestRun/ResultSummary/ResultFiles/ResultFile.Attributes["path"]. 값
코드 검사 /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["binaryFile"]. 값 및 /TestRun/TestSettings/Execution/AgentRule/DataCollectors/DataCollector/Configuration/CodeCoverage/Regular/CodeCoverageItem.Attributes["pdbFile"]. 값
테스트 결과 데이터 수집기 /TestRun/Results/UnitTestResult/CollectorDataEntries/Collector/UriAttachments/UriAttachment/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["path"]. 값 또는 /TestRun/Results/WebTestResult/ResultFiles/ResultFile.Attributes["path"]. 값 또는 /TestRun/Results/TestResultAggregation/ResultFiles/ResultFile.Attributes["path"]. 값

참고

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

예제

Docker

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 Hub 계정이 있고 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에 테스트 결과를 푸시하는 watch.

요구 사항

요구 사항 Description
파이프라인 유형 YAML, 클래식 빌드, 클래식 릴리스
실행 중 에이전트, DeploymentGroup
요청 없음
Capabilities 이 작업은 작업의 후속 작업에 대한 요구를 충족하지 않습니다.
명령 제한 사항 모두
Settable 변수 모두
에이전트 버전 2.0.0 이상
작업 범주 테스트