jenkins 中的 VStest 代码覆盖率报告

vis*_*ane 5 continuous-integration mstest jenkins jenkins-plugins vstest

我正在使用 Jenkins 为 .Net 项目设置 CI。

我使用 MSTest 插件和 VStestrunner 插件来运行测试。现在我有 .trx 文件和 .Coverage 文件我在显示代码覆盖率报告时遇到问题

请帮助我,你知道任何插件可以做到这一点。

小智 5

我为此苦苦挣扎了很久,终于发现我们可以使用“CodeCoverage.exe”、“ReportGenarator.exe”和“Cobertura 插件”来显示完美的覆盖率报告。

“ReportGenerator.exe”可以从https://github.com/danielpalme/ReportGenerator/releases获取

  • 首先使用“CodeCoverage.exe”将 .coverage 文件转换为 .xml 文件
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze -output:./TestResults/coverage.xml ./TestResults/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.coverage"
Run Code Online (Sandbox Code Playgroud)
  • 第二次使用ReportGenerator.exe 将vstest xml 格式转换为Cobertura xml 格式
    "ReportGenerator_4.4.7\net47\ReportGenerator.exe" -reports:./TestResults/coverage.xml -targetdir:./TestResults -reporttypes:cobertura
Run Code Online (Sandbox Code Playgroud)
  • 最后安装cobertura插件使用它来收集xml文件,这里给出一个管道使用示例
    post {
        always {
            cobertura coberturaReportFile: './TestResults/Cobertura.xml'
        }
    }
Run Code Online (Sandbox Code Playgroud)
  • 结果就像这样 cobertura.xml 报告


小智 3

要显示覆盖率报告,您需要将其转换为 XML 格式并使用 MSTest 插件发布报告。MSTest Plugin 建议(https://wiki.jenkins-ci.org/display/JENKINS/MSTest+Plugin)使用第三方应用程序转换为 XML 格式并使用 powershell(您需要安装 pugin)来运行它。

但是,您只能使用 PowerShell 对其进行转换。有脚本示例:

$coverageFile = $(get-ChildItem -Path .\TestResults -Recurse -Include *coverage)[0]
$xmlCoverageFile = ".\TestResults\vstest.coveragexml"

Add-Type -path "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.Coverage.Analysis.dll"

[string[]] $executablePaths = @($coverageFile)
[string[]] $symbolPaths = @()

$info = [Microsoft.VisualStudio.Coverage.Analysis.CoverageInfo]::CreateFromFile($coverageFile, $executablePaths, $symbolPaths);
$data = $info.BuildDataSet()

$data.WriteXml($xmlCoverageFile)
Run Code Online (Sandbox Code Playgroud)

您可能需要Microsoft.VisualStudio.Coverage.Analysis.dll根据您的 VS 版本修复路径。