VSTest.Console.exe 命令行選項

VSTest.Console.exe 是用來執行測試的命令行工具。 您可以在命令列上依任何順序指定數個選項。 這些選項列在 一般命令行選項

注意

Visual Studio 中的 MSTest 配接器也適用於舊版模式(相當於使用 mstest.exe執行測試),以取得相容性。 在舊版模式中,它無法利用 TestCaseFilter 功能。 當指定 testsettings 檔案時,適配卡可以切換至舊版模式,forcelegacymode 設定為 truerunsettings 檔案,或使用 hostType 等屬性。

若要在 ARM 架構型電腦上執行自動化測試,您必須使用 VSTest.Console.exe

開啟 開發人員命令提示字元 以使用命令行工具,或者您可以在 %Program Files(x86)%\Microsoft Visual Studio\<版本>\<版本>\common7\ide\CommonExtensions\<Platform 中找到工具 |Microsoft>

一般命令行選項

下表列出常用的 VSTest.Console.exe 選項及簡短說明。 您可以在命令行輸入 VSTest.Console/?,以查看類似的摘要。 完整參考資料,包括未在此列出的內部及舊有交換器,請參閱 vstest 倉庫中的 vstest.console.exe 命令列選項 及具體 省略交換器

選擇 描述
[測試檔名] 從指定的檔案執行測試。 使用空格分隔多個測試檔名。
範例:mytestproject.dllmytestproject.dll myothertestproject.exe
/Settings:[檔名] 使用其他設定來執行測試,例如數據收集器。 如需詳細資訊,請參閱 使用 .runsettings 檔案設定單元測試
範例:/Settings:local.runsettings
/Tests:[測試名稱] 使用包含所提供值的名稱來執行測試。 此命令會與完整測試名稱相符,包括命名空間。 若要提供多個值,請以逗號分隔它們。
範例:/Tests:TestMethod1,testMethod2
/Tests 命令列選項不能與 /TestCaseFilter 命令列選項一起使用。
/Parallel 指定平行執行測試。 根據預設,計算機上最多可以使用所有可用的核心。 您可以設定要用於設定檔的核心數目。
/InIsolation 在隔離進程中執行測試。
此隔離會使 vstest.console.exe 程式不太可能在測試中發生錯誤時停止,但測試的執行速度可能會變慢。
/TestAdapterPath:[路徑] 強制 vstest.console.exe 進程使用來自測試回合中指定路徑(如果有的話)的自定義測試配接器。
範例:/TestAdapterPath:[pathToCustomAdapters]
/Platform:[平台類型] 強制使用指定的平台架構,而非從當前執行時決定的平台。 數值不區分大小寫;公認的值為 x86x64ARMARM64RiscV64S390xPpc64leLoongArch64和 。
在 Windows 上,只有 x86 和 x64 可以可靠地強制執行;在大多數系統中,指定ARM會變成 x64。 不要指定這個選項讓執行時不在有效值清單中執行。
/Framework: [framework version] 要用於測試執行的目標 .NET 版本。
現代框架的簡短形式被 NuGet 框架的解析器接受並解析,例如 net48、 、 net6.0net10.0 (以及長形式如 .NETFramework,Version=v4.8.NETCoreApp,Version=v10.0)。
遺留別名為 Framework35Framework40Framework45FrameworkCore10、 也 FrameworkUap10 被接受。
TargetFrameworkAttribute 用來自動偵測這個選項,當該屬性不存在時會自動 Framework40 偵測。 如果您從 .NET Core 元件中移除 TargetFrameworkAttribute,則必須明確指定此選項。
如果目標架構指定為 Framework35,測試會在 CLR 4.0「相容性模式」中執行。
範例:/Framework:net8.0
/TestCaseFilter:[表示式] 執行符合指定表達式的測試。
<Expression> 的格式 <屬性>=<值>[|<Expression>]。
範例:/TestCaseFilter:"Priority=1"
範例:/TestCaseFilter:"TestCategory=Nightly|FullyQualifiedName=Namespace.ClassName.MethodName"
/TestCaseFilter 命令列選項不能與 /Tests 命令列選項一起使用。
如需建立和使用表示式的相關信息,請參閱 TestCase 篩選。 當你直接在 shell 中輸入濾波器時,請參考 shell 中的 Escape 濾波器表達式
/環境:[NAME]=[VALUE] 設定測試主機程序的環境變數值。 如果變數不存在,它會建立;如果存在,則覆蓋它。 此選項包含 /InIsolation ,並強制測試在隔離程序中執行。 多次指定設定多個變數的選項。 簡短形式: /e
範例:/e:VARIABLE1=VALUE1
/? 顯示使用方式資訊。
/Logger:[uri/friendlyname] 指定測試結果的記錄器。 指定參數多次以啟用多個記錄器。
範例:若要將結果記錄至 Visual Studio 測試結果檔案 (TRX),請使用
/Logger:trx
[;LogFileName=<預設為唯一的檔名>]
LogFilePrefix=<prefix> 代替 LogFileName ,為每次執行都保留一個獨立且有時間戳記的檔案。 LogFileNameLogFilePrefix 設定明確名稱並覆蓋前一個檔案,而不會。
更多資訊請參閱 日誌範例
/ListTests:[檔名] 列出來自指定測試容器的探索測試。 簡短表態: /lt
注意:列出測試時,/TestCaseFilter 選項沒有作用;它只會控制要執行的測試。
/Blame 以指責模式執行測試。 此選項有助於隔離造成測試主機當機的問題測試。 偵測到當機時,它會在 TestResults/<Guid>/<Guid>_Sequence.xml 中建立序列檔案,以擷取損毀前執行的測試順序。
你也可以收集崩潰或懸掛的傾倒,例如/Blame:CollectDump;DumpType=full/Blame:CollectHangDump;TestTimeout=90m;HangDumpType=mini。 等效 dotnet test 的開關是 --blame-crash--blame-hang
完整的選擇權矩陣及傾倒收集要求,請參見 Blame 資料收集器
/Diag:[檔名] 將診斷追蹤記錄寫入指定的檔案。
將走線電平設定為( /Diag:<file name>;tracelevel=<off\|error\|warning\|info\|verbose> 預設為 verbose)。
/ResultsDirectory:[路徑] 如果不存在,將會在指定的路徑中建立測試結果目錄。
範例:/ResultsDirectory:<pathToResultsDirectory>
/ParentProcessId:[parentProcessId] 負責啟動目前進程之父進程的進程標識碼。
/Port:[連接埠] 套接字連線和接收事件訊息的埠。
/Collect:[dataCollector friendlyName] 啟用測試回合的數據收集器。 詳細資訊
@[檔案] 從指定的回應檔案讀取額外選項。 檔案中的參數以空格(空格或換行)分隔,且支援引號,因此選項可以跨越多行。
範例:vstest.console.exe @options.rsp

