Java代码覆盖率工具(Sonar+Jacoco)部署
来源:互联网 发布:c语言实现文件复制传输 编辑:程序博客网 时间:2024/05/21 10:05
方法局限
代码覆盖率的定义:对某一段代码或者代码的某一种属性做测试,其测试达到的程度被称为是覆盖率,比如对语句的覆盖,对分支或者条件的覆盖,等等。
计算方法:把现有的测试与可能执行的测试做比较,现有测试能够占总的可能执行的测试的多少比例。
覆盖率的经典定义没有考虑到一些情况,比如:
1. 输入特定的某个值或者某组值:边界值或者特殊的值;
2. 在编码中遗漏的代码:在代码中没有实现需求却要求的功能;
3. 中断,以及其他并行操作的情况。
Cem Kaner在他的著作“Software Negligence & Testing Coverage”里列举了101种这样的例子。
尽管覆盖率有一定的缺陷,但是还是需要量化的衡量维度(可扩充)。
工具调研
信息收集工具
市场上主要代码覆盖率工具:Emma、cobertura、jacoco、Clover(商用)。
覆盖粒度的具体意义?分支覆盖是指 if else的覆盖。
HUDSON:Java开发的一种持续集成工具。
具体见下表:
更多工具对比参考:https://confluence.atlassian.com/display/CLOVER/Comparison+of+code+coverage+tools
结果展示的工具
Jekins:代码集成工具,其中的插件Jacoco plugin可以根据.exec文件直接生成覆盖率报告,并在Jenkins中生成图表等。
Sonar:一个管理代码质量的开放式平台,可以用于做覆盖结果展示,可以具体看到覆盖到哪些源代码,做用例调整参考。
EclEmma:Eclipse的插件,可以用于做覆盖结果展示,可以具体看到覆盖到哪些源代码,做用例调整参考。它严格要求执行时的class文件与展示用的class文件一模一样,比较适合白盒用例测试。
ECLEmma与EMMA的关系
EclEmma 1.X 是基于Emma的eclipse图形版本,可以自动生成图片。2.X已经更换为基于jacoco,白盒测试覆盖工具。
Originally EclEmma was inspired by and technically based on the great EMMA library developed by Vlad Roubtsov.
调研结果
采用Sonar:覆盖结果展示;Jacoco:用于在服务器端产生覆盖数据;命令行方式处理匹配结果;
由于Jacoco在0.7.3之后有较大变动,为了在测试过程中不出现异常,在构建测试环境时需特备注意软件版本之间的关联,以下为典型的两种版本方案:
- 方案一:Jacoco0.7.4、 SonarQube -5.1.2、Javaplugin 3.1(sonar) 、Java 1.7+、SonarQube Scanner 2.6.1+
- 方案二:Jacoco0.7.5+、SonarQube-5.2+、Javaplugin 3.4(sonar)+ 、Java8+、SonarQube Scanner 2.6.1+
备注:版本号+为此版本以后的都可以兼容,Jacoco目前截止目前版本为0.7.7,SonarQube截止目前版本为5.6, SonarQube Scanner截止目前版本为2.6.1
实现方案
1.下载Jacoco并解压上传至服务器
http://www.eclemma.org/jacoco/index.html
2.在tomcat的catalina.sh文件中(图中位置)加上下面一段代码:指定javaangent的安装位置,指定结果文件jacoco.exec(运行后生成此文件)的位置。
if [ "$1" = "run" ]; then JAVA_OPTS="-javaagent:XX/lib/jacocoagent.jar=destfile=XX/jacoco.exec"elif [ "$1" = "start" ]; then JAVA_OPTS="-javaagent:XX/lib/jacocoagent.jar=destfile=XX/jacoco.exec "fiexport JAVA_OPTS
将jacoco的文件路径替换上文中的XX。如下图所示:
3.检验是否部署成功:
启动tomcat
在命令行输入ps -ef|grep tomcat,查看对应tomcat是否带有-javaagent参数,如下图,则配置成功。
刷新为jacoco安装目录,查看是否生成了jacoco.exec文件。如果有此文件,则部署成功。
4.做功能测试时,需要关闭tomcat获取结果文件jacoco.exec,不能使用用kill -9,否则不能生成结果,使用kill [进程号]。
5.下载SonarQube并解压到本机。
http://www.sonarqube.org/downloads/
6.开启SonarQube:进入本地操作系统所对应的目录,比如本机操作系统为windows64位的,则进入sonarqube-5.1.2\bin\windows-x86-64目录,双击StartSonar.bat启动SonarQube。
7.验证SonarQube是否正常运作:浏览器访问http://localhost:9000/ ,然后登陆,用户名:admin,密码:admin。
8.从SVN下载对应项目的源码包(包含Java文件及其他三方库等),源码包中需包含已经编译好的Class文件,如图所示。如果没有Class文件则可以从伺服服务器中将对应的Class文件下载到对应文件夹。
9.在项目文件中新增Sonar项目配置文件:sonar-project.properties,并在文件中设置项目的参数,供Sonar读取,以及Class文件的地址和结果文件的地址,供Sonar-Runner读取:
脚本代码参考:
# must be unique in a given SonarQube instancesonar.projectKey=projectName# this is the name displayed in the SonarQube UIsonar.projectName= projectName#sonar.language=javasonar.projectVersion=1.0# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.# Since SonarQube 4.2, this property is optional if sonar.modules is set.# If not set, SonarQube starts looking for source code from the directory containing# the sonar-project.properties file.sonar.sources=.#sonar.binaries=C:/Users/Administrator/Desktop/codes/web/yyxw/WebRoot/WEB-INF/classes/comsonar.java.binaries=C:/Users/Administrator/Desktop/codes/web/yyxw/WebRoot/WEB-INF/classes/com# Encoding of the source code. Default is default system encodingsonar.sourceEncoding=UTF-8#Set jacoco Configuration#Code coverage toolsonar.java.coveragePlugin=jacoco#Path to the JaCoCo report file containing coverage data by unit tests. The path may be absolute or relative to the project base directorysonar.jacoco.reportPath=jacoco.exec#Path to the JaCoCo report file containing coverage data by integration tests. The path may be absolute or relative to the project base directorysonar.jacoco.itReportPath=jacoco.exec#sonar.jacoco.reportMissing.force.zerosonar.jacoco.reportMissing.force.zero=false
10.下载SonarQube Scanner:Sonar插件,读取sonar-project.properties用于扫描源码,将Jacoco数据结果文件对应到源码中去。
http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
11.安装SonarQube Scanner:将压缩包解压,粘贴复制到SonarQube所在文件夹,将文件合并即可。
12.将Sonar的bin文件目录加到系统环境变量中
13.验证环境变量是否加入成功:打开cmd,直接输入sonar-runner.bat出现图中界面即成功。
14.命令行cmd执行匹配结果
1)打开项目及sonar-project.properties文件所在目录
cd [工程代码文件路径],并在此路径下启动sonar,执行sonar-runner.bat即可。
2)注意查看dos界面打印信息,如果有错误信息,需要及时改正后重试。
15.浏览器再次打开sonar出现刚刚匹配过的项目,点击preoject的黑色浮框,可以看到不同的颜色对应了不同的覆盖程度,颜色越红覆盖得越少,颜色越绿,覆盖得越多,点击不同的版块,可以看到版块内部的覆盖情况。
遗留问题
1) Sonar+Jacoco为白盒测试提供参考。
2) 实践方面,如何融入到开发流程中。
3) 开发流程中需要注意的问题:单功能整体开发。
4) 数据库相关,Sonar使用的为默认内置的数据库,如果需要将Sonar配置在其他主机上,则要重新写配置文件和安装其他数据库,详细文档见官网。
5) Jacoco的数据结果每次都要手动去服务器下载,要自动下载结果需重新写配置文件。
扩展阅读
[1]. Jacoco官网 http://www.eclemma.org/jacoco/index.html
[2]. Sonar官网 http://www.sonarqube.org/
[3]. Cem Kaner .“Software Negligence & Testing Coverage”
- Java代码覆盖率工具(Sonar+Jacoco)部署
- java代码覆盖率工具-Emma和Jacoco
- JAVA代码覆盖率工具JaCoCo-实践篇
- JAVA代码覆盖率工具JaCoCo-踩坑篇
- JAVA 代码覆盖率工具 JaCoCo-原理篇
- sonar 集成代码测试覆盖率插件jacoco
- 安装部署Sonar+jacoco,生成case覆盖率统计报告
- Jacoco是一个Java代码覆盖率统计工具
- 【腾讯TMQ】JAVA代码覆盖率工具JaCoCo-原理篇
- 【腾讯TMQ】JAVA代码覆盖率工具JaCoCo-实践篇
- 【腾讯TMQ】JAVA代码覆盖率工具JaCoCo-踩坑篇
- JAVA代码覆盖率工具JaCoCo-原理简单分析
- Java单元测试之代码覆盖率-JaCoCo
- Jacoco覆盖率工具使用
- jacoco远程统计代码覆盖率(实践)
- 代码覆盖率-JaCoCo
- sonar ant+jacoco 编译测试并出具测试代码覆盖率报告
- sonar maven 代码覆盖率
- ~/.bashrc 配置
- 程序设计实训项目二 歌手大奖赛计分程序
- H5+APP开发,iOS下拉弹回特效实现CSS
- jQuery对象方法操作html元素内容
- uva11859 Division Game
- Java代码覆盖率工具(Sonar+Jacoco)部署
- 利用git工具上传本地代码到远程仓库
- Linux Awk命令详解
- c语言函数指针的理解与使用
- 【leetcode】1.Two Sum
- ie下兼容奇偶
- DirectVobSub(VsFilter)的基本原理和实现实现
- Oracle分页
- git的配置