如何使用 dotnet vstest 只运行以前失败的测试

lau*_*jpn 5 vstest .net-core vstest.console.exe

我有一个包含超过 10,000 个测试的测试套件,有时只想使用 CLI 重新运行上次运行失败的测试dotnet vstest

lau*_*jpn 5

我最终使用以下 PowerShell 命令,根据以下位置的最新trx文件再次运行之前失败的测试.\TestResults\

dotnet vstest '.\bin\Debug\netcoreapp3.0\MyTests.dll' /Logger:trx /Tests:"$((Select-Xml -Path (gci '.\TestResults\' | sort LastWriteTime | select -last 1).FullName -XPath "//ns:UnitTestResult[@outcome='Failed']/@testName" -Namespace @{"ns"="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"}).Node.Value | % {$_ -replace '^My\.Long\.And\.Tedious\.Namespace\.', ''} | % {$_ -replace '^(.*?)\(.*$','$1'} | Join-String -Separator ','))"

请注意,最大命令行长度有字符限制,当许多测试之前失败时,很容易达到该限制。如果可以的话,使用该% {$_ -replace '^My\.Long\.And\.Tedious\.Namespace\.', ''}部分来摆脱名称空间前缀。

  • ```dotnet test .\MyUnitTests\bin\Debug\net5.0\MyUnitTests.dll --logger "trx;LogFileName=MyUnitTests_01.xml" --results-directory .\TestResults --logger "console;verbosity=minimal" --filter ("DisplayName~" + ((Select-Xml -Path .\TestResults\MyUnitTests.xml -XPath "//ns:UnitTestResult[@outcome='Failed']/@testName" -Namespace @{"ns" ="http://microsoft.com/schemas/VisualStudio/TeamTest/2010"}).Node.Value | % {$_ -replace '^MyUnitTests\.', ''} | % {$_ -replace '^ (.*?)\(.*$','$1'} | Join-String -Separator ' | DisplayName~'))``` (3认同)