Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hudson中的Java代码覆盖率_Java_Hudson_Code Coverage_Cobertura_Emma - Fatal编程技术网

Hudson中的Java代码覆盖率

Hudson中的Java代码覆盖率,java,hudson,code-coverage,cobertura,emma,Java,Hudson,Code Coverage,Cobertura,Emma,我正在将几个项目从ant构建迁移到maven构建。构建服务器现在是,将来也是,Hudson 我一直在用cobertura记录哈德逊的代码覆盖率时遇到问题,因为 该项目是多模块的,虽然不是必需的,但最好有代码覆盖率数据的聚合输出 总而言之,我正在寻找的解决方案必须: 对所有模块运行自动测试,并记录一次测试结果 在Hudson中显示单个模块代码覆盖范围 可以在整个项目中轻松配置一次,而不是在每个模块中 该解决方案可以基于Cobertura、Emma或任何其他java代码覆盖工具 更新:使用Em

我正在将几个项目从ant构建迁移到maven构建。构建服务器现在是,将来也是,Hudson

我一直在用cobertura记录哈德逊的代码覆盖率时遇到问题,因为

该项目是多模块的,虽然不是必需的,但最好有代码覆盖率数据的聚合输出

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

  • 对所有模块运行自动测试,并记录一次测试结果
  • 在Hudson中显示单个模块代码覆盖范围
  • 可以在整个项目中轻松配置一次,而不是在每个模块中
该解决方案可以基于Cobertura、Emma或任何其他java代码覆盖工具


更新:使用Emma运行测试仍然会复制结果,并且没有
合并
功能,因此无法真正用于多模块构建。

Robert

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


Jeff

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

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

Hudson中缺少标准的工件库有点令人沮丧,但如果作者通常使用Maven来满足这些需求,这是有道理的。我们的构建过程在多个服务器上运行,因此我们不能只使用到其他作业目录的相对路径

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

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

您考虑过吗

maven-clover2-plugin有一个新的目标:它将简单地为您的测试提供工具,而无需分叉生命周期或运行两次测试

您可以这样定义在哈德逊运行的目标:

mvn clover2:setup verify clover2:aggregate clover2:clover

maven-clover2-plugin完全可以免费试用30天。

这有点不成熟,但我使用的方法是使用a(这是)。它提供了一个cobertura:generate报告目标,以便您可以在测试运行之前和之后分别将cobertura:instrument和cobertura:generate报告插入您的生命周期。这将获得所需的覆盖率数据,而无需重复的测试执行/记录

潜在的问题是,我遇到的所有非clover Maven覆盖插件都是围绕着在Maven生命周期中分别运行覆盖测试的思想构建的。显然,这会导致两组测试执行。如果您使用的是freestyle项目,则只会记录一组测试(因为即使有两个测试执行,也只有一个测试输出副本),但Maven项目类型实际上会截取Maven mojo执行,并在测试执行时记录测试输出/结果,而不是像自由式项目那样在构建结束时一次性完成。这有很多优点,但也有一个相当明显的缺点,即一个测试执行两次会被算作两个测试


也就是说,虽然我已经看到了针对未插入指令的代码和插入指令的代码运行测试的有力论据,但我更喜欢针对插入指令的代码只运行一次测试——这不仅仅是因为Maven/Hudson问题,而是因为当您的测试需要45分钟,坦率地说,两次运行它们以生成相同的结果似乎相当愚蠢。

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

它们还可以处理非常大的应用程序,并且可以很好地处理多线程应用程序(小的计时碎片可能会使答案在理论上有点不准确,但在实践中这根本不是问题)

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


谢谢你的回答。很高兴知道这一点,我会把它作为备用选项。当然。另外,我不是100%确定,但我相信发生的情况是,插入指令的代码在未插入指令的代码之前到达类路径,然后当surefire插件运行单元测试时,它运行插入指令的代码,这导致结果被计算两次。如果您有其他插件运行单元测试,您将看到测试的数量再次增加。您可以使用mvn-X运行您的构建以获取调试信息,这些信息应该给出类路径。感谢您的回复。我考虑过三叶草,但它不适合M2哈德森的工作,只有自由式的。嗨,罗伯特,我会研究一下。不过,如果你使用自由式的专家工作,它肯定是有效的。干杯,尼克谢谢你的回答。这个工具的maven插件也有任何变化吗?我找不到链接。链接不再有效,也许你可以更新它们?谢谢