測試報告

每個報表選項都需要在其區段中指定的擴充套件。 直接新增套件,或使用包含套件的測試 SDK 設定或設定檔。 報告擴充功能不包含在 MTP 核心中,因此當測試應用程式未註冊擴充功能時,像 這樣的 --report-trx 選項無法被識別。 請使用 dotnet test --help 執行測試應用程式,或以 MTP 模式執行 --help,以確認有可用的選項。

小提示

使用 Microsoft.Testing.Platform.MSBuild (由 MSTest、NUnit 和 xUnit 測試框架間接包含)時,這些擴充套件會在安裝 NuGet 套件時自動註冊,不需要改動程式碼。 本文所規定的手動註冊僅在你透過設定 <GenerateTestingPlatformEntryPoint>false</GenerateTestingPlatformEntryPoint>關閉自動產生的入口點時才需要。

報告檔案名稱

每個報告擴充功能都會將檔案寫入測試結果目錄,而該目錄可使用 --results-directory 選項設定。 若要覆寫名稱,請使用匹配 --report-*-filename 選項。 每個報告區塊都會列出該報告的預設名稱。

檔案名稱可以包含一個相對路徑,且該路徑仍停留在測試結果目錄內,並且可以使用以下替換項目(佔位符):

佔位符 Description
{asm} 項目組件名稱,若無法使用則為 unknown
{tfm} 執行時偵測到的目標框架名稱,例如 net9.0
{arch} 流程架構,例如 x64x86、 或 arm64
{pname} 處理序名稱。
{pid} 處理程序識別碼。
{time} 高精度時間戳記。

例如,--report-trx-filename "{asm}_{tfm}_{arch}.trx" 會重現預設的 TRX 名稱。

如果某個測試來源的預設或明確指定的 TRX、HTML 或 JUnit 檔名已存在,擴充功能會發出警告並覆寫該檔案。 從 MTP 2.4 預覽版開始,CTRF 採用相同的行為。 為保留報告歷史,請包含 {time}

備註

預留位置名稱會區分大小寫,並使用小寫字母。 從 MTP 2.3.0 版本起,提供報告檔名的佔位符支援。

報表彙整

從 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 欄位。

備註

自 MTP 2.3.0 版起,TRX 結果會隨著執行過程進行而串流寫入磁碟。 如果測試主機當機,TRX 檔案會保留當機前收集的結果。

從 MTP 2.4 預覽版開始,MTP 產生的 TRX 會保留 MSTest [WorkItem][GitHubWorkItem] 元資料。

選項

選項 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();

選項

選項 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> 啟用此擴充功能。 這個擴充功能不包含在 DefaultAllMicrosoft MSTest.Sdk 的設定檔裡。

手動註冊

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

選項

選項 Description
--report-junit 產生 JUnit XML 報告。
--report-junit-filename 產生的 JUnit XML 報告名稱。 該值必須以 結尾。.xml 預設值為 {asm}_{tfm}_{arch}.xml。 若要自訂名稱,請參見 「報表檔案名稱」。 需要 --report-junit

CTRF報告

CTRF 報告會建立一個 JSON 檔案,該檔案使用 Common Test Report 格式 作為測試會話。 此擴充功能需要 Microsoft。Testing.Extensions.CtrfReport NuGet 套件。

備註

從 2.3.0 版本起,已支援 MTP。 此擴充仍屬實驗性質,未來版本可能會改變選項與輸出格式。

手動註冊

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

選項

選項 Description
--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結果會分開,避免報告將診斷與錯誤的測試聯想在一起。

終端摘要會辨識不穩定且重試的測試。 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();

選項

選項 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 查詢 Azure DevOps 過去 N 天(1–90 天)內的測試結果歷史記錄,並為回報的失敗加上註記,附上測試波動性脈絡。 需要 --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 種模式,且每個模式需有 500 毫秒的匹配超時時間。 這些模式是對擴充套件內建 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

當多個測試組件同時執行時,不要啟用群組。 Azure DevOps ##[group]##[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 測試結果。 未成功的結果包括失敗、發生錯誤、逾時和已取消。

當結果輸出標準或標準誤差時,擴充可連接最多 256 KiB 的每個線上串流。 每個以檔案為基礎的附件,大小上限為 16 MiB。

該擴充功能也會上傳執行層級的 .coverage.cobertura.xml.opencover.xml 檔案,作為程式碼涵蓋範圍附件。 這些測試執行附件和結果附件與 --report-azdo-upload-artifacts 分開,後者會將選取的檔案上傳為 Azure Pipelines 的建置成品。

對於重試測試,Azure DevOps 會將先前嘗試的子結果發布,並將每次嘗試的產物附加到產生這些結果的子結果上。 如果無法取得安全重試關聯資訊,擴充功能會改為發布另一個獨立的結果,而不是將其捨棄。

當即時發佈建立執行作業時,會輸出該執行作業的 URL,讓你在完成前就能追蹤結果。 當管線環境提供這些資訊時,它也會傳送 pipelineReference 和開始日期。 建置版的 測試 標籤中沒有顯示正在進行的運行;它列出完成後的跑動。

GitHub Actions 報表

GitHub Actions 報告會發出 GitHub Actions 原生的工作流程指令,因此測試執行時在執行器上能產生一流的體驗:每個組件的日誌群組、失敗或跳過的測試註解(顯示在工作流程註解標籤中,當來源位置解決後,則在拉取請求的 Files changed diff 中)、Markdown 工作摘要附加於檔案後面,參考如下GITHUB_STEP_SUMMARY,以及慢速測試通知。

此擴充功能需要 Microsoft。Testing.Extensions.GitHubActionsReport NuGet 套件。

這個擴充功能只有在執行在 GitHub Actions(GITHUB_ACTIONS環境變數是 true)且--report-gh切換器已設定時才會啟動;否則不會有任何動作。 啟用時,每個功能預設啟用,並可透過選項 --report-gh-* 單獨關閉。

Important

--report-gh 選項屬於 Microsoft.Testing.Extensions.GitHubActionsReportGitHubActionsTestLogger 套件提供另一個選項。 --report-github 這些選項不是別名,只有當測試專案註冊擁有該選項的套件時才有效。

備註

該擴充功能自 MTP 2.3.0 起提供。 從 MTP 2.4.0 開始,其公開入口不再是實驗性。

手動註冊

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

選項

選項 MTP 版本 Description
--report-gh 2.3.0 啟用 GitHub Actions 報告產生器,測試執行 emit 工作流程指令。 要求此次執行必須在 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-resultsslow-testscoverage、 ( 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 測試在發出慢速測試通知前可執行的時間長度。 接受純秒數或帶有單位後綴的數值,如 90s2m1.5h或 。 預設值為 60s。 需要 --report-gh

從 MTP 2.4.0 開始,GitHub Actions Markdown 會透過調用方式彙整每個測試模組dotnet test的結果。 當您同時啟用程式碼涵蓋範圍時,請選取 coverageall,以包含已涵蓋與總數的計數、百分比、臨界值結果,以及當涵蓋範圍資料不完整時的指示器。

故障詳細資料會維持在訊息、堆疊、失敗次數和整體摘要各自的有限預算範圍內。 當內容超過限制時,報告會將其截斷或濃縮,並在摘要中說明這項縮減。