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:有人会问这里的名称是否可以是中文名称,我在网上搜索了好多资料都说是不可以的(至少我看到的资
#料都是)后来自己尝试了一下,答案是可以写成中文的,但是要换一种方式,比如你想把项目名称命名为“测
#试”,那么在这里就要写成“\u6d4b\u8bd5”,那么下面这个参数就应该这样写“sonar.projectName=
#\u6d4b\u8bd5”,说白了就是将中文转成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查看扫描结果
刷新下系统页面,如下显示
知识点:
借用风总说的话就是,你要先进行测试才有覆盖率
五、结束语
powermock用这个能做覆盖率吗,有兴趣的同学可以尝试下,此处埋下伏笔了,哈哈。
下一篇就是收尾了,Jenkins集成JaCoCo和SonarQube和检查代码测试覆盖率。
SonarQube学习(三)- 项目代码扫描的更多相关文章
- PHP多进程学习(三)__代码案例来了解父进程与子进程的执行顺序
pcntl_fork创建子进程成功的话,系统就有了2个进程,一个为父进程,一个为子进程,父进程和子进程都继续向下执行,子进程的id号为$pid(父进程会获取子进程的$pid也就是$pid不为0,而子进 ...
- SonarQube+Jenkins+Cppcheck实现C++代码扫描
背景:公司部分项目是由C++进行开发,因此对此有需求. sonarqube:docker化安装(alpine系统),版本8.3.1 (build 34397) jenkins:docker化安装,版本 ...
- 持续集成工具之jenkins+sonarqube做代码扫描
上一篇我们主要聊了下代码质量管理平台sonarqube的安装部署以及它的工作方式做了简单的描述和代码扫描演示:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13 ...
- 转: 学习开源项目的若干建议(infoq)
转: http://www.infoq.com/cn/news/2014/04/learn-open-source 学习开源项目的若干建议 作者 崔康 发布于 2014年4月11日 | 注意:GTLC ...
- 华为章宇:如何学习开源项目及Ceph的浅析
转自http://www.csdn.net/article/2014-04-10/2819247-how-to-learn-opensouce-project-&-ceph 摘要:开源技术的学 ...
- 手把手教你用SonarQube+Jenkins搭建--前端项目--代码质量管理平台 (Window系统)
前言 网上教程大多介绍的是Linux系统下SonarQube+Jenkins如何使用,这是因为这两款软件一般都是部署在服务器上,而大多数服务器,采用的都是Linux系统.大多数服务器用Linux的原因 ...
- SonarQube+jenkins-自动化持续代码扫描
SonarQube+jenkins-自动化持续代码扫描 1.SonarQube 1.1 SonarQube介绍 1.1.1 SonarQube 工作流程 1. 2 Docker方式安装SonarQub ...
- 【Lua篇】静态代码扫描分析(三)语法分析
一.语法分析 通过将词法分析获取的Token流按照目标语言的语法进行解析的过程,例如解析函数声明.函数调用.变量声明.各种语句等. 二.Lua语法分析 在写语法分析程序前,先需要了解Lua的语句和语法 ...
- 代码扫描利器sonarqube
sonar的作用 1.代码质量和安全扫描和分析平台. 2.多维度分析代码:代码量.安全隐患.编写规范隐患.重复度.复杂度.代码增量.测试覆盖率等. 3.支持25+编程语言的代码扫描口分析,包含java ...
随机推荐
- jdk源码之 hashmap 与hashtable 的区别
hashmap hashtable 线程安全 否,但jdk5之后,提供ConcurrentHashMap,可 替代HashTable. 是,synchronized value是否允许为空 是 否 ...
- Android10_原理机制系列_事件传递机制
前言和概述 Android的输入设备,最常用的就是 触摸屏和按键 了.当然还有其他方式,比如游戏手柄,比如支持OTG设备,则可以链接鼠标.键盘等. 那么这些设备的操作 是如何传递到系统 并 控制界面的 ...
- 效率神器-MouseInc推荐和使用
主要功能 鼠标手势 按住右键滑动即可开始使用. 配置细微,可自由修改手势宽度,颜色,识别灵敏度等. 支持黑名单,支持特定软件自定义手势,支持复合动作. 功能非常强大,比如下面的操作: 选中一个网址,画 ...
- 老男孩培训作业day1
作业一:博客(开通博客园) 作业二:编写登录接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 作业三:多级菜单 三级菜单 可依次选择进入各子菜单 所需新知识点:列表.字典(列表和字典的相互 ...
- 半夜删你代码队 Day3冲刺
一.每日站立式会议 1.站立式会议 成员 昨日完成工作 今日计划工作 遇到的困难 陈惠霖 了解相关网页设计 了解相关网页设计 无 侯晓龙 写了第一个例子 尝试写第一个实例子 无 周楚池 学习 与余金龙 ...
- 密码学系列之:明文攻击和Bletchley Park
目录 简介 crib和明文攻击 布莱奇利公园(Bletchley Park) 简介 明文攻击就是指已经知道了部分明文和它对应的加密后的字段,从而可以推测出使用的加密手段或者密码本.明文攻击这个故事还要 ...
- redis学习之——五大基本数据类型
redis 键 (key) 基本数据类型:string 字符串 list (列表) set(集合) hash(类似java 中的Map) zset(有序集合) 官方命令doc redis 键 ...
- 四、java多线程核心技术——synchronized同步方法与synchronized同步快
一.synchronized同步方法 论:"线程安全"与"非线程安全"是多线程的经典问题.synchronized()方法就是解决非线程安全的. 1.方法内的变 ...
- MySQL的验证方式
mysql8之后root用户的密码验证方式修改了,mysql8的加密方式为caching_sha2_passoword,而navicat连接所用的方式为native_password. 使用命令mys ...
- 情话爬虫工具[windows版]
有没有在气氛暧昧的情况下想说点什么却又无话可说?女朋友有没有抱怨过你,只会写代码,一点都不懂情调?这次,是时候要改变她对你的看法了!一键爬取情话,情话全都躺在txt里面.想怎么玩就怎么玩!张口一句情话 ...