单元测试平台搭建:sonarQube+sonarScanner+Jenkins+jacoco
单元测试平台搭建及结果分析
一、方案
需求目标:提高单元测试覆盖率和规范代码编写规范
选用工具:Sonarqube、sonarqube Scanner、Jenkins、jacoco
方案:
工程中引入jacoco进行代码覆盖率统计,通过sonarqube scanner扫描工程编写规范,编写单元测试代码后,结合Jenkins每次的编译部署自动执行代码规范扫描和单元测试代码,并将结果推送到sonarqube平台进行图形展示。
步骤:
- 1、选择合适的测试框架:选择一个适合项目的单元测试框架,例如JUnit(Java项目)。
- 2、设置测试环境:确保在测试环境中安装和配置所有必需的软件和工具,包括构建工具、依赖项管理器和代码覆盖率工具等。
- 3、编写测试代码:编写单元测试代码,测试各个单元功能是否按预期工作。确保覆盖代码的不同路径和边界情况。需要开发配合。
- 4、自动化测试:使用持续集成工具Jenkins设置自动化测试流程,以便在每次代码提交或定期基准测试时运行单元测试。
- 5、代码覆盖率检查:使用代码覆盖率工具JaCoCo来检测测试代码覆盖的代码范围,以确保测试足够全面。
- 6、测试结果:jenkins将结果推送到sonarqube平台进行图形展示。
二、修改配置信息
1、/etc/security/limits.conf 配置文件
ulimit -n 是用来设置当前用户的文件描述符限制(file descriptor limit)的命令。该限制用于控制一个进程可以同时打开的文件数。
ulimit -u 是限制用户最大可用进程数。
/etc/security/limits.conf 中增加以下内容:
* soft nofile 65536
* hard nofile 65536
* soft nproc 655350
* hard nproc 655350
2、/etc/sysctl.conf 配置文件
max_map_count 文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量;
fs.file-max 设置系统所有进程一共可以打开的文件数量
/etc/sysctl.conf 中增加以下内容:
vm.max_map_count = 524288
fs.file-max = 9223372036854775807
配置文件生效:sudo sysctl -p
3、查看配置结果

三、安装JDK11
由于SonarQube和JDK及数据库有对应版本要求,本次平台搭建使用版本如下:
- SonarQube 8.9.6
- OpenJDK 11,
- PostgreSQL 12
1、卸载JDK 1.8:
sudo apt-get remove openjdk-8-jdk
2、安装OpenJDK 11:
sudo apt-get install openjdk-11-jdk
3、配置环境变量:
在安装OpenJDK 11后,需要更新环境变量以指向新的JDK版本。vi ~/.bashrc
在文件末尾添加以下行:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
4、使配置生效:
在终端中执行以下命令以加载配置的环境变量:source ~/.bashrc
5、验证安装:
运行以下命令来检查是否已正确安装OpenJDK 11并使其生效:java -version

四、Docker部署SonarQube、postgreSQL、pgAdmin4
1、新建目录/usr/local/docker/sonarqube_docker
2、该目录下新增docker-compose.yml文件
配置信息如下:
#docker-compose.yml
version: "3"
services:
sonarqube:
image: sonarqube:8.9.6-community
restart: always
container_name: sonarqube
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db:
image: postgres:12
container_name: postgresql
ports:
- "5432:5432"
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
pgadmin4:
image: dpage/pgadmin4
container_name: pgadmin4
ports:
- "5433:80"
environment:
- PGADMIN_DEFAULT_EMAIL=test@123.com
- PGADMIN_DEFAULT_PASSWORD=123456
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
配置信息说明:
在这个文件中,我们定义了三个服务:sonarqube、postgresql和pgadmin4。
sonarqube 服务运行代码扫描服务,并将容器端口9000映射到主机端口9000。
postgresql 服务将运行PostgreSQL数据库,并将容器端口5432映射到主机端口5432。
pgadmin4 服务将运行pgAdmin 4可视化工具,并将容器端口80映射到主机端口5433。
postgresql和pgadmin4两个服务都使用postgresql_data卷来共享数据。
3、容器启动命令
启动: sudo docker-compose up -d
重启sonarqube容器: sudo docker restart sonarqube
4、访问
sonarqube:http://宿主机IP:9000/ 用户名/密码:admin/123456
pgAdmin4:http://宿主机IP:5433/ 邮箱:test@123.com 密码:123456
5、配置sonarqube
1)汉化:
配置-->应用市场-->插件,搜索chinese-->安装插件-->重启容器
2)开启SCM:
配置-->SCM-->Disable the SCM Sensor,打开

