解决插件cobertura生成的代码覆盖率报告为0%的问题

在maven 的项目中使用cobertura的插件来生成java代码覆盖率的报告,但实际使用中,经常会出现出现报告的值全部 0%,特此文档来说明如何解决该问题。
所有的出现覆盖率为0%的问题均与运行单元测试的插件surefire有关,出现的各种问题均是由于该插件的设置forkcount与reuseForks所影响。
如果出现上述问题,请根据以下的说明与要求来配置surefire插件。
surefire插件官方说明: https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html

情况1:cobertura插件的bug引起,当maven-surefire-plugin中的配置项forkconut为0时,第一次产生报告时就会导致报告为0.
bug url: http://jira.codehaus.org/browse/MCOBERTURA-70

解决方案:
1. 运行两次 mvn cobertura:cobertura命令, 在jenkins中就是配置运行两次该命令。
2. 设置forkcount = 1, 修改参照:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>x.x.x</version>
<configuration>
<forkCount>1</forkCount>
<reuseForks>true</reuseForks>
</configuration>
</plugin>

PS:
1.此为默认配置,直接从adq-parent或直接使用该插件就为该值。
2.另外关于forkcount>0 设置可能导致单元测试运行在多个线程上而导致不是顺序执行的问题,我查询了官网的说明,原文为:
The default setting is forkCount=1/reuseForks=true, which means that Surefire creates one new JVM process to execute all tests in one maven module.
所以,如果项目中只有一个模块的话,所有的测试应该运行在同一个线程中的,所以设置为1也是可以的。

情况2: 当单元测试用例的内容较多或引用较多的外部lib,就可能会引起插件cobertura运行时出现内存溢出的错误(在日志中会有java.lang.OutOfMemoryError错误),而导致写代码覆盖率数据失败。Edit解决方案:首先需要说明该种情况在日志中会有OOM的错误。

1. 修改reuseForks = false, 注意此时surefire会为每个测试类启动一个独立JVM来运行单元测试,虽然避免了问题,但是如果单元测试之间有依赖关系的话就不能这样解决。另外这样也会导致运行测试的时间大大增加, 修改参照:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>x.x.x</version>
<configuration>
<forkCount>1</forkCount>
<reuseForks>false</reuseForks>
</configuration>
</plugin>

2. 如果第一种解决方法不适用的话,可以使用此种方法,为启动的JVM增加启动参数,-Xms512m -Xmx1024m -XX:MaxPermSize=128m, 设置启动内存同样能解决。注意在JDK1.8中,MaxPermSize已经被删除,并且引入了一种新的机制,应该不会再出现此类问题,所以如果修改了该值,JDK升级至1.8后请删除, 以下为修改的参照:

<groupid>org.apache.maven.plugins</groupId>
<artifactid>maven-surefire-plugin</artifactId>
<version>版本看情况吧~</version>
<configuration>
<argLine>-Xms512m -Xmx1024m -XX:MaxPermSize=128m</argLine>
</configuration>

时间: 2024-10-13 16:39:23

解决插件cobertura生成的代码覆盖率报告为0%的问题的相关文章

Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无法正常展示报告内容,仅有三个frame占位框,如下图所示 这是由于jenkins一些安全设置导致的展示不全问题,点击F12,可以看到如下报错 解决办法 方法一:登陆jenkins系统,点击"系统管理"----"脚本命令行",执行如下命令,重新刷新JunitReport日

axis2的wsdl无法使用eclipse axis1插件来生成客户端--解决方法

使用jetty+axis2实现webservice服务端,且无需使用axis2命令生成服务端代码,只要services.xml配置实现类. 工程为gradle工程配置文件在src/main/resources/axis2/WEB-INF/services.xml: <?xml version="1.0" encoding="UTF-8"?> <serviceGroup> <service name="wifiecService

Jenkins中集成Gcov代码覆盖率报告

最近终于把gcov代码覆盖报告集成到jenkins中了,总算是完成工作,写篇博客总结下. 我循序渐进地用了三个工具:gcov, lcov, gcovr 这三个工具原理(其实gcovr依赖于GNU的gcov的)都是收集你程序run之后所产生的*.gcda文件,总的来说,我个人觉得比较喜欢lcov,应为lcov的报告读起来很不错,可惜它不能集成到Jenkins... 从头说起... 一开始我用的是GNU tool gcov,网上学习了下gcov,生成了xx.cpp.gcov报告,然后就可以查看了,g

JMeter学习-039-JMeter 3.0 生成 dashboard HTML 报告图表中文乱码

近期,经常有人问 JMeter 3.0 使用时,生成的 HTML 报告图表中的中文乱码问题.在此,简略的说一下解决的方法. 编码相关信息如下: 1.查看控制 csv.xml 等配置结果文件生成.读取的文件编码格式是否正确. 配置文件路径:${JMETER_HOME}/bin/saveservice.properties,相应信息如下所示: 2.查看${JMETER_HOME}/lib/ext/ApacheJMeter_core.jar 的 org.apache.jmeter.report.cor

用插件maven-surefire-report-plugin生成html格式测试报告

在默认情况下,执行maven test/maven package/maven install命令时会在target/surefire-reports目录下生成txt和xml格式的输出信息. 其实maven也可以生成html格式的报告,只需要用一个插件即可:maven-surefire-report-plugin. 这个插件的特点: 1.能把生成的xml报告转换成html 2.能指定哪些测试类需要被执行,哪些测试类不被执行 3.能兼容JUnit 3.JUnit 4以及TestNG 4.在默认情况

ant + findbugs 安装及实现静态代码检查,并生成HTML检查报告

1.ant + findbugs安装 通过Eclipse或者MyEclipse继承ant.findbugs插件.插件可以到网上去下. 注:findbugs最好是下载1.3.9版本,如果是其他版本,可能在运行的时候会提示版本冲突错误! 2.通过findbugs做静态代码检查,此处可以说有两种方式. A.直接生成HTML报告形式,在项目根目录下新建文件build.xml,将如下代码复制进去 <project name="DHOME_ANDRIOD_CodeCheck" default

rally测试后生成的html报告,无法正常展示

问题 rally测试后生成的html报告,无法正常展示,如下: 查看控制台,无法正常加载js 查看html文件中的js配置 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.3/angular.min.js"></script> 发现无法访问这个地址 解决 更新地址为国内的angular地址 <script ty

Mybatis-Generator插件自动生成Dao、Model、Mapping相关文件

最近做项目,mapping 有点多而且容易写错,于是试着用了Mybatis-Generator 插件自动生成 dao, domain  mapping 文件.感觉还挺好用.把相关配置分享,一边以后做项目的时候直接拿来用.  我用的是eclipse Mybatis-Generator 插件. 环境:eclipse  Mars.2 插件:org.mybatis.generator.eclipse.site-1.3.5.201609070108 数据库jar:mysql-connector-java-

springmvc学习笔记--mybatis--使用插件自动生成实体和mapper

由于表对象在开发过程中会增删字段,有时候需要重新生成实体和对应的mapper,这时候可以通过mybatis的插件的生成. 优点是快速简洁,缺点同样很明显:覆盖.因此,通常是在第一次搭建框架的时候使用,因为开发过程中实体的字段会被修改,如添加注解validator.format等.所以架构师学会用包装对象?包装对象怎么实现在原始表的属性的控制呢,比如日期格式化,比如校验. 1.首先,在pom中依赖插件: 1 <!-- Mybatis generator代码生成插件 配置 --> 2 <pl