每個報表選項都需要在其區段中指定的擴充套件。 直接新增套件,或使用包含套件的測試 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} |
流程架構,例如 x64、 x86、 或 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 提供分別用於 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 預覽版開始,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 中顯示失敗。
此擴充套件需要 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 日誌的可摺疊區塊中。 有效值為 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 | 查詢 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-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 預設會停用群組。 僅在單一組件或序列化的組件執行情況下傳遞 --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.GitHubActionsReport。
GitHubActionsTestLogger 套件提供另一個選項。 --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-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,以包含已涵蓋與總數的計數、百分比、臨界值結果,以及當涵蓋範圍資料不完整時的指示器。
故障詳細資料會維持在訊息、堆疊、失敗次數和整體摘要各自的有限預算範圍內。 當內容超過限制時,報告會將其截斷或濃縮,並在摘要中說明這項縮減。