【问题标题】:How to merge code coverage results in VSTS如何在 VSTS 中合并代码覆盖率结果
【发布时间】:2017-11-03 18:39:05
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这怎么和sql-server有关?!!!请正确使用标签
  • 对不起,我错误地添加了 sql-server,因为我正在对 db 运行单元测试。它进来了建议并匆忙添加。
  • 没关系,标签建议并不总是正确的。始终认为需要什么样的知识来回答和标记基础。拥有适当的标签可以帮助您将问题重定向到正确的人。
  • 肯定闪烁。我明白了。谢谢你告诉我。

标签: unit-testing code-coverage cobertura


【解决方案1】:

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

希望这会有所帮助。

* EDIT 添加我用来合并的 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

【讨论】:

  • 嗨,你能分享你的脚本吗?所以它也可以帮助其他人;)谢谢。
  • @Kiran,您能分享一下脚本,以便对其他人也有帮助吗?
  • 嗨@SkorunkaFrantišek,SRP 我已经添加了相同的sn-p。抱歉耽搁了,正在参与其他一些工作,花了一些时间才找到这个文件。
【解决方案2】:

我认为有一种方法可以做到这一点,即在构建定义时启用 VSTS 测试程序集任务中的“启用代码覆盖”选项,而无需在代码覆盖中传递路径。

【讨论】:

    猜你喜欢
    • 2019-01-29
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2018-11-08
    • 2011-01-18
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多