提示

選項和數值並不區分大小寫。

例子

執行 vstest.console.exe 的語法為:

vstest.console.exe [TestFileNames] [Options]

根據預設,即使沒有探索到任何測試,命令也會在正常結束時傳回 0。 如果您想要在未探索到任何測試時傳回非零值,請使用 <TreatNoTestsAsError>true</TreatNoTestsAsError> runsettings 選項。

下列命令會針對測試連結庫 myTestProject.dll執行 vstest.console.exe

vstest.console.exe myTestProject.dll

下列命令會使用多個測試檔案執行 vstest.console.exe。 以空白分隔測試檔名稱:

vstest.console.exe myTestFile.dll myOtherTestFile.dll

下列命令會以數個選項執行 vstest.console.exe。 它會在隔離程式中執行 myTestFile.dll 檔案中的測試,並使用 Local.RunSettings 檔案中指定的設定。 此外,它只會執行標示為 「Priority=1」 的測試,並將結果記錄至 .trx 檔案。

vstest.console.exe myTestFile.dll /Settings:Local.RunSettings /InIsolation /TestCaseFilter:"Priority=1" /Logger:trx

下列命令會使用測試連結庫的 選項執行 /blamemyTestProject.dll

vstest.console.exe myTestFile.dll /blame

如果測試主機當機發生,就會產生 sequence.xml 檔案。 檔案包含測試的完整名稱,其執行順序最多,包括當機時執行的特定測試。

如果沒有測試主機當機, sequence.xml 檔案就不會產生。

產生的 sequence.xml 檔案範例:

<?xml version="1.0"?>
<TestSequence>
  <Test Name="TestProject.UnitTest1.TestMethodB" Source="D:\repos\TestProject\TestProject\bin\Debug\TestProject.dll" />
  <Test Name="TestProject.UnitTest1.TestMethodA" Source="D:\repos\TestProject\TestProject\bin\Debug\TestProject.dll" />
</TestSequence>

在此情況下, <Test Name> 最後列出的測試是事故發生時正在進行的測試。

出口代碼

