如何在 VSTS 中合并代码覆盖率结果

How to merge code coverage results in VSTS

我有一个包含多个项目的 Visual Studio 解决方案。我在我的解决方案中添加了相应的单元测试项目。我在 VSTS 中使用 Cobertura 来查找这些项目的代码覆盖率。

Cobertura 为所有测试项目发布单独的 Cobertura.xml 文件。

我想要一种合并代码覆盖率报告的方法。我无法在用于发布代码覆盖率的 VSTS 任务中指定多个摘要文件的路径。有什么办法可以实现吗?

附加信息 - 所有测试用例 运行 针对同一个数据库

我认为有一种方法可以通过在构建定义时启用 VSTS 测试程序集任务中的 "Code Coverage Enabled" 选项而不传递代码覆盖中的路径来实现。

我找不到任何直接的方法来做到这一点。所以,我在另一个 VSO 任务中使用了 powershell 脚本来实现这个结果。由于该工具生成 xml 其中一个属性中的行数,我编写了一个脚本来获取文件并读取该计数并生成具有所需覆盖率报告的新 xml。它之所以有效,是因为所有测试项目都针对同一个数据库,并且每个项目都针对不同的存储过程集。如果两个测试针对相同的存储过程,则它不起作用。

希望这对您有所帮助。

* 编辑添加我用来合并的 Powershell 脚本 (前3个参数是来自不同单元测试项目的覆盖路径)*

Param(
[string]$UnitTestPath1,
[string]$UnitTestPath2,
[string]$UnitTestPath3,
[string]$targetCoverageFilePath
 )



[xml]$XmlContent = Get-Content $UnitTestPath1
$coverage = [float]$XmlContent.coverage.'lines-covered'

$XmlContent = Get-Content $UnitTestPath2
$coverage += [float]$XmlContent.coverage.'lines-covered'

$XmlContent = Get-Content $UnitTestPath13
$coverage += [float]$XmlContent.coverage.'lines-covered'
$coverage

$node = $XmlContent.SelectNodes("/coverage");

$node[0].SetAttribute('lines-covered',$coverage) 
$XmlContent.Save($targetCoverageFilePath)

$coverage