テスト レポート

各レポート オプションには、そのセクションに名前が付けられた拡張機能パッケージが必要です。 パッケージを直接追加するか、それを含むテスト SDK 構成またはプロファイルを使用します。 レポート拡張機能は MTP コアの一部ではありません。そのため、テスト アプリケーションで拡張機能が登録されていない場合、 --report-trx などのオプションは認識されません。 --helpを使用してテスト アプリケーションを実行するか、MTP モードでdotnet test --helpを実行して、オプションが使用可能であることを確認します。

ヒント

Microsoft.Testing.Platform.MSBuild (MSTest、NUnit、xUnit ランナーによって推移的に含まれる) を使用する場合、これらの拡張機能は NuGet パッケージをインストールするときに自動的に登録されます。コードの変更は必要ありません。 この記事で指定されている手動登録は、 <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>設定して自動生成されたエントリ ポイントを無効にした場合にのみ必要です。

レポート ファイル名

すべてのレポート拡張機能は、 --results-directory オプションで設定できるテスト結果ディレクトリにファイルを書き込みます。 名前をオーバーライドするには、一致する --report-*-filename オプションを使用します。 各レポート セクションには、そのレポートの既定の名前が一覧表示されます。

ファイル名には、テスト結果ディレクトリ内に留める相対パスを含めることができます。また、次の置換項目 (プレースホルダー) を使用できます。

