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].xml
TEST1.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, Grunt및 Xcode와 같은 작업은 작업 내에서 게시 결과를 옵션으로 제공하거나 Cobertura 및 JaCo같은 라이브러리를 빌드할 있습니다. 이러한 작업을 사용하는 경우 파이프라인에서 테스트 결과 작업을 게시하기 별도의 작업이 필요하지 않습니다.
게시된 테스트 결과는 파이프라인 요약의 테스트 탭 표시됩니다. 결과를 통해 파이프라인 품질을 측정하고, 추적 가능성을 검토하고, 오류를 해결하고, 오류 소유권을 유도할 수 있습니다.
다음 예제에서는 태스크가 테스트 결과를 게시하도록 구성된 것을 보여 있습니다.
열기
또한 빌드 파이프라인에서 이 작업을 사용하여 검사 보고를 얻기 위해 Azure Pipelines 또는 TFS에 테스트를 실행할 때 생성되는 코드 검사 결과를 게시할 수 있습니다.
필수 조건
Windows 자체 호스팅 에이전트를 사용하는 경우 컴퓨터에 다음 필수 구성 요소가 설치되어 있어야 합니다.
- .NET Framework 4.6.2 이상 버전
작업 기본값
기본 옵션은 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에 게시됩니다.
코드 가져오기
다음을 사용하여 프로젝트 디렉터리의 루트에
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
복사됩니다.런타임 및 배포 아티팩트만 포함하는 최종 이미지를 최대한 작게 만들려면 기존
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"]
빌드 파이프라인 정의
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)
리포지토리의 주 분기에 변경 내용을 푸시합니다.
Azure Container Registry를 사용하는 경우 Azure Portal에서 레지스트리 미리 만든 있는지 확인합니다. Azure Portal에서 레지스트리 설정의 액세스 키 섹션에 표시된 관리자 사용자 이름 및 암호를 복사합니다.
다음을 사용하여 빌드 파이프라인 업데이트
-
에이전트 풀:
Hosted Ubuntu 1604
- dockerId : 값을 DockerHub의 Docker ID 또는 Azure Container Registry의 관리자 사용자 이름으로 설정합니다.
- dockerPassword : DockerHub 또는 관리자 암호 Azure Container Registry의 암호로 값을 설정합니다.
- YAML 파일 경로 :
/.vsts-ci.docker.yml
-
에이전트 풀:
새 빌드를 큐에 대기하고 Docker 이미지를 만들고 레지스트리에 푸시하고 테스트 결과를 Azure DevOps에 푸시합니다.