如何使用来自 Hudson 的 Maven 生成 Cobertura 代码覆盖率报告

Posted

技术标签:

【中文标题】如何使用来自 Hudson 的 Maven 生成 Cobertura 代码覆盖率报告【英文标题】:How to generate Cobertura Code Coverage Report using Maven from Hudson 【发布时间】:2011-01-01 15:17:59 【问题描述】:

在我的项目中,我需要使用 maven build 从 Hudson 创建 Cobertura 代码覆盖率报告。 在 Hudson,我添加了 Cobertura Code Coverage 插件。 我需要pom.xml的完整修改步骤。

【问题讨论】:

谨防 Java 7 不兼容!一个可能的[解决方案显示在这里][1]。 [1]:***.com/questions/7010665/… 【参考方案1】:

您是否尝试将其添加到您的pom.xml 中的reporting 部分?

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <configuration>
       <formats>
           <format>html</format>
           <format>xml</format>
       </formats>
    </configuration>
</plugin>

完整的配置步骤可以在here找到。

【讨论】:

我在我的 pom.xml 中的“wiki.hudson-ci.org/display/HUDSON/Cobertura+Plugin”中的“仅使用配置文件从 hudson 执行 cobertura”部分下添加了配置还在 cobertura-maven-plugin 的“报告”标签下添加了配置但是在从 hudson 执行构建时 - 我收到以下异常 Skipping Cobertura coverage report as build was not UNSTABLE or better ... Finished: FAILURE 我已经在 Hudson 中配置了插件“Publish Cobertura Coverage Report” 我错过了任何步骤配置? 检查您的日志,它应该会显示一些失败消息。在本地结账时运行 mvn site cobertura:cobertura 可能会有所帮助。另外请注意,对我来说,只需运行“cobertura:cobertura”作为目标就足够了,不需要更改 pom(可能是因为上层 pom 已经包含它...)【参考方案2】:

Hudson 需要您来生成coverage.xml 文件。要在不更改 pom.xml 的情况下执行此操作,您可以使用:

mvn cobertura:cobertura -Dcobertura.report.format=xml

【讨论】:

在我的系统上,插件的&lt;configuration&gt; 部分不受尊重。但是,当我在目标行中指定上述-Dcobertura.report.format 参数时,它可以工作。感谢 amcknight 有什么方法可以生成关于mvn clean install 命令而不是mvn cobertura:cobertura 的Cobertura 报告,当我将executions-phase 更改为testgoalcobertura 时,它可以工作,但是它运行了两次测试用例,对此有什么想法吗? @PRATHAPS,我知道这是一个很晚的评论,但你知道如何解决这个问题吗?您的解决方案和 Johan Norén 的答案都运行了两次测试用例。您是否想过只运行一次测试用例并从该单次测试运行中生成 cobertura 报告? @Amudhan 我发现它总是会运行两次。但这并不重要,因为它不会影响任何性能,因为测试只会在构建之前运行。后来开始使用 Jacaco @Amudhan 是的,Jacoco 不会运行两次测试。我们可以实现 Cobertura 所具有的报告和所有其他功能【参考方案3】:

要在打包阶段运行 Cobertura,请执行以下操作

 <plugin>  
            <groupId>org.codehaus.mojo</groupId>  
            <artifactId>cobertura-maven-plugin</artifactId>  
            <version>2.5.2</version>  
            <configuration>  
                <formats>  
                    <format>xml</format>  
                </formats>  
            </configuration>  
            <executions>  
                <execution>  
                    <phase>package</phase>  
                    <goals>  
                        <goal>cobertura</goal>  
                    </goals>  
                </execution>  
            </executions>  
   </plugin>         

这是一个 pom 的例子

http://macgyverdev.blogspot.com/2011/04/development-environment-for-google-app.html

以及如何在 Hudson 中集成 http://macgyverdev.blogspot.com/2011/04/hudson-continous-integration-for-google.html

【讨论】:

使用此配置,测试用例运行两次。知道如何修复它以使测试只运行一次,并使用它生成 cobertura 报告吗?【参考方案4】:

Cobertura 实际上似乎并不与 hudson 合作。

我有一个执行命令行的项目: mvn 清洁包

构建覆盖率报告生成准确的覆盖率报告,平均覆盖率约为 78% 行和 74% 分支。

在 Hudson 服务器上运行相同的目标会导致覆盖率报告显示 0% 0%。

不幸的是,该插件的 Jira 站点似乎不允许任何人发布问题,因此该问题尚未向团队报告。

【讨论】:

以上是关于如何使用来自 Hudson 的 Maven 生成 Cobertura 代码覆盖率报告的主要内容,如果未能解决你的问题,请参考以下文章

maven工程编译并生成可执行JAR包命令

在使用像 Hudson/Jenkins 这样的 CI 工具时,我如何成功地将 Maven 发布插件与 GitHub(或 GitHub 企业)一起使用

使用 Maven、SVN 和 Hudson(jenkins) 发布

使用 Maven/Hudson/Mercurial 进行发布

如何使用 Hudson 构建 Play 项目?

通过 Hudson 发布 Maven