vstest.console.exe 會回傳兩種出口代碼之一:

Code Meaning
0 成功。 所請求的操作已完成,測試運行時所有執行的測試都通過了。
1 蹉。 例如,一個或多個測試失敗、執行錯誤被回報、指令列無效或遺失、測試來源無法載入,或執行中止或取消。

這個程序從未回傳其他任何值。 當你透過 dotnet test執行測試時,.NET SDK 會顯示一個非零的退出碼,當執行失敗時,情況相同。

當發現過程中找不到匹配的測試時,執行者會印出 警告 而非錯誤,且預設仍返回 0。 要執行一個發現或選擇零測試的執行1,請在 .runsettings 檔案的 RunConfiguration 元素中設定<TreatNoTestsAsError>true</TreatNoTestsAsError>。 欲了解更多資訊,請參閱 使用 .runsettings 檔案配置單元測試

殼層中的跳脫過濾器表達式

/TestCaseFilter 表達式會被你的 shell 和測試平台解析,因此有些字元需要特定的 shell 轉脫才能 vstest.console.exe 接收。 像本文前述的例子一樣,引用整個表達式可以避免大多數問題。 以下情況需要特別注意:

  • PowerShell:逗號(,)是陣列運算子,分號(;)是陳述式分隔符。 引用整個濾波器表達式,讓它字面上通過,例如 /TestCaseFilter:"FullyQualifiedName=MyNamespace.MyClass.MyMethod"

  • Bash 和 zsh(Linux 和 macOS):使用 !~not contains) 操作符時,可以用反斜線 Escape!,例如 --filter FullyQualifiedName\!~IntegrationTestsdotnet test。 同時引用包含對 shell 有特殊意義字元的值,例如 <>,或 , 在一般型別的參數列表中:

    dotnet test --filter "FullyQualifiedName=MyNamespace.MyClass<Type1,Type2>.MyMethod"
    

欲了解完整的篩選參考及各測試框架支援的屬性,請參見 TestCase 篩選器

記錄範例

每個記錄器都有自己的參數。 和 trx 不同的是,控制台記錄器可以設定冗長程度。 如需更多資訊,請在命令列輸入 VSTest.Console/?

這裡有一個控制台記錄器的範例:

vstest.console.exe myTestFile.dll /logger:console;verbosity=detailed

支援的冗長程度包括安靜、極簡、正常和詳細。

在 PowerShell 中,你需要使用引號:

vstest.console.exe myTestFile.dll /logger:"console;verbosity=detailed"

關於可用記錄器的完整清單,以及如何自行撰寫記錄器的說明,請參見 vstest 儲存庫中的 測試結果 報告。

UWP 範例

針對UWP,必須參考appxrecipe檔案,而不是 DLL。

vstest.console.exe /Logger:trx /Platform:x64 /framework:frameworkuap10 UnitTestsUWP\bin\x64\Release\UnitTestsUWP.build.appxrecipe

環境變數

測試平台會識別多個環境變數。 以下是從命令列執行測試時最有用的幾項。 完整清單請參見 vstest 儲存庫中測試 平台所理解的環境變數

Variable 描述
VSTEST_CONNECTION_TIMEOUT 逾時時間為秒,用於建立測試平台元件(vstest.console.exe、測試主機與資料收集器)之間的連線。 預設值為 90。 在慢速機器或網路延遲導致連線逾時時,可以提高頻率。
VSTEST_DIAG 啟用診斷日誌並指定日誌檔案的路徑。 相當於 /Diag 選項。
VSTEST_DIAG_VERBOSITY 設定診斷日誌啟用時 VSTEST_DIAG 的冗長程度。 有效的值為 VerboseInfoWarningError (預設值為 Verbose)。
VSTEST_HOST_DEBUG 設為任意非空值以啟用測試主機程序除錯。
VSTEST_RUNNER_DEBUG 設為任意非空值以啟用執行器除錯(vstest.console.exe)。
VSTEST_DUMP_PATH 會覆寫預設存放 blame crash dump 的目錄。
VSTEST_DUMP_FORCEPROCDUMP 設定為任意非空值,強制使用 ProcDump 來收集當機傾印。
VSTEST_DISABLE_UTF8_CONSOLE_ENCODING 設定為 1 以停用主控台輸出的 UTF-8 編碼。
VSTEST_CONSOLE_PATH .NET SDK dotnet test 轉發應用程式所使用的vstest.console.exe執行檔路徑。 -p:VSTestConsolePath就像你在專案中跑dotnet test的時候一樣。