【发布时间】:2015-12-04 18:20:48
【问题描述】:
为了将测试分发到不同的机器(远程方式),我们必须使用 .testsettings 文件。在这样的文件中,我们已经配置为通过以下方式收集测试覆盖率数据:
<DataCollectors>
<DataCollector uri="datacollector://microsoft/CodeCoverage/1.0" assemblyQualifiedName="Microsoft.VisualStudio.TestTools.CodeCoverage.CoveragePlugIn, Microsoft.VisualStudio.QualityTools.Plugins.CodeCoverage, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" friendlyName="Code Coverage (Visual Studio 2010)">
<Configuration>
<CodeCoverage keyFile="xxx.snk" xmlns="">
<Regular>
<CodeCoverageItem binaryFile="xxx.dll" pdbFile="xxx.pdb" instrumentInPlace="true" />
但问题是测试覆盖率数据从未发布回 TFS 服务器。在诊断构建过程时,测试结果已经可以根据构建日志发布:
Results file: d:\Builds\xxxx.trx
Test Settings: xxx
Waiting to publish...
Publishing results of test run xxx.trx to https://tfs.xxx/tfs/xxx...
Publish completed successfully.
覆盖数据似乎不在 xxx.trx 文件中,而且构建不够智能,无法分配和发布它们。所以从构建摘要中我们可以看到:
23 modules instrumented - 0% of all code blocks covered
有没有办法通过一些 TFS API 或编码活动手动发布此类数据或将测试覆盖率结果写回 TFS 服务器?
[更新]检查测试结果文件时,结果本身似乎已经包含了如何找到.coverage文件的知识:
<ResultSummary outcome="Completed">
<ResultFile path="VM-TEST01\data.coverage" />
<ResultFile path="VM-TEST02\data.coverage" />
但问题是 MSTest 从不将它们发布到 TFS 服务器上!
【问题讨论】:
-
假设您使用的是新的构建系统,VS 测试步骤应该会自动执行此操作。但是,如果没有,代码覆盖率结果将存储在 .coverage 文件中。您需要在构建步骤中启用代码覆盖率。我在这里的问题可能会有所帮助(如果可以,请也回答!)stackoverflow.com/questions/33752784/…
-
我们不使用 TFS 2015 提供的最新构建系统。主要原因是我们希望受益于原始系统的特性,即可以通过使用测试控制器将我们的测试分布到不同的机器或环境中与多个测试代理。
-
您是否尝试过 vstest.console.exe MyTest.dll /logger:TfsPublisher;Collection=localhost:8080/tfs/… 使用代码覆盖率数据进行测试" /EnableCodeCoverage ?