Jacoco报告合并

时间:2015-07-02 19:52:09

标签: java jacoco

我在远程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方法,创建HTMLFormatterIReportVisitor,循环浏览报告列表并添加visitInfo和{{ 1}}然后在最后,调用visitBundle将内容转储到文件中。问题在于设置visitEnd()visitInfo我是否覆盖了以前的报告。

我希望有人知道如何附加报告以制作一份更大的报告供查看。

1 个答案:

答案 0 :(得分:1)

幸运的是,通过阅读和反复试验,我发现了如何以编程方式创建和合并jacoco代码覆盖率报告。

简单的方法是创建一个包覆盖列表,创建一个组并将它们放在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();
    }