jenkins作为当下比较主流的开源集成工具,受到很多公司的肯定与热捧,其强大的功能,和围绕其开发的组建,为软件集成事业提供了强大的平台性技术支撑。
那么今天暂不介绍Jenkins的具体功能,今天先来介绍一个可以与Jenkins集成的统计代码测试覆盖率的插件性工具----jacoco。
Jacoco是一个开源的覆盖率工具。可以嵌入到Ant 、Maven中,并且提供了EclEmma Eclipse插件,亦可以使用JavaAgent监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等。
今天主要介绍下,jacoco远程获取java应用的测试覆盖率的配置方法。以及如何与Jenkins集成。以tomcat容器为例,先说下大概原理,应用程序部署在10.x.x.1 的tomcat_test上,在这个容器上启用一个java代理监听端口6304,远程执行ant命令,去10.x.x.1的6304把覆盖率数据dump到本地的exec文件中,在通过Jenkins的jacoco分析插件,来分析生成的exec文件,与配置中指定的源文件作为基础进行一个代码覆盖率的计算。
以下是进行的一次jacoco与Jenkins集成的实验部署:
jacoco 插件对jenkins 版本呦要求,Jenkins最好使用2.60以上版本,我使用的是2.60.3版本。
首先安装Jenkins ,具体不讲,网上资料多的很,Jenkins安装好,配置好待用。
1、安装ant ,跟jenkins服务装在一台机器上吧,这样方便操作
2、jenkins服务器上安装jacoco服务端,下载路径:http://www.eclemma.org/jacoco/ 下载jacoco压缩包。复制jacoco的jar包到Jenkins服务器ant的lib目录下。这里还有个jacocoagent.jar的jar包,这个jar是客户端jar包,下面会告诉你这个jar包怎么处理。
3、假设待测程序部署在10.x.x.1 的 tomcat_test 下。修改tomcat里的catalina.sh文件,在JAVA_OPTS里加上 -javaagent:/opt/test/libs/jacocoagent.jar=includes=*,destfile=/jacoco.exec,output=tcpserver,address=*,port=6304 。配置好后重启tomcat。
注:6304就是上面说的监听端口,执行ant dump命令时就是从这个端口下载数据。-javaagent:/opt/test/libs/jacocoagent.jar是上面说到的jacoco的客户端jar包,这个放在tomcat的服务器上。includes:表示针对指定的class进行覆盖率数据收集、output=file/tcpserver/tcpclient:覆盖率数据输出的形式,分别为file,tcpserver和tcpclient,file是比较简单的方式,tcp的方式可支持自行开发获取覆盖率数据的工具。不设置默认是file。tcpserver: The agent listens for incoming connections on the TCP port specified by the address and port attribute. Execution data is written to this TCP connection.(代理监听特定ip、端口号下的tcp连接,代码执行数据被写在了这个tcp连接中。) 这种方式不需要不需要重启tomcat。
4、jerkins服务器的workspace目录下创建ant的build.xml文件(这个文件也可以通过svn来管理)。build.xml文件的具体内容,后面会贴出来。
5.安装Jenkins的jacoco插件JaCoCo plugin
6、配置jenkins
解释下,这里要指定,生成的exec文件的路径,源码的路径,这个 插件可以解析出易读的覆盖率报告。
7、配置ant执行命令这条命令就是去远程服务器去覆盖率的命令,jacoco获取覆盖率不是实时的哦,执行命令是其中一种方法,还有一种方法是关闭tomcat。
8、构建job,会生成jacoco的图形分析结果,可看详细的覆盖率我就不截图展示了。
对于代码覆盖率,这只是jacoco最简单的用法,这只是实验性的,对于一个公司来讲,必须要形成统一解决方案,以便推广使用,必须有必要的脚本与代码的支持,或者接入公司的平台。玩法很多,个人认为于jenkins集成是一种性价比高的做法,但是灵活性不高,也不适合做后期的数据分析,若有条件,可以专门做一些开发,最好集成到平台,做数据收集,这对后期的数据驱动是十分有帮助的,当然,如果没有条件的话,jenkins集成用一用也是可以接受的。
build.xml有空我贴一份上来吧,也可以网上下载一个照着添添。