3)得到登录token令牌:
我的账号-->安全-->输入字符串:jenkinsTest-->得到登录token令牌
sonarqube的令牌:
jenkinsTest:e698cc590cc8f7362b30e6b987fd1e835bcb1186
4)创建项目
创建项目:esmc-->得到项目令牌-->得到maven扫描SonarQube的命令
项目令牌:
esmc-test: 9aad77f4ad3f3ecfc23c9178c7305e144991d0f6
maven扫描SonarQube的命令:
mvn clean verify sonar:sonar \
-Dsonar.projectKey=esmc-test \
-Dsonar.host.url=http://宿主机IP:9000 \
-Dsonar.login=9aad77f4ad3f3ecfc23c9178c7305e144991d0f6
说明:登录token令牌和项目令牌,在后续配置jenkins的时候会用到,需要提前保存好。
6、配置pgAdmin4数据库
1)登录pgAdmin4,使用docker-compose.yml文件中配置的邮箱和密码。
pgAdmin4:http://宿主机IP:5433/
用户名:test@123.com 密码:123456
2)新增server:
点击Add New Server按钮
--> General填写name:目前改成了PostgreSQL12
--> connection填写宿主机IP、用户名、密码:与docker-compose.yml配置文件中一致
--> 保存


3)查看表

五、Jenkins集成sonarScanner
说明:如果已经在Docker中安装了SonarQube,一般不需要在服务器上单独安装SonarScanner。
SonarScanner是用于执行SonarQube分析的命令行工具,通常在Jenkins或其他CI/CD工具中集成并使用。
1、jenkins安装sonarQube插件

2、jenkins安装jacoco插件

3、sonarQube的配置:见前面配置
4、Jenkins配置sonarQube
1)添加凭证:
选择 Secret text 类型,输入 SonarQube令牌,然后Secret中填入之前生成的登录Token,ID只要不跟之前重复就行。

2)系统管理:填写sonar的地址,凭证

3)全局工具管理:SonarQube servers配置项,增加 SonarQube


4)项目流水线配置修改
构建环境勾选:Delete workspace before build starts
构建环境勾选:Prepare SonarQube Scanner environment

Build Steps将目标修改为:
clean verify sonar:sonar -Dsonar.projectKey=esmc-test -Dsonar.host.url=http://宿主机ip:9000 -Dsonar.login=9aad77f4ad3f3ecfc23c9178c7305e144991d0f6 package -Dmaven.test.skip=true
保存后重新构建。
六、扫描结果

点击SonarQube,跳转到SonarQube平台查看结果:


