Jacoco 报告合并
Jacoco Report Merging
我在远程 websphere 服务器上使用 Jacoco。我将它设置为 tcpsrver 并查询服务器以获取 jacoco.exec
,使用此文件我可以为我的所有项目创建报告。我想要的是所有项目的单一报告。我已将每个报告添加到列表中,但当我尝试创建单个报告时,我只能查看最后一个项目的统计信息。
每个项目都在自己的文件夹中,每个文件夹都有自己的 coveragereport
。我是这样做的
File[] fList = directory.listFiles();
ReportGenerator rg = new ReportGenerator();
for(File file : fList)
{
if( file.getAbsolutePath().contains("BL") )
{
if( new File( file.getAbsolutePath() + "\bin" ).isDirectory() )
{
rg = new ReportGenerator(file);
rg.setExecutionDataFile(directory);
rg.setClassesDirectory(file, "\bin");
rg.setReportDirectory(directory);
rg.setTitle(file);
rg.create();
}
}
else
{
if( new File( file.getAbsolutePath() + "\WebContent" ).isDirectory() )
{
rg = new ReportGenerator(file);
rg.setExecutionDataFile( directory );
rg.setClassesDirectory( file , "\WebContent\WEB-INF\classes" );
rg.setReportDirectory(directory);
rg.setTitle(file);
rg.create();
}
}
现在我将它们全部添加到列表中:
loadExecutionData();
final IBundleCoverage bundleCoverage = analyzeStructure();
reportsList.add(this);
此时我想调用一个方法来生成报表,但是没有用。到目前为止,我正在尝试使用 jacoco 网站上提供的示例。
http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java
我试图做的是编辑 createReport
方法,我创建一个 HTMLFormatter
和一个 IReportVisitor
,遍历报告列表并添加 visitInfo
和visitBundle
然后在最后调用 visitEnd()
将内容转储到文件中。问题是问题出在设置 visitInfo
和 visitBundle
我覆盖了以前的报告。
我希望有人知道如何附加报告以制作更大的报告以供查看。
幸运的是,通过阅读和反复试验,我发现了如何以编程方式创建和合并 jacoco 代码覆盖率报告。
简单的方法是创建一个 bundle coverage 列表,创建一个组并将它们放在一起 MultiReportVisitor
public void addToBundleCoverageList() throws IOException {
loadExecutionData();
bundleCoverage = analyzeStructure();
coverageList.add(bundleCoverage);
}
public void createCoverageList() throws IOException
{
for(int i=0; i<coverageList.size(); i++)
{
HTMLFormatter htmlFormatter = new HTMLFormatter();
IReportVisitor visitor = htmlFormatter
.createVisitor(new FileMultiReportOutput(reportDirectory));
visitor.visitInfo(execFileLoader.getSessionInfoStore().getInfos(),
execFileLoader.getExecutionDataStore().getContents());
visitors.add(visitor);
}
}
public void createReportFromList() throws IOException
{
MultiReportVisitor mrv = new MultiReportVisitor(visitors);
IReportGroupVisitor irgv = mrv.visitGroup("group");
for(int i=0; i<coverageList.size(); i++)
{
irgv.visitBundle(coverageList.get(i), indexHtml);
System.out.println("Processing: " + coverageList.get(i).getName());
}
mrv.visitEnd();
}
我在远程 websphere 服务器上使用 Jacoco。我将它设置为 tcpsrver 并查询服务器以获取 jacoco.exec
,使用此文件我可以为我的所有项目创建报告。我想要的是所有项目的单一报告。我已将每个报告添加到列表中,但当我尝试创建单个报告时,我只能查看最后一个项目的统计信息。
每个项目都在自己的文件夹中,每个文件夹都有自己的 coveragereport
。我是这样做的
File[] fList = directory.listFiles();
ReportGenerator rg = new ReportGenerator();
for(File file : fList)
{
if( file.getAbsolutePath().contains("BL") )
{
if( new File( file.getAbsolutePath() + "\bin" ).isDirectory() )
{
rg = new ReportGenerator(file);
rg.setExecutionDataFile(directory);
rg.setClassesDirectory(file, "\bin");
rg.setReportDirectory(directory);
rg.setTitle(file);
rg.create();
}
}
else
{
if( new File( file.getAbsolutePath() + "\WebContent" ).isDirectory() )
{
rg = new ReportGenerator(file);
rg.setExecutionDataFile( directory );
rg.setClassesDirectory( file , "\WebContent\WEB-INF\classes" );
rg.setReportDirectory(directory);
rg.setTitle(file);
rg.create();
}
}
现在我将它们全部添加到列表中:
loadExecutionData();
final IBundleCoverage bundleCoverage = analyzeStructure();
reportsList.add(this);
此时我想调用一个方法来生成报表,但是没有用。到目前为止,我正在尝试使用 jacoco 网站上提供的示例。
http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java
我试图做的是编辑 createReport
方法,我创建一个 HTMLFormatter
和一个 IReportVisitor
,遍历报告列表并添加 visitInfo
和visitBundle
然后在最后调用 visitEnd()
将内容转储到文件中。问题是问题出在设置 visitInfo
和 visitBundle
我覆盖了以前的报告。
我希望有人知道如何附加报告以制作更大的报告以供查看。
幸运的是,通过阅读和反复试验,我发现了如何以编程方式创建和合并 jacoco 代码覆盖率报告。
简单的方法是创建一个 bundle coverage 列表,创建一个组并将它们放在一起 MultiReportVisitor
public void addToBundleCoverageList() throws IOException {
loadExecutionData();
bundleCoverage = analyzeStructure();
coverageList.add(bundleCoverage);
}
public void createCoverageList() throws IOException
{
for(int i=0; i<coverageList.size(); i++)
{
HTMLFormatter htmlFormatter = new HTMLFormatter();
IReportVisitor visitor = htmlFormatter
.createVisitor(new FileMultiReportOutput(reportDirectory));
visitor.visitInfo(execFileLoader.getSessionInfoStore().getInfos(),
execFileLoader.getExecutionDataStore().getContents());
visitors.add(visitor);
}
}
public void createReportFromList() throws IOException
{
MultiReportVisitor mrv = new MultiReportVisitor(visitors);
IReportGroupVisitor irgv = mrv.visitGroup("group");
for(int i=0; i<coverageList.size(); i++)
{
irgv.visitBundle(coverageList.get(i), indexHtml);
System.out.println("Processing: " + coverageList.get(i).getName());
}
mrv.visitEnd();
}