首页 > 其他分享 >单元测试平台搭建:sonarQube+sonarScanner+Jenkins+jacoco

单元测试平台搭建:sonarQube+sonarScanner+Jenkins+jacoco

时间:2023-12-07 16:01:32浏览次数:48  
标签:sonarScanner postgresql -- sonarqube 配置 单元测试 SonarQube sonar sonarQube

单元测试平台搭建及结果分析

一、方案

需求目标:提高单元测试覆盖率和规范代码编写规范
选用工具: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:
      - [email protected]
      - 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/ 邮箱:[email protected] 密码: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/
用户名:[email protected] 密码: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://192.168.10.184: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,均为开启问题。

标签:sonarScanner,postgresql,--,sonarqube,配置,单元测试,SonarQube,sonar,sonarQube
From: https://www.cnblogs.com/hqq2019-10/p/17882219.html

相关文章

  • vs+xunit 单元测试
    vs中nuget安装Microsoft.NET.Test.Sdk、xunit、xunit.runner.visualstudioxunit测试demopublicclassHelloTest{//xunit提供默认输出接口privatereadonlyITestOutputHelper_output;publicHelloTest(ITestOutputHelperoutput){_outp......
  • @SpringBootTest 和 @RunWith 注解不能识别 单元测试第一步引入maven依赖
    @SpringBootTest和@RunWith注解不能识别单元测试第一步引入maven依赖一、背景    最近在预研 Rocketmq,在写小例子的时候,需要编写测试代码,突然间发现我的 @SpringBootTest 和 @RunWith 这两个注解不能识别,于是展开了我的问题排查过程。问题截图如下:二、问题排......
  • 单元测试:Junit框架、反射、注解、动态代理
    单元测试:Junit框架单元测试单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性目前测试方法的方式的和存在的问题方式:只有一个main方法,如果一个方法的测试失败了,其他方法测试会受到影响问题:①无法得......
  • Spring Boot单元测试
    1.概述所谓单元测试就是对功能最小粒度的测试,落实到JAVA中就是对单个方法的测试。对单个方法的测试用junit即可,关于junit作者另一位篇文章中有详细介绍,感兴趣的小伙伴可以去看看:详解junit-CSDN博客junit可以完成单个方法的测试,但是对于Spring体系下的web应用的单元测试是无能为力的......
  • 【SpringBoot】单元测试报错java.lang.IllegalStateException: Could not load TestCo
    一、运行test类方法时候报错 二、分析原因,发现版本不一致 三、找到pom文件, 把<version>RELEASE</version>注释掉,刷新一下maven依赖 四:修改后,依赖版本一致。 这样,就可以运行了。 ......
  • 【转载】VS Code 进行 PHP 单元测试
    参考https://www.bilibili.com/video/BV1da4y1x7ZDhttps://learnku.com/articles/22072(非常详细)https://juejin.cn/post/6844903541136424967https://docs.phpunit.de(官方文档)注意PHPUnitTestExplorer可能会抽风导致没有测试按钮之类的情况,抽风的时候也可以使用......
  • .Net Core 单元测试获取配置文件节点值
     单元测试类:ServiceProvider_serviceProvider;IConfiguration_config;[SetUp]publicvoidSetup(){_config=newConfigurationBuilder().Add(newJsonConfigurationSource{Path="appsettings.jso......
  • 单元测试的实践与思考
    之前一直有一个想法:将测试过程的每个重要环节都进行拆解,然后详细说明这个环节重点要做的事情,为什么要做这些事,以及注意事项。在星球群里和几位同学聊到了这个事情,有同学提议可否将单元测试环节加进来,斟酌一番,觉得还是很有必要的,就有了今天的这篇文章。这篇文章,我会聊聊我对于单......
  • 我们开源了一个 Ant Design 的单元测试工具库
    我们是袋鼠云数栈UED团队,致力于打造优秀的一站式数据中台产品。我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值。本文作者:佳岚欢迎大家点一个小小的Star......
  • SonarLint and SonarQube
    SonarQube系列-架构与外部集成 合集-DevOps工具链(6) 1.SonarQube系列-架构与外部集成09-102.SonarQube之采购选型参考2022-02-213.SonarQube系列-认证&授权的配置09-254.【Jenkins系列】-Pipeline语法全集04-015.【Jenkins系列】快速创建JenkinsJob2022-11-276.So......