Hudson 中的 Java 代码覆盖率

2022-09-04 02:33:33

我正在将几个项目从蚂蚁构建迁移到一个专家构建。构建服务器是 ,并将继续保留,Hudson。

由于测试运行和记录两次问题,我一直在使用cobertura在hudson中记录代码覆盖率时遇到问题。

该项目是多模块的,如果不需要,但最好有代码覆盖率数据的聚合输出。

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

  • 对所有模块运行自动测试并记录一次结果;
  • 在哈德逊中显示各个模块代码覆盖率;
  • 为整个项目轻松配置一次,而不是在每个模块中。

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


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


答案 1

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

可选文字 http://sonar.codehaus.org/wp-content/uploads/2009/08/dashboard.png


答案 2

这有点黑客,但我使用的方法是使用Maven cobertura插件的修改版本可从他们的存储库中获得)。它提供了一个 cobertura:generate-report 目标,以便您可以在测试运行之前和之后分别将 cobertura:instrument 和 cobertura:generate-report 插入到您的生命周期中。这将为您提供所需的覆盖范围数据,而无需重复的测试执行/记录。

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

也就是说,虽然我已经看到了针对非检测代码和检测代码运行测试的有力论据,但我更喜欢只运行一次测试,针对工具化的代码 - 不仅仅是因为Maven/Hudson问题,而且因为当你有需要45分钟的测试时,坦率地说,运行它们两次以生成相同的结果似乎很愚蠢。


推荐