maven jacoco sonar覆盖率报告

总括:

            
1, surefire执行test的代码
2,jacoco扫描test的覆盖率,pom中加入依赖即可
3,sonar解析,展现jacoco的工具,pom中加入插件,setting文件中集成sonarqube服务地址

过程中需要注意的问题
1,maven中的settng文件和编辑器的setting需要一致,避免maven中用默认的配置文件,认证不通过
2,执行mvn clean verify sonar:sonar 过程中避免由于test执行失败,导致verify生成报告失败,进而阻止传到sonar

    maven配置文件默认和编辑器使用的注意区别
            https://www.cnblogs.com/larrydpk/p/12927398.html
            
            测试类有错误会阻止sonar结合jacoco覆盖解析传输
            
           
                org.apache.maven.plugins
                maven-surefire-plugin
               
true
               

           

            
            
        
            
            
配置如下:

                org.sonarsource.scanner.maven
                sonar-maven-plugin
                3.7.0.1746
            

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

            

            
        org.sonarsource.scanner.maven
        sonar-maven-plugin
        ${maven.sonarsource.version}
     

     
        org.jacoco
        jacoco-maven-plugin
        ${jacoco-maven-plugin.version}
       
         
           
              prepare-agent
              report
           

         

       

     

     
        maven-surefire-report-plugin
        ${maven-surefire-report-plugin.version}
       
          false
       

     
            
            

 

示例:

1 简介

单元测试是保证代码质量的重要一环,而如何衡量单元测试写得好不好呢?覆盖率(Coverage)是一个重要指标。而JaCoCo则是专门为Java提供的用于检测测试覆盖率的工具,英文全称为Java Code Coverage

本文将讲解如何在Maven项目中整合JaCoCo,并在SonarQube中展示。SonarQube的安装可以参考这篇文章:

《Docker搭建代码检测平台SonarQube并检测maven项目》

2 基本概念

这里所讲的覆盖率是指测试代码的覆盖率,这个指标有多种计算方式,如下是比较常用的有:

  • 行覆盖率:执行代码行数 / 总代码行数,判断有多少行代码被测试执行;

  • 类覆盖率:执行的类 / 代码中类总个数;

  • 分支覆盖率:执行的逻辑分支数 / 总的分支数,一般用于检测是不是lf/else都有测试覆盖;

  • 方法覆盖率:执行的方法数 / 代码总方法数,检测是否有方法被遗漏,构造方法也看作为方法。

  • 圈复杂度:用于判断代码结构的复杂程序,JaCoCo不考虑异常处理的分支;一般认为圈复杂度大于10,就存在比较大的风险,严格要求不可大于15。

颜色标识:

JaCoCo会通过颜色来标识代码覆盖情况,使其一目了然。红色表示没有覆盖,绿色表示已经覆盖,黄色表示部分覆盖。

执行方式:

执行JaCoCo有多种方式:

(1)直接通过命令执行:https://www.eclemma.org/jacoco/trunk/doc/agent.html

(2)Ant执行:https://www.eclemma.org/jacoco/trunk/doc/ant.html

(3)Maven执行:https://www.eclemma.org/jacoco/trunk/doc/maven.html

(4)集成IDE执行:https://www.eclemma.org/

我们接下来主要讲解maven的方式。

3 maven整合

3.1 基础整合

Maven整合JaCoCo也容易,配置如下:


  org.jacoco
  jacoco-maven-plugin
  ${jacoco.version}
  
    ${maven.test.skip}
    ${basedir}/target/coverage-reports/jacoco-unit.exec
    ${basedir}/target/coverage-reports/jacoco-unit.exec
    file
    true
    
      com/pkslow/basic/containsperformance/**
      com/pkslow/basic/ReadPropertiesFile
    

  
  
    
      jacoco-initialize
      
        prepare-agent
      
      test-compile
    

    
      jacoco-site
      verify
      
        report
      
    
  

执行mvn clean test,则会生成报告target/coverage-reports/jacoco-unit.exec,但这是人不可读的,Sonar可读的。Intellij Idea也可以阅读,按照Run--Show Code Coverage Data打开即可。

执行mvn clean verify,就会生成报告target/site/jacoco/,有多种格式,用浏览器打开index.html文件可以方便查看。如下图所示:

maven jacoco sonar覆盖率报告_第1张图片

3.2 选择范围

指定某些类不执行检测:


  com/pkslow/basic/containsperformance/**
  com/pkslow/basic/ReadPropertiesFile

3.3 规则与阈值

Rules标签可以指定检查阈值,比如类覆盖率必须为100%。在configuration里面配置如下:


  
    BUNDLE
      
      
        METHOD
        COVEREDRATIO
        0.50
      
      
        BRANCH
        COVEREDRATIO
        0.50
      
      
        CLASS
        MISSEDCOUNT
        0
      
    
  

这时需要有下面的check才会执行这个规则校验:


  check
  
    check
  

如果不满足条件,maven build就会失败。不过,如果我们集成了SonarQube,我们则会通过SonarQube来设置这个规则和阈值。

4 提交到Sonar

添加SonarQube配置信息如下,有三种配置方式:

(1)配置数据库信息


  
    sonar
    
      true
    
    
      jdbc:postgresql://localhost/sonar
      org.postgresql.Driver
      user
      password
      http://localhost:9000
    
  

(2)配置用户名密码


  
    sonar
    
      true
    
    
      http://localhost:9000
      admin
      admin
    
  

(3)配置令牌


  
    sonar
    
      true
    
    
      http://localhost:9000
      9656c84090b2481db6ea97b6d14d87d546bff619
    
  

以上三种都可以,配置完成后,执行命令如下:

mvn clean verify sonar:sonar

如果不想添加配置,可以直接通过命令来指定,命令如下:

mvn clean verify sonar:sonar -Dsonar.host.url=http://localhost:9000 -Dsonar.login=9656c84090b2481db6ea97b6d14d87d546bff619

5 总结

JaCoCo对项目质量管理作用重大,应该加以使用。最终的maven配置文件pom.xml行数太大,请到( https://www.pkslow.com/archives/maven-jacoco-sonar )参考。

 

参考:

https://www.cnblogs.com/larrydpk/p/12927398.html

你可能感兴趣的:(maven jacoco sonar覆盖率报告)