sya*_*ani 55 visual-studio-2012 vstest
可能是一个愚蠢的问题,但有人知道如何指定VSTEST.Console.exe运行的输出文件名吗?我的命令行如下:
vstest.console.exe [assembly] /logger:trx
Run Code Online (Sandbox Code Playgroud)
在运行结束时,控制台中会出现以下内容:
ResultsFile: somepath\TestResults\{username}_{workstation} {timestamp}.trx
Run Code Online (Sandbox Code Playgroud)
我尝试使用.runsettings文件来指定输出位置,但这似乎只能控制输出目录,而不是输出文件.没有找到任何似乎可以控制它的东西.
我想解析TRX文件并从中生成一个报告(这已经有效,但如果我不能指定TRX文件的输出路径,我将不知道从脚本中取出它的位置!)
我必须在这里遗漏一些东西......
Ste*_*nev 51
编辑:请参阅@ AnaFranco的答案 - 显然自VS2017以来,文件名可以这样配置:
vstest.console.exe [assembly] /logger:trx;LogFileName=[filename].trx
Run Code Online (Sandbox Code Playgroud)
我将为后代和2017年之前的版本留下旧答案.
不,你没有遗漏任何东西.TRX记录器不支持任何参数(与TFS发布者记录器不同).
记录器组件位于"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\Extensions\Microsoft.VisualStudio.TestPlatform.Extensions.TrxLogger.dll"
.如果你在你最喜欢的.NET反编译器中查看它,你会看到这个方法TrxLogger.GetTrxFileName
.它使用一些关于当前测试运行的基本知识来生成表单的错位名称,{username}_{workstation} {timestamp}.trx
并且没有明显的可配置方式.
据我所知,TRX文件是在TestResults\
当前工作目录下的文件夹中创建的,除非另有配置.你能做的是:
.trx
使用您喜欢的递归文件搜索方法扫描文件夹中的结果文件,您就完成了至少这就是我在构建中所做的(MSBuild,sob):
<ItemGroup>
<TestResult Include="**\*.trx"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
即,收集.trx
当前目录下的所有文件,并将它们填入@(TestResult)
项目组以进行进一步处理.
Kos*_*sau 16
显然,您可以指定放置*.trx文件的目录(尽管不是文件本身).但是,这是通过.runsettings文件而不是通过命令行完成的.
如果需要覆盖结果的默认位置,则用户需要使用runsettings文件传递此值.
例:
Mstest.exe /testcontainer:abc.dll /results:C:\Results.trx
Vstest.console.exe abc.dll /settings:output.runsettings
Run Code Online (Sandbox Code Playgroud)
.runsettings文件的上下文将如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<RunSettings>
<RunConfiguration>
<ResultsDirectory>c:\</ResultsDirectory>
</RunConfiguration>
</RunSettings>
Run Code Online (Sandbox Code Playgroud)
Ana*_*nco 16
这对我来说是有用的测试.net核心我还没有尝试过.net框架:
vstest.console.exe [assembly] /logger:trx;LogFileName=[filename].trx
Run Code Online (Sandbox Code Playgroud)
也许这是一件新事物
更新:这也适用于使用最新Test平台和vstest.console.exe的.net框架项目
小智 10
我也有这个问题.我决定编写一个MSBuild目标,通过EXEC任务执行vstest.console,处理其所有输出,包括覆盖结果.
基本上,我捕获了vstest输出并使用正则表达式捕获输出的*.trx和*.coverage部分,结果非常简单.此外,它还删除了TestResults目录,以保持工作区的整洁.
最后,您将获得*.trx文件和*.coverage文件(可选).
脚本可能看起来有点复杂,但有必要满足我们的需求.我试着把它清理一下.希望这可以帮助.
<Target Name="Test" DependsOnTargets="Build">
<!-- Declare the defaults and arrange parameters -->
<PropertyGroup>
<ArtifactsPath Condition=" '$(ArtifactsPath)' == '' ">Artifacts</ArtifactsPath>
<VSTestSessionName Condition=" '$(VSTestSessionName)' == ''">TestResults</VSTestSessionName>
<VSTestExe Condition=" '$(VSTestExe)' == '' ">C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe</VSTestExe>
<VSTestFailBuildOnTestFail Condition=" '$(VSTestFailBuildOnTestFail)' == '' ">false</VSTestFailBuildOnTestFail>
<VSTestInIsolation Condition=" '$(VSTestInIsolation)' == '' ">true</VSTestInIsolation>
<VSTestUseVsixExtensions Condition=" '$(VSTestUseVsixExtensions)' == '' ">true</VSTestUseVsixExtensions>
<VSTestFramework Condition=" '$(VSTestFramework)' == '' ">framework45</VSTestFramework>
<VSTestLogger Condition=" '$(VSTestLogger)' == '' ">trx</VSTestLogger>
<ErrorCode>0</ErrorCode>
</PropertyGroup>
<ItemGroup>
<VSTestResultsPath Include="$(VSTestResultsPath)" />
<VSTestParams Include="@(VSTestFiles ->'"%(FullPath)"', ' ')" />
<VSTestParams Condition="$(VSTestEnableCodeCoverage)" Include="/EnableCodeCoverage" />
<VSTestParams Condition="$(VSTestInIsolation)" Include="/InIsolation" />
<VSTestParams Include="/UseVsixExtensions:$(VSTestUseVsixExtensions)" />
<VSTestParams Include="/Framework:$(VSTestFramework)" />
<VSTestParams Include="/Logger:$(VSTestLogger)" />
<VSTestParams Condition="$(VSTestCaseFilter) != ''" Include="/TestCaseFilter:"$(VSTestCaseFilter)"" />
<VSTestParams Condition="$(VSTestRunSettings) != ''" Include="/Settings:"$(VSTestRunSettings)"" />
</ItemGroup>
<Message Text="TestAssembly: %(VSTestFiles.Identity)" Importance="high"/>
<Exec ContinueOnError="!$(VSTestFailBuildOnTestFail)" ConsoleToMSBuild="true" WorkingDirectory="$(WorkingDirectory)" Condition=" '@(VSTestFiles)' != ''"
Command=""$(VSTestExe)" @(VSTestParams, ' ')">
<Output TaskParameter="ExitCode" PropertyName="ErrorCode"/>
<Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
</Exec>
<Message Importance="high" Text="VSTest exitcode: $(ErrorCode)"/>
<!-- Use the VSTest output to discover the Results & Coverage files respectively -->
<PropertyGroup>
<!-- Unencoded Regex: (?<=(Results file: )).*?(?=\;)|(?<=(Attachments:;)).*?(?=\;) -->
<ResultsFileRegexPattern>(?<=(Results File: )).*.trx</ResultsFileRegexPattern>
<CoverageFileRegexPattern>(?<=(Attachments:;)).*.coverage</CoverageFileRegexPattern>
<SourceResultsFile>$([System.Text.RegularExpressions.Regex]::Match($(OutputOfExec), $(ResultsFileRegexPattern)))</SourceResultsFile>
<SourceCoverageFile Condition="$(VSTestEnableCodeCoverage)">$([System.Text.RegularExpressions.Regex]::Match($(OutputOfExec), $(CoverageFileRegexPattern)))</SourceCoverageFile>
</PropertyGroup>
<ItemGroup>
<TestArtifact Include="$(SourceResultsFile)" />
<TestArtifact Include="$(SourceCoverageFile)" />
</ItemGroup>
<Warning Condition=" '$(SourceResultsFile)' == '' " Text=".trx file not found" />
<Warning Condition=" $(VSTestEnableCodeCoverage) and '$(SourceCoverageFile)' == '' " Text=".coverage file not found" />
<!-- Copy files to the artifact directory -->
<Copy SourceFiles="@(TestArtifact)" DestinationFiles="@(TestArtifact->'$(ArtifactsPath)\$(VSTestSessionName)%(Extension)')" />
<!-- Clear the test results temporary directory -->
<RemoveDir Directories="@(TestResults)" />
<ItemGroup>
<TestFile Include="$(ArtifactsPath)\**\$(VSTestSessionName).trx" />
<CoverageFile Include="$(ArtifactsPath)\**\$(VSTestSessionName).coverage" />
</ItemGroup>
<Message Text="TestReport: @(TestFile)" />
<Message Text="CoverageReport: @(CoverageFile)" />
</Target>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35953 次 |
最近记录: |