我有一个包含多个项目的Visual Studio解决方案。我在我的解决方案中添加了相应的单元测试项目。我在VSTS中使用Cobertura来查找这些项目的代码覆盖率。
Cobertura为所有测试项目发布单独的Cobertura.xml文件。
我想要一种合并代码覆盖率报告的方法。我无法在VSTS任务中指定多个摘要文件的路径以发布代码覆盖率。有没有办法实现这个目标?
其他信息 - 所有测试用例都针对同一个数据库运行
答案 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的新文件中,然后可以使用合并后的文件进行代码覆盖。