VSTest.Console.exe 是用于运行测试的命令行工具。 可以在命令行上按任意顺序指定多个选项。 这些选项列在 常规命令行选项。
注意
Visual Studio 中的 MSTest 适配器也适用于旧模式(相当于使用 mstest.exe运行测试),以便兼容。 在旧模式下,它不能利用 TestCaseFilter 功能。 指定 testsettings 文件时,适配器可以切换到旧模式,forcelegacymode 设置为 runsettings 文件中的 true,或使用 HostType等属性。
若要在基于 ARM 体系结构的计算机上运行自动测试,必须使用 VSTest.Console.exe。
打开 开发人员命令提示符 以使用命令行工具,也可以在 %Program Files(x86)%\Microsoft Visual Studio\<版本>\<版本>\common7\ide\CommonExtensions\<Platform 中找到该工具 |Microsoft>。
常规命令行选项
下表列出了用于 VSTest.Console.exe 的常用选项及其简短说明。 可以通过在命令行中键入 VSTest.Console/? 来查看类似的摘要。 有关完整参考,包括此处未列出的内部和旧交换机,请参阅 vstest.console.exe 命令行选项 ,并在 vstest 存储库中专门 省略了开关 。
| 选择 | 描述 |
|---|---|
| [测试文件名] | 从指定的文件运行测试。 使用空格分隔多个测试文件名。 示例: 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、、x64ARMARM64S390x、Ppc64le、 RiscV64和。LoongArch64在Windows上,只能可靠地强制 x86 和 x64;在 ARM大多数系统上指定结果 x64。 不要指定此选项以在不在有效值列表中的运行时上运行。 |
| /Framework:[框架版本] | 要用于测试执行的 .NET 版本。 NuGet 框架分析器(例如 net48net6.0,或net10.0(以及诸如和.NETCoreApp,Version=v10.0).NETFramework,Version=v4.8的长形式接受和分析新式框架短表单。旧别名、 Framework40旧Framework45别名Framework35和FrameworkCore10FrameworkUap10也将被接受。TargetFrameworkAttribute 用于自动检测程序集中的此选项,默认为 Framework40 属性不存在时。 如果从 .NET Core 程序集中删除 TargetFrameworkAttribute,则必须显式指定此选项。如果目标框架指定为 Framework35,则测试在 CLR 4.0“兼容模式”中运行。 示例: /Framework:net8.0 |
| /TestCaseFilter:[表达式] | 运行与给定表达式匹配的测试。 <表达式> 的格式为 <属性>=<值>[|<表达式>]。 示例: /TestCaseFilter:"Priority=1"示例: /TestCaseFilter:"TestCategory=Nightly|FullyQualifiedName=Namespace.ClassName.MethodName"/TestCaseFilter 命令行选项不能与 /Tests 命令行选项一起使用。 有关创建和使用表达式的信息,请参阅 TestCase 筛选器。 直接在 shell 中键入筛选器时,请参阅 shell 中的转义筛选器表达式。 |
| /Environment:[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。有关完整选项矩阵和转储收集要求,请参阅 “责任数据收集器”。 |
| /Diag:[文件名] | 将诊断跟踪日志写入指定文件。 使用 /Diag:<file name>;tracelevel=<off\|error\|warning\|info\|verbose> (默认值为 verbose) 设置跟踪级别。 |
| /ResultsDirectory:[路径] | 如果不存在,将在指定路径中创建测试结果目录。 示例: /ResultsDirectory:<pathToResultsDirectory> |
| /ParentProcessId:[parentProcessId] | 负责启动当前进程的父进程的进程 ID。 |
| /Port:[端口] | 套接字连接的端口和接收事件消息。 |
| /Collect:[dataCollector friendlyName] | 为测试运行启用数据收集器。 详细信息。 |
| @[file] | 从指定的响应文件读取其他选项。 文件中的参数由空格(空格或换行符)分隔,并且支持引用,因此选项可以跨越多行。 示例: 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
以下命令使用测试库 myTestProject.dll的 /blame 选项运行 vstest.console.exe:
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 文件配置单元测试。
在 shell 中转义筛选器表达式
/TestCaseFilter 表达式由 shell 和测试平台分析,因此某些字符需要特定于 shell 的转义才能 vstest.console.exe 接收它们。 引用整个表达式(如本文前面的示例所示)可避免大多数问题。 以下情况需要额外的照顾:
PowerShell:逗号 (
,) 是数组运算符,分号 (;) 是语句分隔符。 引用整个筛选器表达式,以便它按字面传递,例如/TestCaseFilter:"FullyQualifiedName=MyNamespace.MyClass.MyMethod"。Bash 和 zsh (Linux 和 macOS):使用
!~反斜杠转义!(不包含)运算符,例如--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、testhost 和数据收集器)之间建立连接。 默认值为 90。 在慢速计算机或网络延迟导致连接超时时增加它。 |
VSTEST_DIAG |
启用诊断日志记录并指定日志文件的路径。 等效于 /Diag 选项。 |
VSTEST_DIAG_VERBOSITY |
设置启用时 VSTEST_DIAG 诊断日志记录的详细程度。 有效值为 Verbose,Info和 WarningError (默认值为 Verbose) 。 |
VSTEST_HOST_DEBUG |
设置为任何非空值以启用 testhost 进程的调试。 |
VSTEST_RUNNER_DEBUG |
设置为任何非空值以启用运行程序调试(vstest.console.exe)。 |
VSTEST_DUMP_PATH |
重写存储故障转储的默认目录。 |
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 test 命令参考