单元测试覆盖率(Jenkins+sonarqube)

越来越懒得写总结了   好多都是几句话搞定orz...


搭建了Jenkins+sonar的环境(很久之前搭得了  靠回忆写吧)  Jenkins的搭建就不再赘述。

sonar负责检测代码质量与查看代码覆盖率。这个工具先搭建起来可以正常使用, 但页面上各个功能都是做什么的还没有研究。


sonar有sonarqube和sonarscanner(旧称sonar-runner)sonarscanner是代码扫描工具,将项目的代码读取并发送至SonarQube服务器中,才能让SonarQube进行代码分析。


sonarqube需要用到的东西  jdk 、 mysql、 中文插件(放在SONARQUBE_HOME/extensions/plugins  http://docs.codehaus.org/display/SONAR/Chinese+Pack)。 

The onlyprerequisite for running SonarQube is to have Java (Oracle JRE 8 onwards orOpenJDK 8 onwards) installed on your machine.(需要jdk1.8具体信息看官网https://docs.sonarqube.org/display/SONAR/Requirements



安装mysql

为sonarqube server创建一个数据库

CREATE DATABASE sonar CHARACTER SET utf8 COLLATEutf8_general_ci;

 

创建访问数据库的用户:

CREATE USER 'sonar' IDENTIFIED BY 'sonar';

配置sonar用户的权限(tips: 'sonar'@'%'可配置用户远程连接数据库 ,  可参考 http://www.cnblogs.com/davidgu/p/3706663.html)

GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY'sonar'; GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';flush privileges;

 

安装sonarqube

在/conf/sonar.properties里面添加数据库信息:

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance

sonar.jdbc.username:                       sonar

sonar.jdbc.password:                       sonar

# Optional properties

sonar.jdbc.driverClassName:                com.mysql.jdbc.Driver

 

配置好后保存  到bin目录下启动StartSonar.bat

SonarQube默认的端口号是9000

网页查看http://192.168.100.194:9000

 

安装sonarscanner

设置SONAR_RUNNER_HOME环境变量 并在PATH中加入%SONAR_RUNNER_HOME%\bin;

如果只是在Jenkins所在服务器上  使用Jenkins系统管理的默认安装就好

scannerqube装在了同一台服务器上scanner下载后安装位置随意。

scanner的bin目录下sonar-scanner.properties里加上qube的地址(如果不在同一台服务器 localhost改成qube所在ip地址)

sonar.host.url=http://localhost:9000

单元测试覆盖率(Jenkins+sonarqube)_第1张图片

 

配置Jenkins

 

系统设置中配置sonarqube所在服务器的jdk

下载插件SonarQubeScanner for Jenkins

登录sonarqube页面,在我的账号中找安装项,生成token。

单元测试覆盖率(Jenkins+sonarqube)_第2张图片

 

在Jenkins的系统管理中配置sonarqube信息,填入获取的token。

单元测试覆盖率(Jenkins+sonarqube)_第3张图片


这样以后构建完就可以在Jenkins上链接到qube

 

Jenkins2中在Global Tool Configuration里配置scanner信息。(经过试验 发现不配置也可以)

 

 构建项目

在maven命令行中写上

clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true

-Dmaven.test.failure.ignore=true作用:当测试失败时maven会自动停止构建此参数可以告诉maven忽略失败的测试继续构建 

该参数的作用与在pom文件中maven-surefire-plugin插件的testFailureIgnore 这个配置属性设置为 true是一样的


org.apache.maven.plugins
maven-surefire-plugin

true



使用sonarqube:

单元测试覆盖率(Jenkins+sonarqube)_第4张图片

sonar.projectKey=dd_Sonar

sonar.projectName=dd_Sonar

sonar.projectVersion=1.0

 

sonar.language=java

sonar.sourceEncoding=UTF-8

sonar.sources=./src  (被测代码所在目录)

sonar.java.binaries=./target  

 

sonar.java.coveragePlugin=jacoco

sonar.jacoco.reportPaths=./target/coverage-reports/jacoco-unit.exec

sonar.dynamicAnalysis=reuseReports

 

 

坑:

1、maven项目父pom有跳过测试的代码    去掉就可以执行测试步骤了

       org.apache.maven.plugins

       maven-surefire-plugin

       2.18.1

       

         true

       

     

2、有的人说jacoco只是分析了单元测试的代码覆盖率 并不能执行测试  需要在pom文件中添加junit插件才可以  但是我实验的结果是 只要加入了jacoco的插件就ok。而且单元测试的结果会直接生成xml  根本不需要此插件。

单元测试覆盖率(Jenkins+sonarqube)_第5张图片

           junit

           junit

           4.11

           compile

       


jacoco插件

单元测试覆盖率(Jenkins+sonarqube)_第6张图片

                   org.jacoco

                   jacoco-maven-plugin

                   0.7.7.201606060606

                  

                           

                            target/coverage-reports/jacoco-unit.exec

                           

                            target/coverage-reports/jacoco-unit.exec

                  

                           

                                    

                                               jacoco-initialize

                                              

                                                        prepare-agent

                                              

                                    

                           

                                               jacoco-site

                                               test

                                              

                                                        report

                                              

                           

                  

                  

 

 

 

有人会遇到sonar中显示了单元测试数量却没有覆盖率的情况但是我发现只要加了jacoco插件后使用clean install 就会成功的


结果:

单元测试覆盖率(Jenkins+sonarqube)_第7张图片


你可能感兴趣的:(单元测试覆盖率(Jenkins+sonarqube))