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.dll、mytestproject.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:[平台類型] | 強制使用指定的平台架構,而非從當前執行時決定的平台。 數值不區分大小寫;公認的值為 x86、 x64、 ARMARM64、 RiscV64S390xPpc64leLoongArch64和 。在 Windows 上,只有 x86 和 x64 可以可靠地強制執行;在大多數系統中,指定 ARM會變成 x64。 不要指定這個選項讓執行時不在有效值清單中執行。 |
| /Framework: [framework version] | 要用於測試執行的目標 .NET 版本。 現代框架的簡短形式被 NuGet 框架的解析器接受並解析,例如 net48、 、 net6.0、 net10.0 (以及長形式如 .NETFramework,Version=v4.8 和 .NETCoreApp,Version=v10.0)。遺留別名為 Framework35、 Framework40、 Framework45、 FrameworkCore10、 也 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 ,為每次執行都保留一個獨立且有時間戳記的檔案。
LogFileName 會 LogFilePrefix 設定明確名稱並覆蓋前一個檔案,而不會。更多資訊請參閱 日誌範例。 |
| /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 的冗長程度。 有效的值為 Verbose、 Info、 Warning、 Error (預設值為 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的時候一樣。 |
相關內容
- 快速入門:從 vstest 倉庫的命令列執行測試
- 使用 .runsettings 檔案來設定單元測試
- 在 vstest 儲存庫建立資料收集器
- dotnet 測試指令參考