结果分析:
后端应用esmc,待解决的BUG有32个,其中主要BUG有26个,次要BUG有6;严重漏洞有3个;异味有3.3K。
可靠性比率为D;安全性比率为D;安全审核等级为E;可维护性即SQALE评级为A;覆盖率为0.0%;重复行密度为4.5%;总代码行数为69961;圈复杂度为7126,认知复杂度为4589;违规问题3349,均为开启问题。
单元测试平台搭建:sonarQube+sonarScanner+Jenkins+jacoco的更多相关文章
- centos7搭建sonarqube环境+jenkins部署全流程
一.简介sonarqube是一个用于代码质量管理的开源平台,用于管理源代码的质量 不遵循代码标准sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写.潜在的 ...
- 【iOS】Jenkins Gitlab持续集成打包平台搭建
Jenkins Gitlab持续集成打包平台搭建 SkySeraph July. 18th 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph个人站点: ...
- Jenkins Gitlab持续集成打包平台搭建
http://www.cnblogs.com/skyseraph/p/5695021.html 1. 相关概念 Jenkins Jenkins,一个用Java编写的开源的持续集成工具,提供了软件开发的 ...
- .NET持续集成与自动化部署之路第一篇——半天搭建你的Jenkins持续集成与自动化部署系统
.NET持续集成与自动化部署之路第一篇(半天搭建你的Jenkins持续集成与自动化部署系统) 前言 相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛 ...
- .net持续集成sonarqube篇之 sonarqube与jenkins集成(插件模式)
系列目录 Jenkins通过插件集成Sonarqube 通过上一节我们了解了如何配置以使jenkins ci环境中可以执行sonarqube构建,其实Sonarqube官方也提供了jenkins插件以 ...
- 代码质量管理平台之SonarQube安装部署
一.简介 Sonar是一个用于代码质量管理的开放平台,通过插件机制,sonar可以收集不同的测试工具,代码分析工具,以及持续集成工具.与持续集成工具(比如jenkins)不同,sonar并不是简单地把 ...
- <自动化测试方案_9>第九章、持续集成平台搭建
第九章.持续集成平台搭建 (一)什么是持续集成 参考文章地址:https://blog.csdn.net/qq_32261399/article/details/76651376 敏捷软件开发(英语: ...
- SonarQube与Jenkins结合提高代码质量
首先,为什么需要SonarQube? 1.WriteClean Code 1)全局健康报告 2)关注新增的问题 3)强制QualityGate 4)Issue详情及建议- 详情参考:https:/ ...
- hadoop伪分布式平台搭建(centos 6.3)
最近要写一个数据量较大的程序,所以想搭建一个hbase平台试试.搭建hbase伪分布式平台,需要先搭建hadoop平台.本文主要介绍伪分布式平台搭建过程. 目录: 一.前言 二.环境搭建 三.命令测试 ...
- LNMP平台搭建---MySQL安装篇
在前两篇中,安装了一个基本的Web服务器,但是只能提供静态网页查看,要做成动态网站,就必须要数据库或其他编程语言支持了,这里先介绍MySQL数据库的安装. MySQL是一个开源的数据库,在互联网行业应 ...
随机推荐
- API对接需求如何做需求调研,需要注意什么?
随着互联网的发展,越来越多的企业开始将自己的业务系统通过API接口与其他系统进行对接,以便于数据的共享.协同操作等.在进行API对接之前,需要对用户需求进行深入的调研,以便于能够准确的设计出满足用户需 ...
- YShow性能测试平台搭建
ShowSlow安装 ShowSlow是一个YSlow性能数据收集平台,用于将收集的性能数据 ShowSlow是用php实现的,所以我们需要搭建一台服务器来接收YSlow数据 我搭建的环境是:ubun ...
- jquery实现表格导出Excel
使用jQuery,jszip.js,FileSaver.js,excel-gen.js插件直接将网页中的table表格导出到本地Excel文件,而不需要经过后台. 导出结果: 实现步骤: 1.进入相关 ...
- BZ全景可视化编辑器 (KRPano可视化编辑器, 无需编写任何代码制作全景漫游)
软件简介 BZ全景编辑器是一款KRPano全景可视化编辑工具,下载安装即可使用,无需拥有任何KRPano代码基础,便可以制作生成精美的全景漫游作品. 官方网站: 点击进入官方网站 最新版软件下载地址: ...
- Building-Mobile-Apps-with-Ionic-2中文翻译工作
最近没啥工作量, 然后学完了这本书, 接着又茫然找不到该干啥, 所以想着何不翻译这个书呢. 这本书首先给我们普及了Ionic 2的基础知识, Ionic 2和Ionic 1有本质上的区别, Ionic ...
- pci p2p
概述 在2018年,针对pci支持p2pdma的驱动合入主线,没记错的话应该是4.20. 补丁如下: commit 52916982af48d9f9fc01ad825259de1eb3a9b25e A ...
- Vocabulary
词汇(Vocabulary) blackmail ( n.) :the obtaining of money or advancement by threatening to make known u ...
- nginx中一个请求匹配到多个location时的优先级问题,马失前蹄了
背景 为什么讲这么小的一个问题呢?因为今天在进行系统上线的时候遇到了这个问题. 这次的上线动作还是比较大的,由于组织架构拆分,某个接入层服务需要在两个部门各自独立部署,以避免频繁的跨部门沟通,提升该接 ...
- Sell Pigs 题解
Sell Pigs 双倍经验 题目大意 有 \(n\) 个顾客前来买猪,共有 \(m\) 个猪圈,每个顾客携带着某一些猪圈的钥匙,需要买一定数量的猪.在顾客买完后,我们可以将打开的猪圈中的猪随意移动, ...
- 虹科技术|Redis企业版数据库:实现金融服务IT现代化!
随着新冠肺炎和技术创新推动企业进入新的数字时代,金融行业客户现在需要一种快速.简单且根据需求量身定制的数字银行体验.这就需要银行进行转型,以提供更加数字化的服务,但无论战略.方法,还是满足消费者极高期 ...