테스트 보고서

각 보고서 옵션에는 해당 섹션에 명명된 확장 패키지가 필요합니다. 패키지를 직접 추가하거나 패키지가 포함된 테스트 SDK 구성 또는 프로필을 사용합니다. 보고서 확장은 MTP 코어의 일부가 아니므로 테스트 애플리케이션에서 확장을 등록하지 않을 때와 같은 --report-trx 옵션을 인식할 수 없습니다. MTP 모드에서 테스트 애플리케이션을 --help실행하거나 실행 dotnet test --help 하여 옵션을 사용할 수 있는지 확인합니다.

팁 (조언)

Microsoft.Testing.Platform.MSBuild(MSTest, NUnit 및 xUnit 실행기에서 전이적으로 포함)를 사용하는 경우 이러한 확장은 NuGet 패키지를 설치할 때 자동으로 등록되며 코드 변경이 필요하지 않습니다. 이 문서에서 지정한 수동 등록은 자동 생성된 진입점을 설정 <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>하여 사용하지 않도록 설정한 경우에만 필요합니다.

보고서 파일 이름

각 보고서 확장은 해당 파일을 테스트 결과 디렉터리에 기록하며, 이 디렉터리는 --results-directory 옵션으로 설정할 수 있습니다. 이름을 재정의하려면 해당 --report-*-filename 옵션을 사용하세요. 각 보고서 섹션에는 해당 보고서의 기본 이름이 나열됩니다.

파일 이름에는 테스트 결과 디렉터리 내에 유지되는 상대 경로가 포함될 수 있으며 다음 대체 항목(자리 표시자)을 사용할 수 있습니다.