プレースホルダー [説明]
{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 以降、MTP は、 dotnet test 呼び出しで複数のテスト モジュールが実行された後、または再試行サポートが複数回実行された後に、レポート成果物を自動的に処理します。 この機能は MTP 2.4.0 では試験段階です。

TRX、JUnit、CTRF、および HTML 拡張機能は、レポートの種類別に互換性のある成果物をグループ化し、テスト結果ディレクトリの merged サブディレクトリの下に統合レポートを記述します。 CTRF の統合では、モジュールの結果が結合され、再試行は再試行履歴を含む最終テスト結果に集約されます。 HTML 統合では、マージされた概要が作成され、元のプロセスごとのレポートが保持されます。

カスタム レポート拡張機能の場合、試験的な IArtifactPostProcessor API では、個別の TestModules と RetryAttempts の処理モードが公開されます。 詳細については、「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 フィールドが含まれています。

注

MTP バージョン 2.3.0 以降で使用できます。TRX の結果は、実行の進行に応じてディスクにストリーム配信されます。 テスト ホストがクラッシュした場合、TRX ファイルはクラッシュ前に収集された結果を保持します。

MTP 2.4 以降では、プラットフォームにテスト ホスト コントローラーがある場合、TRX はコントローラーによる復旧を既定で使用します。 ブラウザー、WASI、iOS、および tvOS では、インプロセス互換性パスが使用されます。

MTP 2.4 以降では、MTP で生成された TRX は MSTest [WorkItem] と [GitHubWorkItem] メタデータを保持します。

オプション

Option [説明]
--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 [説明]
--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>でこの拡張機能を有効にします。 拡張機能は、MSTest.Sdk プロファイル Default または AllMicrosoft の一部ではありません。

手動登録

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

オプション

Option [説明]
--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 [説明]
--report-ctrf CTRF JSON レポートを生成します。
--report-ctrf-filename 生成された CTRF JSON レポートの名前。 値は .jsonで終わる必要があります。 既定値は <UserName>_<MachineName>_<assembly>_<tfm>_<timestamp>.ctrf.json です。 名前をカスタマイズするには、「 レポート ファイル名」を参照してください。 --report-ctrf が必要です。

MTP 2.4 以降では、複数のテストで同じ UID が使用されている場合、CTRF はすべての結果を保持します。 また、テストごとの添付ファイルと試行前の添付ファイルも含まれており、ファイル名から MIME の種類が推測されます。

再試行されたテストの場合、CTRF では、リレーションシップが明確な場合にのみ試行が関連付けられます。 その後、以前の試行を retryAttemptsに記録し、 retriesを設定し、後で成功した結果を flaky: trueとしてマークします。 あいまいな同一 UID の結果は分離されたままであるため、レポートでは診断が間違ったテストに関連付けられません。

MTP 2.5 プレビュー以降、 testId はフレームワークの完全な MTP テスト ノード UID から派生します。 レポーターは、予約済みの ID 名前空間内の値をエスケープし、長い UID は切り捨てる代わりに決定論的な SHA-256 ID を使用します。 報告された各実行は executionIdで新しい UUID を受け取り、それ以前の再試行は独自の attemptIdを受け取ります。 互換性フィールド extra.uid 元の MTP UID が保持されます。 添付ファイルのパスは不透明な値のままであり、リモート コンシューマーがアクセスできないローカル ファイルを指すことができます。

ターミナルの概要では、不安定なテストと再試行されたテストが識別されます。 TRX レポートと JUnit レポートでは、すべての試行を記録するのではなく、テストごとに 1 つの最終結果が保持されます。

Azure DevOps レポート

Azure DevOps レポート拡張機能は、MTP テストの実行をAzure Pipelinesと統合します。 パイプライン ログのエラーと警告の書式設定、失敗したテストとスキップされたテストの注釈の追加、Markdown ジョブの概要の作成、テスト アセンブリ別の出力のグループ化を行うことができます。 拡張機能では、不安定または検疫されたエラーを特定し、テスト成果物をアップロードし、結果をAzure DevOpsのテスト実行にストリーミングすることもできます。

GitHubでコードをホストするが、Azure Pipelines エージェントでテストを実行すると、GitHub pull request にエラー注釈が直接表示されることがあります。

 PR ファイル ビューの GitHubエラー注釈

この拡張機能には、 Microsoft.Testing.Extensions.AzureDevOpsReport NuGet パッケージが必要です。

手動登録

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

オプション

Option MTP のバージョン [説明]
--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 ログの折りたたみ可能なセクションに表示されます。 有効値は on または off です。 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-slow-test-history 2.3.0 Azure DevOps に問い合わせて、指定された日数分のテスト結果の履歴を取得し、実行時間が短いことが既知のテストについて、テストごとの「実行中」しきい値を引き下げます。 1 ~ 90 の整数を 1 つだけ受け入れます。 十分な数の履歴サンプルがある場合、しきい値は 60 秒と、履歴上の p99 所要時間に設定された乗数を掛けた値のいずれか低い方です。 --report-azdo が必要です。
--report-azdo-slow-test-history-min-sample 2.3.0 拡張機能がテストの履歴を使用して低速テストのしきい値を調整したり、履歴の詳細を低速テスト出力行に追加したりする前に必要な履歴サンプルの最小数を設定します。 1 以上の整数を 1 つだけ受け入れます。 既定値は 10 です。 --report-azdo-slow-test-history が必要です。
--report-azdo-slow-test-history-multiplier 2.3.0 テストの過去の p99 期間に適用される乗数を設定して、低速テストのしきい値を計算します。 0 より大きく最大 10,000 を超えるインバリアント カルチャ浮動小数点値を 1 つだけ受け入れます。 デフォルトは3です。 --report-azdo-slow-test-history が必要です。
--report-azdo-quarantine-file 2.3.0 隔離されたテストの完全修飾名またはグロブ パターンが記載されたテキスト ファイルへのパス。 一致するエラーは警告として報告されます。 --report-azdo が必要です。
--report-azdo-summary 2.3.0 テストの実行の最後に Markdown ジョブの概要を書き込み、 ##vso[task.uploadsummary]経由でアップロードします。 省略可能なファイル パス引数は、既定の場所 ({testResultsDir}/azdo-summary-{assembly}-{tfm}-{arch}.md) をオーバーライドします。 --report-azdo が必要です。
--report-azdo-stackframe-filter 2.3.0 各スタック フレームの完全修飾型プレフィックスに一致する正規表現パターンを追加します。これは、注釈を付けるために拡張機能がユーザーの呼び出しサイトを見つけたときにスキップされます。 このオプションは繰り返し可能で、最大 16 パターンで、各パターンは 500 ミリ秒の一致タイムアウトでコンパイルされます。 これらのパターンは、拡張機能の組み込みの MSTest アサーション実装プレフィックスに追加されます。 --report-azdo が必要です。
--report-azdo-upload-artifacts 2.3.0 テスト結果ファイルをアップロードしたり、ビルド タグをAzure DevOpsに追加したりします。 有効な値は、 off (既定値)、 tags-only、 files、および allです。
--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

複数のテスト アセンブリを並列で実行する場合は、グループを有効にしないでください。 Azure DevOps ##[group]および##[endgroup]書式設定コマンドは、順次および匿名です。 並行して行われるアセンブリ出力では、データが混在したり、グループのネストが不正確になったり、誤ったアセンブリの配下に行が配置されたりする可能性があります。 MTP 2.4.0 プレビュー ビルドを使用する場合は、 --report-azdo-groups off を渡してグループを無効にします。 安定した MTP 2.4.0 リリースでは、既定でグループが無効になります。 1 つのアセンブリまたはシリアル化されたアセンブリの実行に対してのみ、 --report-azdo-groups on を渡します。

注

[MTP バージョン] 列には、各オプションを含む最初の MTP バージョンが一覧表示されます。 Azure DevOps拡張機能自体は、MTP 1.9.0 で--report-azdoと--report-azdo-severityで安定しました。残りのオプションは MTP 2.3.0 または 2.4.0 で追加されました。

拡張機能は、 TF_BUILD 環境変数を確認することで、継続的インテグレーション (CI) 環境で実行されていることを自動的に検出します。

Important

Azure DevOps履歴クエリには、TF_BUILD=true、SYSTEM_COLLECTIONURI、SYSTEM_TEAMPROJECT、SYSTEM_ACCESSTOKEN、およびBUILD_DEFINITIONIDが必要です。 値がない場合、MTP は履歴データなしで続行され、不安定な履歴注釈はスキップされ、低速テスト行には静的な 60 秒のしきい値が使用されます。

--publish-azdo-test-resultsを使用したライブ 発行には、TF_BUILD=true、SYSTEM_COLLECTIONURI、SYSTEM_TEAMPROJECT、SYSTEM_ACCESSTOKEN、およびBUILD_BUILDIDが必要です。 値が見つからないか無効な場合、MTP は警告を表示し、テストの実行を発行しません。

MTP 2.4.0 以降、Azure DevOps Markdown では、dotnet test呼び出しのすべてのテスト モジュール全体の結果が集計されます。 また、コード カバレッジを有効にすると、対象データと合計カウント、パーセンテージ、しきい値の結果、カバレッジ データが部分的な場合のインジケーターが概要に含まれます。

MTP 2.5 プレビュー以降、概要には、合格率、不安定なテスト履歴、期間の比較、テスト依存関係のエッジ、集中した障害診断、およびマルチモジュール実行用のコンパクトな決定論的レイアウトも表示されます。

MTP 2.4 以降、ライブ パブリッシングでは、失敗した結果に対する添付ファイルが Azure DevOps のテスト結果に自動的にアップロードされます。 失敗した結果には、失敗、エラー、タイムアウト、取り消された結果が含まれます。

結果が標準出力または標準エラーを提供する場合、拡張機能は各インライン ストリームの最大 256 KiB をアタッチできます。 各ファイルベースの添付ファイルの上限は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 差分にも表示)、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 のバージョン [説明]
--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 概要コンテンツを選択します。 有効な値は、 test-results、 slow-tests、 coverage、および all です (既定値)。 --report-ghと、off以外の概要モードが必要です。
--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 を選択して、対象となるカウントと合計カウント、パーセンテージ、しきい値の結果、カバレッジ データが部分的な場合のインジケーターを含めます。

エラーの詳細は、メッセージ、スタック、失敗件数、および概要全体に割り当てられた上限内に収まります。 コンテンツが制限を超えると、レポートはコンテンツを切り捨てたり圧縮したりして、要約の縮小を示します。