• SonarQube学习(三)- 使用SonarQube扫描项目代码检测覆盖率


    一、前言

    元旦三天假,两天半都在玩86版本DNF,不得不说,这个服真的粘度太高了,但是真的很良心。

    作为一个老玩家,玩的就是个情怀!

    说明:

    注册账号上线100w点券,一身+15红字史诗装备以及+21强化新手武器。在线泡点一分钟888点券。所有东西皆可白嫖!

    游戏成就

    附图1

    附图2

    附图3

    附图4

    这把+21的武器,创建角色就给,刷图是真的太爽了!

    附图5

    我拿到坠入深渊的灵魂称号,刷到红狗所有鬼剑的85版本史诗武器,天御三等二,开盒子开到手软,重点是不花钱,不花钱!

    下午突然想到SonarQube这个我还没学完,接着便开始接着搞SonarQube,自己想做的事,必须要坚持,有始有终,一定要更新完。

    正事的时候,我一般都是随时可以退掉不玩,哈哈,谁和我打排位估计会坑吧。

    二、准备

    1、创建一个springboot 工程

    此处略

    2、随便写几个 Service Controller 及API的测试方法。

    代码1,示例如下:

    package com.rongrong.springboot.demo.controller;
    
    import com.rongrong.springboot.demo.responstory.StudentResponstory;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
    import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
    
    /**
     * @description: 对API进行单元测试
     * @author rongrong
     * @version 1.0
     * @date 2021/1/03 14:12
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @AutoConfigureMockMvc
    public class StudentApiTest {
    
    
        @Autowired
        MockMvc mockMvc;
    
        @Test
        public void testStudentApiTest() throws Exception {
            mockMvc.perform(MockMvcRequestBuilders.get("/students"))
                    .andExpect(MockMvcResultMatchers.status().isOk())
                    .andExpect(MockMvcResultMatchers.content().string("[{"id":16,"name":"alex","age":10,"sex":"boy","email":"alex@gmail.com"},{"id":857,"name":"tester","age":15,"sex":"boy","email":"tester@gamil.com"}]"));
        }
    
    }
    
    

    代码2,示例如下:

    package com.rongrong.springboot.demo.controller;
    
    import com.rongrong.springboot.demo.domain.Student;
    import com.rongrong.springboot.demo.responstory.StudentResponstory;
    import org.junit.Assert;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    /**
     * @description: 对service进行单元测试
     * @author rongrong
     * @version 1.0
     * @date 2021/1/03 14:52
     */
    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class StudentControllerTest {
    
        @Autowired
        StudentResponstory studentResponstory;
    
        @Test
        public void sudentFindOne() {
            Student student = studentResponstory.findOne(16);
            Assert.assertEquals(new Integer(10), student.getAge());
        }
    }
    
    

    3、配置本地 maven 配置文件 conf/settings.xml

    添加如下内容:

      <pluginGroups>
    	<!-- SonarQube 插件 -->
    	<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
      </pluginGroups>
      
      <profiles>
    	<!-- SonarQube 插件 -->
    	<profile>
    		<id>sonar</id>
    		<activation>
    			<activeByDefault>true</activeByDefault>
    		</activation>
    		<properties>
    			<!-- Optional URL to server. Default value is http://localhost:9000 -->
    			<sonar.host.url>
    			  http://192.168.1.106:9000
    			</sonar.host.url>
    		</properties>
    	</profile>
      </profiles>
    
    

    4、在pom.xml中引入JaCoCo插件

    添加如下内容:

    <plugin>
        <groupId>org.jacoco</groupId>
        <artifactId>jacoco-maven-plugin</artifactId>
        <version>0.8.2</version>
        <executions>
            <execution>
                <goals>
                    <goal>prepare-agent</goal>
                </goals>
            </execution>
            <!-- change phase from verify to test -->
            <execution>
                <id>report</id>
                <phase>test</phase>
                <goals>
                    <goal>report</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
    

    三、配置扫描数据

    1、添加文件

    在项目下:添加 sonar-project.properties 文件

    2、复制以下文件内容

    # 指定SonarQube instance必须是唯一的
    sonar.projectKey=springboot_demo
    # 设置SonarQube UI显示的名称 
    # PS:有人会问这里的名称是否可以是中文名称,我在网上搜索了好多资料都说是不可以的(至少我看到的资
    #料都是)后来自己尝试了一下,答案是可以写成中文的,但是要换一种方式,比如你想把项目名称命名为“测
    #试”,那么在这里就要写成“u6d4bu8bd5”,那么下面这个参数就应该这样写“sonar.projectName= 
    #u6d4bu8bd5”,说白了就是将中文转成Unicode
    sonar.projectName=springboot_demo
    sonar.projectVersion=1.0
    sonar.language=java
    # 指定src和classes文件夹位置,当然也可以是全路径,如果是当前工程根目录下用“.”表示也可以,比如“sonar.sources=.”
    sonar.sources=src/main
    sonar.test=src/test
    sonar.java.binaries=target
    # 下面的这两个参数作用是相同的,因为有时我们需要指定某个文件夹或者忽略某个文件夹
    # sonar.inclusions=src1/**,src3/**
    # sonar.exclusions=src2/**,src4/**
    # 源码编码,默认是系统编码
    sonar.sourceEncoding=UTF-8
    # Set jacoco Configuration
    # 指定代码覆盖率工具
    sonar.core.codeCoveragePlugin=jacoco
    # 指定exec二进制文件存放路径
    #sonar.jacoco.reportPaths=[yourPath/]jacoco.exec
    #本demo之前设置的exec文件是在工程根目录下的target/coverage-reports下:
    
    sonar.jacoco.reportPaths=target/jacoco.exec
    # 以下属性可选择性加,当然也可以不加
    sonar.dynamicAnalysis=reuseReports
    sonar.jacoco.reportMissing.force.zero=false
    

    3、运行

    在项目根目录下,运行** mvn package**.

    当build成功的时候Jacoco的结果就会产生在target/site/jacoco文件夹下。

    接着,在项目根目录下运行命令 sonar-scanner,如果看到以下结果证明已经覆盖率已经可以在SonarQube上查阅。

    四、在SonarQube查看扫描结果

    刷新下系统页面,如下显示

    知识点:
    借用风总说的话就是,你要先进行测试才有覆盖率

    五、结束语

    下一篇就是收尾了,Jenkins集成JaCoCo和SonarQube和检查代码测试覆盖率。

    来个互动,powermock用这个能做覆盖率吗,有兴趣的同学可以尝试下,此处埋下伏笔了,哈哈。

  • 相关阅读:
    __str__和__repr__
    面向对象进阶实战之选课系统
    面向对象总结
    反射(hasattr和getattr和setattr和delattr)
    类和对象的绑定方法及非绑定方法
    -bash: mysql: command not found 解决办法 (转)
    C++类的const成员函数、默认的构造函数、复制形参调用函数(转)
    Zend Framework学习日记(2)--HelloWorld篇(转)
    Zend Framework学习日记(1)--环境搭建篇(转)
    用C/C++扩展你的PHP(转)
  • 原文地址:https://www.cnblogs.com/longronglang/p/14226765.html
Copyright © 2020-2023  润新知