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

时间:2017-11-03 18:39:05

标签: unit-testing code-coverage cobertura

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

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

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

其他信息 - 所有测试用例都针对同一个数据库运行

3 个答案:

答案 0 :(得分:3)

我找不到任何直接的方法来做到这一点。所以,我在另一个VSO任务中使用了powershell脚本来实现结果。由于该工具在其中一个属性中生成了包含行数的xml,因此我编写了一个脚本来获取文件并读取该计数并生成具有所需Coverage报告的新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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

您可以拥有一个脚本文件,该脚本文件运行的代码会将文件数据(可能是通过解析)合并到具有total的新文件中,然后可以使用合并后的文件进行代码覆盖。