ReportGenerator
ReportGenerator 可以将 coverlet、OpenCover、dotCover、Visual Studio、NCover、Cobertura、JaCoCo、Clover、gcov 或 lcov 生成的覆盖率报告转换为多种格式的可读报告。
这些报告显示覆盖率指标,并可视化展示源代码中哪些行已被覆盖。
ReportGenerator 支持将多个覆盖率文件合并为一个报告。
许可证
- ReportGenerator 使用 Apache License, Version 2.0 许可
- 您可以通过购买 PRO 许可证 或成为 GitHub 赞助商 来支持此项目。
赞助商可以独家访问额外功能。
入门
ReportGenerator 是一个命令行工具,适用于完整的 .NET Framework 和 .NET Core。
使用在线配置工具可以快速入门。
安装适合您平台和需求的软件包
软件包 | 平台 | 安装/使用 |
---|---|---|
ReportGenerator | .NET Core >=6.0 .NET Framework 4.7 | 如果您的项目基于 .NET Framework 或 .NET Core,并且您想通过命令行或构建脚本使用 ReportGenerator,请使用此软件包。 使用方法 dotnet $(UserProfile).nuget\packages\reportgenerator\x.y.z\tools\net8.0\ReportGenerator.dll [选项] $(UserProfile).nuget\packages\reportgenerator\x.y.z\tools\net8.0\ReportGenerator.exe [选项] $(UserProfile)\.nuget\packages\reportgenerator\x.y.z\tools\net47\ReportGenerator.exe [选项] |
dotnet-reportgenerator-globaltool | .NET Core >=6.0 | 如果您的项目基于 .NET Core,并且您想将 ReportGenerator 作为(全局)'DotnetTool' 使用,请使用此软件包。 安装 dotnet tool install -g dotnet-reportgenerator-globaltool dotnet tool install dotnet-reportgenerator-globaltool --tool-path tools dotnet new tool-manifest dotnet tool install dotnet-reportgenerator-globaltool 使用方法 reportgenerator [选项] tools\reportgenerator.exe [选项] dotnet reportgenerator [选项] |
ReportGenerator.Core | .NET Standard 2.0 | 如果您想为 ReportGenerator 编写自定义插件,或者想在代码中调用/执行 ReportGenerator,请使用此软件包。 插件开发 自定义报告 自定义历史存储 |
Azure DevOps 扩展 | .NET Core >=6.0 | 将 Azure DevOps 扩展添加到您的构建管道中。 了解更多 |
GitHub Actions | .NET Core >=6.0 | 将 GitHub Action 添加到您的构建管道中。 了解更多 |
使用方法 / 命令行参数
使用在线配置工具可以快速入门。
更高级的设置在wiki中有详细说明。
参数:
["]-reports:<报告>[;<报告>][;<报告>]["]
["]-targetdir:<目标目录>["]
[["]-reporttypes:<Html|HtmlSummary|...>[;<Html|HtmlSummary|...>]["]]
[["]-sourcedirs:<目录>[;<目录>][;<目录>]["]]
[["]-historydir:<历史目录>["]]
[["]-plugins:<插件>[;<插件>][;<插件>]["]]
[["]-assemblyfilters:<(+|-)过滤器>[;<(+|-)过滤器>][;<(+|-)过滤器>]["]]
[["]-classfilters:<(+|-)过滤器>[;<(+|-)过滤器>][;<(+|-)过滤器>]["]]
[["]-filefilters:<(+|-)过滤器>[;<(+|-)过滤器>][;<(+|-)过滤器>]["]]
[["]-riskhotspotassemblyfilters:<(+|-)过滤器>[;<(+|-)过滤器>][;<(+|-)过滤器>]["]]
[["]-riskhotspotclassfilters:<(+|-)过滤器>[;<(+|-)过滤器>][;<(+|-)过滤器>]["]]
[["]-verbosity:<Verbose|Info|Warning|Error|Off>["]]
[["]-title:<标题>["]]
[["]-tag:<标签>["]]
[["]-license:<许可证>["]]
说明:
报告: 应解析的覆盖率报告(用分号分隔)。
支持通配符。
目标目录: 生成的报告应保存的目录。
报告类型: 输出格式和范围(用分号分隔)。
值:Badges, Clover, Cobertura, CsvSummary,
MarkdownSummary, MarkdownAssembliesSummary, MarkdownSummaryGithub, MarkdownDeltaSummary
OpenCover
Html, Html_Light, Html_Dark, Html_BlueRed
HtmlChart, HtmlInline, HtmlSummary, Html_BlueRed_Summary
HtmlInline_AzurePipelines, HtmlInline_AzurePipelines_Light, HtmlInline_AzurePipelines_Dark
JsonSummary, CodeClimate, Latex, LatexSummary, lcov, MHtml, SvgChart, SonarQube, TeamCitySummary
TextSummary, TextDeltaSummary
Xml, XmlSummary
源目录: 包含相应源代码的可选目录(用分号分隔)。
如果覆盖率报告包含没有路径信息的类,则使用源目录。
不支持通配符。
历史目录: 用于存储持久性覆盖率信息的可选目录。
可在未来的报告中用于显示覆盖率演变。
插件: 用于自定义报告或自定义历史存储的可选插件文件(用分号分隔)。
程序集过滤器: 报告中应包含或排除的程序集的可选列表。
类过滤器: 报告中应包含或排除的类的可选列表。
文件过滤器: 报告中应包含或排除的文件的可选列表。
风险热点程序集过滤器:风险热点中应包含或排除的程序集的可选列表。
风险热点类过滤器: 风险热点中应包含或排除的类的可选列表。
排除过滤器优先于包含过滤器。
允许使用通配符。
详细程度: 日志消息的详细程度。
值:Verbose, Info, Warning, Error, Off
标题: 可选标题。
标签: 可选标签或构建版本。
许可证: PRO版本的可选许可证。在此获取许可证:https://reportgenerator.io/pro
也可以通过'REPORTGENERATOR_LICENSE'环境变量提供许可证。
默认值:
-reporttypes:Html
-assemblyfilters:+*
-classfilters:+*
-filefilters:+*
-riskhotspotassemblyfilters:+*
-riskhotspotclassfilters:+*
-verbosity:Info
示例:
"-reports:coverage.xml" "-targetdir:C:\report"
"-reports:target\*\*.xml" "-targetdir:C:\report" -reporttypes:Latex;HtmlSummary -title:IntegrationTest -tag:v1.4.5
"-reports:coverage1.xml;coverage2.xml" "-targetdir:report" "-sourcedirs:C:\MyProject" -plugins:CustomReports.dll
"-reports:coverage.xml" "-targetdir:C:\report" "-assemblyfilters:+Included;-Excluded.*"
.netconfig 支持
上述所有参数也可以在 .netconfig 文件中的 [ReportGenerator]
部分下持久化。示例:
[ReportGenerator]
reports = coverage.xml
targetdir = "C:\\report"
reporttypes = Latex;HtmlSummary
assemblyfilters = +Test;-Test
classfilters = +Test2;-Test2
所有复数选项也可以指定为多个单数条目,如:
[ReportGenerator]
report = coverage1.xml
report = coverage2.xml
reporttype = Latex
reporttype = HtmlSummary
assemblyfilter = +Test
assemblyfilter = -Test
classfilter = +Test2
classfilter = -Test2
filefilter = +cs
filefilter = -vb
riskhotspotassemblyfilter = +Test
riskhotspotassemblyfilter = -Test
riskhotspotclassfilter = +Test2
riskhotspotclassfilter = -Test2
sourcedir = src
sourcedir = test
使用 dotnet-config CLI 添加/删除值非常简单:
# 设置单值变量
dotnet config reportgenerator.reporttypes Latex;HtmlSummary
# 向多值变量添加
dotnet config --add reportgenerator.report coverage3.xml
# 清除变量的所有多值条目
dotnet config --unset-all reportgenerator.assemblyfilter
当然,直接手动编辑 .netconfig
文件也同样简单。
MSBuild
还存在一个 MSBuild 任务:
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Coverage" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<ItemGroup>
<PackageReference Include="ReportGenerator" Version="x.y.z" />
</ItemGroup>
<Target Name="Coverage">
<ItemGroup>
<CoverageFiles Include="OpenCover.xml" />
</ItemGroup>
<ReportGenerator ProjectDirectory="$(MSBuildProjectDirectory)" ReportFiles="@(CoverageFiles)" TargetDirectory="report" ReportTypes="Html;Latex" HistoryDirectory="history" Plugins="CustomReports.dll" AssemblyFilters="+Include;-Excluded" VerbosityLevel="Verbose" />
</Target>
</Project>
如果使用了 .netconfig
,MSBuild 任务参数可以与之互补。这意味着如果通过 .netconfig
提供了参数,则可以在 MSBuild 任务中省略这些参数,这在跨解决方案中的多个项目重用固定设置时很有用,其中 MSBuild 任务只提供当前项目的动态值:
假设有以下 .netconfig
:
[ReportGenerator]
reporttypes = Html;Latex
targetdirectory = report
historydirectory = history
assemblyfilters = +Include;-Excluded
verbosityLevel = Verbose
上述目标可以简化为:
<Target Name="Coverage">
<ItemGroup>
<CoverageFiles Include="OpenCover.xml" />
</ItemGroup>
<ReportGenerator ProjectDirectory="$(MSBuildProjectDirectory)"
ReportFiles="@(CoverageFiles)"
Plugins="CustomReports.dll" />
</Target>
支持的输入和输出文件格式
ReportGenerator 支持多种输入和输出格式。 wiki 解释了不同的输出格式,或者你可以下载所有支持的输出格式的示例报告。 如果你需要自定义格式,可以创建一个插件。
输入格式 | 输出格式 |
---|---|
|
|
截图
以下截图展示了生成报告的两个片段:
徽章
如果使用-reporttypes:Badges
,可以生成SVG格式的徽章:
示例:
资源
Visual Studio扩展
以下扩展可用于在Visual Studio中可视化覆盖率:
名称 | 覆盖率工具 | 链接 |
---|---|---|
Run Coverlet Report VS2022 | coverlet | GitHub Marketplace |
FineCodeCoverage | coverlet, OpenCover | GitHub Marketplace |
链接
- https://www.palmmedia.de/Blog/2017/12/6/reportgenerator-new-release-with-risk-hotspots-analysis
- https://www.palmmedia.de/Blog/2016/11/6/reportgenerator-new-release-with-enhanced-html-report-and-cobertura-support
- https://www.palmmedia.de/Blog/2015/1/27/reportgenerator-new-beta-with-historytrend-charts
- https://www.palmmedia.de/Blog/2012/4/29/reportgenerator-new-release-with-more-advanced-report-preprocessing
下载统计
趋势
联系方式
作者:Daniel Palme
博客:www.palmmedia.de
Twitter:@danielpalme