Placeholder Description
{asm} 진입점 어셈블리 이름 또는 사용할 수 없는 경우 unknown
{tfm} 런타임에 검색된 대상 프레임워크 모니커(예: net9.0.
{arch} 프로세스 아키텍처(예: x64, x86또는 arm64.
{pname} 프로세스 이름
{pid} 프로세스 ID입니다.
{time} 정밀도 높은 타임스탬프입니다.

예를 들어 기본 --report-trx-filename "{asm}_{tfm}_{arch}.trx" TRX 이름을 재현합니다.

테스트 원본에 대한 기본 또는 명시적 TRX, HTML 또는 JUnit 파일 이름이 이미 있는 경우 확장 프로그램에서 경고하고 파일을 덮어씁니다. MTP 2.4 미리 보기부터 CTRF는 동일한 동작을 사용합니다. 보고서 기록을 유지하려면 다음을 포함합니다 {time}.

비고

자리 표시자 이름은 대/소문자를 구분하며 소문자를 사용합니다. 보고서 파일 이름에 대한 자리 표시자 지원은 버전 2.3.0부터 MTP에서 사용할 수 있습니다.

보고서 통합

MTP 2.4.0부터는 dotnet test 호출로 여러 테스트 모듈을 실행한 후나 재시도 지원으로 여러 차례 시도가 수행된 후에 MTP가 보고서 아티팩트를 자동으로 후처리합니다. 이 기능은 MTP 2.4.0에서 실험적입니다.

TRX, JUnit, CTRF 및 HTML 확장은 보고서 종류별로 호환되는 아티팩트를 그룹화하고 테스트 결과 디렉터리의 하위 디렉터리 merged 아래에 통합된 보고서를 작성합니다. CTRF 통합은 모듈 결과를 결합하고 재시도 시도를 재시도 기록과 함께 최종 테스트 결과로 축소합니다. HTML 통합은 병합된 요약을 만들고 원래 프로세스별 보고서를 유지합니다.

사용자 지정 보고서 확장의 경우, 실험적 IArtifactPostProcessor API는 별도의 TestModulesRetryAttempts 처리 모드를 제공합니다. 자세한 내용은 확장을 참조 IArtifactPostProcessor 하세요.

Visual Studio 테스트 보고서(TRX)

Visual Studio 테스트 결과 파일(또는 TRX)은 테스트 결과를 게시하기 위한 기본 형식입니다. 이 확장에는 Microsoft.Testing.Extensions.TrxReport NuGet 패키지가 필요합니다.

수동 등록

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddTrxReportProvider();

비고

수동 등록을 사용하는 경우 TRX 보고서 공급자를 마지막으로 등록합니다. 현재 구현은 등록 순서에 따라 달라지므로 다른 모든 확장 후에 등록하면 모든 테스트 데이터를 캡처할 수 있습니다.

비고

버전 1.9.0부터 MTP에서 사용할 수 있는 TRX 보고서에는 테스트 Description 필드가 포함됩니다.

비고

버전 2.3.0부터 MTP에서 사용할 수 있는 TRX 결과는 실행이 진행됨에 따라 디스크로 스트리밍됩니다. 테스트 호스트가 충돌하는 경우 TRX 파일은 크래시 전에 수집된 결과를 유지합니다.

MTP 2.4 미리 보기부터 MTP에서 생성된 TRX는 MSTest [WorkItem][GitHubWorkItem] 메타데이터를 유지합니다.

옵션

Option Description
--report-trx TRX 보고서를 생성합니다.
--report-trx-filename 생성된 TRX 보고서의 이름입니다. MTP 2.3.0부터 기본값은 결정적 {asm}_{tfm}_{arch}.trx 형식입니다. MTP 2.3.0 이전의 기본값은 .입니다 <UserName>_<MachineName>_<yyyy-MM-dd_HH_mm_ss.fffffff>.trx. 이름을 사용자 지정하려면 보고서 파일 이름을 참조하세요.

보고서는 명령줄 인수를 통해 지정할 수 있는 기본 --results-directory 폴더 내에 저장됩니다.

HTML 보고서

HTML 보고서는 테스트 세션에 대한 대화형 자체 포함 HTML 파일을 만듭니다. 이 확장을 사용하려면 Microsoft.Testing.Extensions.HtmlReport NuGet 패키지가 필요합니다.

비고

버전 2.3.0부터 MTP에서 사용할 수 있습니다. 이 확장은 실험적이며 옵션 및 출력 형식은 이후 버전에서 변경될 수 있습니다.

수동 등록

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddHtmlReportProvider();

옵션

Option Description
--report-html HTML 보고서를 생성합니다.
--report-html-filename 생성된 HTML 보고서의 이름입니다. 값은 으로 .html끝나야 합니다. 기본값은 {asm}_{tfm}_{arch}.html입니다. 이름을 사용자 지정하려면 보고서 파일 이름을 참조하세요. --report-html가 필요합니다.

JUnit 보고서

JUnit 보고서는 테스트 세션에 대한 JUnit 호환 XML 파일을 만듭니다. 이 확장에는 Microsoft.Testing.Extensions.JUnitReport NuGet 패키지가 필요합니다.

비고

버전 2.3.0부터 MTP에서 사용할 수 있습니다. 이 확장은 실험적이며 옵션 및 출력 형식은 이후 버전에서 변경될 수 있습니다.

MSTest.Sdk 4.3부터는 <EnableMicrosoftTestingExtensionsJUnitReport>true</EnableMicrosoftTestingExtensionsJUnitReport>로 이 확장을 사용하도록 설정합니다. 확장은 Default 또는 AllMicrosoft MSTest.Sdk 프로필의 일부가 아닙니다.

수동 등록

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddJUnitReportProvider();

옵션

Option Description
--report-junit JUnit XML 보고서를 생성합니다.
--report-junit-filename 생성된 JUnit XML 보고서의 이름입니다. 값은 으로 .xml끝나야 합니다. 기본값은 {asm}_{tfm}_{arch}.xml입니다. 이름을 사용자 지정하려면 보고서 파일 이름을 참조하세요. --report-junit가 필요합니다.

CTRF 보고서

CTRF 보고서는 테스트 세션에 공통 테스트 보고서 형식 을 사용하는 JSON 파일을 만듭니다. 이 확장에는 Microsoft.Testing.Extensions.CtrfReport NuGet 패키지가 필요합니다.

비고

버전 2.3.0부터 MTP에서 사용할 수 있습니다. 이 확장은 실험적이며 옵션 및 출력 형식은 이후 버전에서 변경될 수 있습니다.

수동 등록

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddCtrfReportProvider();

옵션

Option Description
--report-ctrf CTRF JSON 보고서를 생성합니다.
--report-ctrf-filename 생성된 CTRF JSON 보고서의 이름입니다. 값은 으로 .json끝나야 합니다. 기본값은 <UserName>_<MachineName>_<assembly>_<tfm>_<timestamp>.ctrf.json입니다. 이름을 사용자 지정하려면 보고서 파일 이름을 참조하세요. --report-ctrf가 필요합니다.

MTP 2.4 미리 보기부터 CTRF는 여러 테스트에서 동일한 UID를 사용하는 경우 모든 결과를 유지합니다. 또한 테스트별 및 사전 시도 첨부 파일을 포함하며 파일 이름에서 해당 MIME 형식을 유추합니다.

재시도된 테스트의 경우 CTRF는 관계가 명확하지 않은 경우에만 시도의 상관 관계를 지정합니다. 그런 다음 이전 시도를 retryAttempts에 기록하고, retries을 설정하고, 나중에 성공한 결과를 flaky: true로 표시합니다. 모호한 동일한 UID 결과는 별도의 상태로 유지되므로 보고서가 진단을 잘못된 테스트와 연결하지 않습니다.

터미널 요약은 불안정한 테스트와 재시도된 테스트를 식별합니다. TRX 및 JUnit 보고서는 모든 시도를 기록하는 대신 테스트당 하나의 최종 결과를 유지합니다.

Azure DevOps 보고서

Azure DevOps 보고서 플러그 인은 GitHub 코드를 호스트하지만 Azure DevOps 빌드 에이전트를 기반으로 하는 개발자를 위한 테스트 실행을 향상시킵니다. GitHub PR에서 실패를 직접 표시하기 위해 실패에 대한 추가 정보를 추가합니다.

GitHub PR 파일 뷰의 오류 주석

이 확장에는 Microsoft.Testing.Extensions.AzureDevOpsReport NuGet 패키지가 필요합니다.

수동 등록

var builder = await TestApplication.CreateBuilderAsync(args);
builder.TestHost.AddAzureDevOpsProvider();

옵션

Option MTP 버전 Description
--report-azdo 1.9.0 Azure DevOps 보고서 생성기를 사용하도록 설정합니다. 오류 및 경고는 Azure DevOps 이해하는 형식으로 출력에 기록됩니다.
--report-azdo-severity 1.9.0 보고된 이벤트에 사용할 심각도입니다. 유효한 값은 error (기본값) 및 warning.
--report-azdo-groups 2.4.0 어셈블리별 로그 그룹을 사용하거나 사용하지 않도록 설정합니다. 사용하도록 설정하면 각 테스트 어셈블리의 출력이 Azure Pipelines 로그의 축소 가능한 섹션에 표시됩니다. 유효한 값은 onoff입니다. MTP 2.4.0 미리 보기 빌드는 기본값으로 on, 안정적인 MTP 2.4.0 릴리스는 기본적으로 .로 설정 off됩니다. --report-azdo가 필요합니다.
--report-azdo-annotations 2.4.0 실패한 테스트와 건너뛴 테스트에 대한 주석을 사용하거나 사용하지 않도록 설정합니다. 유효한 값은 on (기본값) 및 off. --report-azdo가 필요합니다.
--report-azdo-flaky-history 2.3.0 지난 N일(1~90일) 동안의 Azure DevOps 테스트 결과 이력을 조회하고, 보고된 실패에 불안정성 맥락 정보를 주석으로 추가합니다. --report-azdo가 필요합니다.
--report-azdo-demote-known-flaky 2.3.0 Azure DevOps 기록 기간 내에서 충분히 간헐적으로 발생하는 실패(기본 임계값: 25%)를 오류에서 경고로 낮춥니다. --report-azdo--report-azdo-flaky-history가 필요합니다.
--report-azdo-quarantine-file 2.3.0 격리된 테스트 정규화된 이름 또는 glob 패턴을 나열하는 텍스트 파일의 경로입니다. 일치 실패는 경고로 보고됩니다. --report-azdo가 필요합니다.
--report-azdo-summary 2.3.0 테스트 실행이 끝날 때 Markdown 작업 요약을 작성하고 이를 통해 ##vso[task.uploadsummary]업로드합니다. 선택적 파일 경로 인수는 기본 위치({testResultsDir}/azdo-summary-{tfm}.md)를 재정의합니다. --report-azdo가 필요합니다.
--report-azdo-stackframe-filter 2.3.0 확장이 주석을 추가할 사용자의 호출 위치를 찾을 때 건너뛰도록, 각 스택 프레임의 완전 수식 형식 접두사와 일치하는 정규식 패턴을 추가합니다. 이 옵션은 최대 16개의 패턴을 반복할 수 있으며 각 패턴은 500ms 일치 시간 제한으로 컴파일됩니다. 이러한 패턴은 확장 기능에 기본 제공되는 MSTest 어설션 구현용 접두사에 추가로 적용됩니다. --report-azdo가 필요합니다.
--report-azdo-upload-artifacts 2.3.0 테스트 결과 파일을 업로드하고 빌드 태그를 Azure DevOps 추가합니다. 유효한 값은 off (기본값), tags-onlyfilesall.
--report-azdo-upload-artifact-include 2.3.0 테스트 결과 디렉터리를 기준으로 하는 glob 패턴을 사용하여 파일을 Azure DevOps 아티팩트 업로드에 포함합니다. 기본값은 **/*입니다. 가 --report-azdo-upload-artifacts 아닌 off값이어야 합니다.
--report-azdo-upload-artifact-exclude 2.3.0 테스트 결과 디렉터리에 상대적인 glob 패턴을 사용하여 Azure DevOps 아티팩트 업로드에서 파일을 제외합니다. 가 --report-azdo-upload-artifacts 아닌 off값이어야 합니다.
--report-azdo-upload-artifact-name 2.3.0 Azure DevOps 아티팩트 컨테이너 이름을 재정의합니다. 기본값은 TestResults_{assemblyName}_{tfm}입니다. 가 --report-azdo-upload-artifacts 아닌 off값이어야 합니다.
--publish-azdo-test-results 2.3.0 테스트가 완료되면 결과를 Azure DevOps 테스트 실행으로 스트리밍합니다. 빌드의 테스트 탭 에는 완료된 실행이 나열됩니다.
--publish-azdo-run-name 2.3.0 라이브 테스트 결과 게시에 대한 사용자 지정 Azure DevOps 테스트 실행 이름을 설정합니다. --publish-azdo-test-results가 필요합니다.

Warning

여러 테스트 어셈블리가 병렬로 실행되는 경우 그룹을 사용하도록 설정하지 마세요. ##[group] Azure DevOps 및 ##[endgroup] 서식 지정 명령은 순차적이고 익명입니다. 동시 어셈블리 출력은 서로 뒤섞일 수 있고, 그룹이 잘못 중첩되게 하며, 행이 잘못된 어셈블리 아래에 배치되게 할 수 있습니다. MTP 2.4.0 미리 보기 빌드를 사용하는 경우 그룹을 사용하지 않도록 설정하려면 전달 --report-azdo-groups off 합니다. 안정적인 MTP 2.4.0 릴리스는 기본적으로 그룹을 사용하지 않도록 설정합니다. 단일 어셈블리 또는 직렬화된 어셈블리 실행에 대해서만 전달 --report-azdo-groups on 합니다.

비고

MTP 버전 열에는 각 옵션이 포함된 첫 번째 MTP 버전이 나열됩니다. Azure DevOps 확장 자체는 MTP 1.9.0 --report-azdo 에서 안정되었고 --report-azdo-severity나머지 옵션은 MTP 2.3.0 또는 2.4.0에 추가되었습니다.

확장은 환경 변수를 확인하여 CI(연속 통합) 환경에서 실행 중임을 자동으로 검색합니다 TF_BUILD .

MTP 2.4.0부터 Azure DevOps Markdown 요약은 dotnet test 호출에서 모든 테스트 모듈의 결과를 집계합니다. 또한 코드 커버리지도 사용하도록 설정하면 요약에는 커버된 개수와 전체 개수, 백분율, 임계값 결과, 그리고 커버리지 데이터가 부분적인 경우 이를 나타내는 표시기가 포함됩니다.

MTP 2.4 미리 보기에서는 라이브 게시 기능이 실패한 결과의 첨부 파일을 Azure DevOps 테스트 결과에 자동으로 업로드합니다. 실패한 결과에는 실패, 오류, 시간 초과 및 취소된 결과가 포함됩니다.

결과가 표준 출력 또는 표준 오류를 제공하는 경우 확장은 각 인라인 스트림의 최대 256KiB를 연결할 수 있습니다. 각 파일 기반 첨부 파일에는 16 MiB 제한이 적용됩니다.

또한 확장은 실행 수준 .coverage.cobertura.xml.opencover.xml 파일을 코드 검사 첨부 파일로 업로드합니다. 이러한 테스트 실행 및 결과 첨부 파일은 선택한 파일을 Azure Pipelines 빌드 아티팩트로 업로드하는 --report-azdo-upload-artifacts와는 별개입니다.

재시도된 테스트의 경우 Azure DevOps는 이전 시도를 하위 결과로 게시하고, 각 시도의 아티팩트를 해당 아티팩트를 생성한 하위 결과에 연결합니다. 안전한 재시도 상관 관계를 사용할 수 없는 경우 확장은 삭제하는 대신 별도의 결과를 게시합니다.

실시간 게시에서 실행이 생성되면 완료되기 전에 결과를 확인할 수 있도록 실행 URL을 출력합니다. 또한 파이프라인 환경에서 이를 제공하는 경우 pipelineReference 및 시작 날짜도 전송합니다. 빌드의 테스트 탭에는 진행 중인 실행이 나열되지 않습니다. 완료 후 실행을 나열합니다.

GitHub Actions 보고서

GitHub Actions 보고서는 GitHub Actions 고유의 워크플로 명령을 출력하므로 테스트 실행 시 실행기에서 뛰어난 사용 경험을 제공합니다. 여기에는 어셈블리별 로그 그룹, 실패하거나 건너뛴 테스트에 대한 주석(워크플로의 Annotations 탭에 표시되며, 소스 위치를 확인할 수 있는 경우 풀 리퀘스트의 Files changed diff에도 표시됨), GITHUB_STEP_SUMMARY가 가리키는 파일에 추가되는 Markdown 작업 요약, 그리고 느린 테스트 알림이 포함됩니다.

이 확장에는 Microsoft.Testing.Extensions.GitHubActionsReport NuGet 패키지가 필요합니다.

확장은 실행이 GitHub Actions 있고(GITHUB_ACTIONS환경 변수가true) 스위치가 --report-gh 설정된 경우에만 활성화됩니다. 그렇지 않으면 아무 작업도 수행하지 않습니다. 활성 상태인 경우 각 기능은 기본적으로 사용하도록 설정되며 해당 --report-gh-* 옵션을 사용하여 개별적으로 해제할 수 있습니다.

Important

--report-gh 옵션은 Microsoft.Testing.Extensions.GitHubActionsReport에 속합니다. GitHubActionsTestLogger 패키지는 다른 옵션을 --report-github제공합니다. 옵션은 별칭이 아니며 테스트 프로젝트에서 옵션을 소유한 패키지를 등록하는 경우에만 작동합니다.

비고

확장은 MTP 2.3.0부터 사용할 수 있습니다. MTP 2.4.0부터 퍼블릭 진입점은 더 이상 실험적이 아닙니다.

수동 등록

var builder = await TestApplication.CreateBuilderAsync(args);
builder.AddGitHubActionsProvider();

옵션

Option MTP 버전 Description
--report-gh 2.3.0 테스트 실행 시 워크플로 명령을 내보내도록 GitHub Actions 보고서 생성기를 사용하도록 설정합니다. 해당 실행은 GitHub Actions에서 실행되어야 합니다.
--report-gh-groups 2.3.0 어셈블리별 로그 그룹을 사용하거나 사용하지 않도록 설정합니다. 유효한 값은 on (기본값) 및 off. --report-gh가 필요합니다.
--report-gh-annotations 2.3.0 실패한 테스트와 건너뛴 테스트에 대한 주석을 사용하거나 사용하지 않도록 설정합니다. 유효한 값은 on (기본값) 및 off. --report-gh가 필요합니다.
--report-gh-step-summary 2.3.0 확장이 Markdown 작업 요약을 GITHUB_STEP_SUMMARY가 가리키는 파일에 기록할지 여부를 제어합니다. 유효한 값은 on (기본값) off및 MTP 2.4.0 on-failure부터 시작합니다. --report-gh가 필요합니다.
--report-gh-step-summary-sections 2.4.0 요약 콘텐츠를 선택합니다. 유효한 값은 , slow-tests, coverageall (기본값)입니다test-results. --report-ghoff가 아닌 요약 모드가 필요합니다.
--report-gh-failure-details 2.4.0 작업 요약에서 제한된 오류 세부 정보를 사용하거나 사용하지 않도록 설정합니다. 사용 on (기본값) 또는 off. 세부 정보에는 메시지, 예외 유형, 원본 위치 및 사용 가능한 경우 스택 추적이 포함됩니다. --report-gh가 필요합니다.
--report-gh-history 2.4.0 지정된 파일 경로에서 바인딩된 로컬 테스트 기록 스냅샷을 읽고 업데이트합니다. 워크플로는 실행하기 전에 이전 스냅샷을 다운로드하고 나중에 업데이트된 파일을 업로드해야 합니다. --report-gh가 필요합니다.
--report-gh-history-window 2.4.0 보존된 기록 기간을 1일에서 90일로 설정합니다. 기본값은 30일입니다. --report-gh-history가 필요합니다.
--report-gh-slow-test-notices 2.3.0 느린 테스트 알림을 사용하거나 사용하지 않도록 설정합니다. 유효한 값은 on (기본값) 및 off. --report-gh가 필요합니다.
--report-gh-slow-test-threshold 2.3.0 느린 테스트 알림이 표시되기 전에 테스트를 실행할 수 있는 시간입니다. 초를 나타내는 숫자만 입력하거나 90s, 2m, 1.5h와 같은 단위 접미사가 붙은 값을 허용합니다. 기본값은 60s입니다. --report-gh가 필요합니다.

MTP 2.4.0부터 GitHub Actions Markdown은 호출의 모든 테스트 모듈에서 dotnet test 집계 결과를 요약합니다. 또한 코드 커버리지를 사용하도록 설정한 경우, coverage 또는 all을 선택하여 커버된 수와 전체 수, 백분율, 임계값 결과, 그리고 커버리지 데이터가 부분적인 경우 이를 나타내는 표시기를 포함할 수 있습니다.

오류 세부 정보는 제한된 메시지, 스택, 실패 수 및 전체 요약 예산 내에 유지됩니다. 콘텐츠가 제한을 초과하면 보고서가 잘리거나 압축되며 요약의 축소가 표시됩니다.