目的:检查代码覆盖率,包括对语句的覆盖,对分支或者条件的覆盖等等

实现原理:1、服务器上采集收据

                  2、采集数据和本地源码做匹配

                  3、浏览器展示匹配结果

使用工具:Sonar5.4:覆盖结果展示;

                 Jacoco7:用于在服务器端产生覆盖数据;

                 命令行方式处理匹配结果;

                 JDK1.8

                 SonarQube Scanner 3.2;

一、服务器环境搭建

1、下载Jacoco并解压上传至服务器(linux)

http://www.eclemma.org/jacoco/index.html

2、在gsxdb.properties文件中加入:指定javaangent的安装位置,指定结果文件jacoco.exec(运行后生成此文件)的位置。

sonarqube android 覆盖率 sonarqube代码覆盖率_java

 

 -javaagent:XX/lib/jacocoagent.jar=destfile=XX/jacoco.exec

3、检验是否部署成功:

例gs项目:ps -ef | grep Main_Gs

sonarqube android 覆盖率 sonarqube代码覆盖率_java_02

刷新安装目录,查看是否生成了jacoco.exe文件,如果有此文件,则部署成功。

sonarqube android 覆盖率 sonarqube代码覆盖率_java_03

 

  

4、做功能测试时,需要关闭进程获取结果文件jacoco.exec. 

二、本地环境搭建

1、下载SonarQube并解压到本地。

http://www.sonarqube.org/downloads/

2、开启SonarQube:进入本地操作系统对应的目录,如本地操作系统为windows64位,则进入D:\aotu\sonarqube-5.4\bin\windows-x86-64,双击StartSonar.bat启动SonarQube。

sonarqube android 覆盖率 sonarqube代码覆盖率_数据_04

3.验证SonarQube是否正常运作:浏览器访问http://localhost:9000/

4、进入对应的源码项目,

1)将服务器下载的jacoco.exec,放入目录中

2)新增配置文件:sonar-project.properties,设置项目的参数,供Sonar读取,以及Class文件的地址和结果文件的地址,供Sonar-Scanner读取。

 

sonarqube android 覆盖率 sonarqube代码覆盖率_数据_05

 

 

脚本代码参考

# must be unique in a given SonarQube instance
sonar.projectKey=gs
# this is the name displayed in the SonarQube UI
sonar.projectName= gs
#sonar.language=java
sonar.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/com
sonar.java.binaries=项目class文件
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

#Set jacoco Configuration
#Code coverage tool
sonar.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 directory
sonar.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 directory
sonar.jacoco.itReportPath=项目路径/jacoco.exec
#sonar.jacoco.reportMissing.force.zero
sonar.jacoco.reportMissing.force.zero=false

5、下载SonarQube Scanner:Sonar插件,读取sonar-project.properties用于扫描源码,将Jacoco数据结果文件对应到源码中去。SonarScanner最新版本是4.2,但需jdk11了。咱们的环境是jdk8,只能用SonarScanner3.2。

https://docs.sonarqube.org/pages/viewpage.action?pageId=11641634&navigatingVersions=true

6、安装SonarQube Scanner:将压缩包解压,粘贴复制到SonarQube所在文件夹,将文件合并即可。

sonarqube android 覆盖率 sonarqube代码覆盖率_数据_06

 

 

7、将Sonar的bin文件目录加到系统环境变量中

sonarqube android 覆盖率 sonarqube代码覆盖率_数据_07

 

 

8、验证环境变量是否加入成功:打开cmd,直接输入sonar-scanner.bat出现图中界面即成功。

sonarqube android 覆盖率 sonarqube代码覆盖率_服务器_08

9、cmd执行匹配结果

打开项目及sonar-project.properties文件所在目录

cd [项目代码路径],并在此路径下启动sonar,执行sonar-scanner.bat。

sonarqube android 覆盖率 sonarqube代码覆盖率_java_09

 

 

10、注意查看dos界面打印信息,如果有错误信息,具体查看报错原因。

执行完是Excution Success。

sonarqube android 覆盖率 sonarqube代码覆盖率_java_10

 

11、登录http://localhost:9000,打开匹配的项目,不同的颜色对应不同的覆盖程度,颜色越红覆盖得越少,颜色越绿,覆盖得越多,点击不同的版块,可以看到版块内部的覆盖情况。