首页 文章

Hudson中的Java代码覆盖率

提问于
浏览
14

我正在将一些项目从一个ant构建迁移到一个maven . 构建服务器是,并将保留,Hudson .

由于tests run and recorded twice problem,我一直无法使用cobertura在哈德森录制代码覆盖率 .

该项目是多模块的,尽管不是必需的,但是具有代码覆盖率数据的聚合输出将是很好的 .

总而言之,我正在寻找的解决方案必须:

  • 对所有模块运行自动化测试并记录结果一次;

  • 显示Hudson中的单个模块代码覆盖率;

  • 可以为整个项目轻松配置一次,而不是在每个模块中配置 .

解决方案可以基于Cobertura,或Emma,或任何其他Java代码覆盖工具 .


更新:使用Emma运行测试仍然会复制结果,并且没有 merge 功能,因此它不适用于多模块构建 .

6 回答

  • 1

    Sonar是一个非常酷的工具,很容易与Hudson集成,我真的很喜欢它与多模块项目的组织 . 你应该试一试

    alt text http://sonar.codehaus.org/wp-content/uploads/2009/08/dashboard.png

  • 6

    它使用's a bit hackish, but the approach I'是使用modified version of the Maven cobertura plugin(这是available from their repo) . 它提供了一个cobertura:generate-report目标,因此您可以分别在测试运行之前和之后将cobertura:instrument和cobertura:generate-report插入到您的生命周期中 . 这将为您提供所需的覆盖数据,而无需重复的测试执行/记录 .

    潜在的问题是我遇到的所有非三叶草Maven覆盖插件都是围绕着与Maven生命周期中的主要测试执行分开运行测试的想法而构建的 . 显然,这导致两组测试执行 . 如果你正在使用一个自由式项目,你将只记录一组测试(因为,即使有两个测试执行,只有一个测试输出的副本),但Maven项目类型实际上拦截了Maven mojo执行和在测试执行时记录测试输出/结果,而不是像自由式项目那样在构建结束时记录测试输出/结果 . 这有很多优点,但它也有一个相当明显的缺点,即执行两次的单个测试被计为两次测试 .

    也就是说,虽然我已经看到了针对非检测代码和检测代码运行测试的强有力论据,但我更倾向于只对测试代码运行一次测试 - 不仅仅是因为Maven / Hudson问题,而是因为当你'我们进行了45分钟的测试,看起来非常愚蠢地运行它们两次以产生相同的结果 .

  • 1

    罗伯特,

    我也有这个问题,并发现如果你将项目设置为自由式项目而不是Maven2项目,Hudson不会报告 . 你确实失去了拥有maven2项目的一些好处,但对我们来说,这是我们必须做的交易 .

    杰夫

  • 1

    我们使用自由风格的项目并没有这个问题,因此如上所述,这可能是您的问题的根源 .

    为了提供合并功能,我们创建了自己的工件库(我们没有使用Maven) . 在每次构建结束时,我们将cobertura.ser文件复制到网络共享,并在此过程中重命名 . 我们有一个统一的视图作业,它将所有cobertura文件和源代码文件(复制到网络共享的另一个构建工件)复制到本地构建目录中,并生成Cobertura报告 .

    Hudson中缺少标准的工件存储库有点令人沮丧,但是有意义的是,作者通常会使用Maven来满足这些需求 . 我们的构建过程在多个服务器上运行,因此我们不能仅使用相对路径进入其他作业目录 .

    注意,我们对其他指标也做同样的事情:测试结果,JavaNCSS等 . 并使用正确的工具或一些自定义代码加入 .

    我们对传统的构建工件使用相同的存储库:DLL,JAR,安装脚本 .

  • 1

    有关具有良好GUI的极低开销工具,请参阅SD Java测试覆盖率 . 我不确定我理解你的“运行两次”问题,但是如果用SD工具运行两次(相同的确定性)测试,你将得到相同的测试覆盖率数据,例如,它的幂等 . 如果您的测试是不确定的,那么您将获得两个不同的测试运行,但这些工具可以轻松地将多个运行的结果合并为一个总体摘要 .

    它们还可以处理非常大的应用程序,并且可以很好地处理多个线程应用程序(小时序碎片可以略微提出答案)在理论上不准确,但实践这不是一个问题) .

  • 8

    你考虑过Atlassian's Clover吗?

    maven-clover2-plugin有一个新的目标:clover2:setup,它可以简单地测试你的测试而不需要生命周期,或者运行测试两次 .

    您将定义在Hudson中运行的目标,如下所示:

    mvn clover2:setup verify clover2:aggregate clover2:clover
    

    maven-clover2-plugin绝对可以免费试用30天 .

相关问题