【单元测试】sonarqube展示sprinboot微服务单元测试结果, 处理覆盖率为0的问题
一、背景
基于公司目前发展,领导决定进行代码质量和门禁相关的建设,所以采用比较通用的jacoco + mvn + jenkins+ sonarqube + gitlab来实现
单体项目咱就不说了,主要说下多模块的项目
二、sonarqube官方文档
查看这个部分
三、sonarqube官方demo
SonarSource/sonar-scanning-examples: Shows how to use the Scanners
根目录pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.sonarqube</groupId> <artifactId>sonarscanner-maven-aggregate</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <name>Example of multi-module Maven project</name> <modules> <module>module1</module> <module>module2</module> <module>tests</module> </modules> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.source>1.8</maven.compiler.source> <sonar.coverage.jacoco.xmlReportPaths>${maven.multiModuleProjectDirectory}/tests/target/site/jacoco-aggregate/jacoco.xml</sonar.coverage.jacoco.xmlReportPaths> </properties> <dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>32.1.1-jre</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> </plugin> <plugin> <groupId>org.sonarsource.scanner.maven</groupId> <artifactId>sonar-maven-plugin</artifactId> <version>3.10.0.2594</version> </plugin> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.11</version> </plugin> </plugins> </pluginManagement> </build> <profiles> <profile> <id>coverage</id> <activation> <activeByDefault>true</activeByDefault> </activation> <build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <executions> <execution> <id>prepare-agent</id> <goals> <goal>prepare-agent</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project>
test模块的pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.sonarqube</groupId> <artifactId>sonarscanner-maven-aggregate</artifactId> <version>1.0-SNAPSHOT</version> </parent> <artifactId>tests</artifactId> <name>Tests</name> <dependencies> <dependency> <groupId>org.sonarqube</groupId> <artifactId>module1</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <dependency> <groupId>org.sonarqube</groupId> <artifactId>module2</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <executions> <execution> <id>report</id> <goals> <goal>report-aggregate</goal> </goals> <phase>verify</phase> </execution> </executions> </plugin> </plugins> </build> </project>
执行命令,生成报告
指定sonarqube的服务器,用户名和token
mvn org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Pcoverage -Dsonar.host.url=http://192.168.3.112:19000 -Dsonar.login=jenkins -Dsonar.login=squ_33698b4b60b1f6293f7b207d5d8f99c08eb0826f
-Dsonar.host.url=http://192.168.3.112:19000
-Dsonar.login=jenkins
-Dsonar.login=squ_33698b4b60b1f6293f7b207d5d8f99c08eb0826f
检查sonarqube上的项目信息,查看单元测试覆盖度
四、关于SonarScanner ClI
可以通过mvn执行,非必须安装扫描工具
SonarScanner CLI | SonarQube Server Documentation
sonarsource/sonar-scanner-cli - Docker Image | Docker Hub
五、关于sonarqube的jenkins 流水线
Jenkins job | SonarQube Server Documentation
node { stage('SonarQube analysis') { withSonarQubeEnv('sonarqube-test') {
sh 'mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent install -Dmaven.test.failure.ignore=true'
sh 'mvn org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Pcoverage -Dsonar.host.url=http://192.168.3.112:19000 -Dsonar.login=jenkins -Dsonar.login=squ_33698b4b60b1f6293f7b207d5d8f99c08eb0826f' }
}
}
参考链接:
【Springboot知识】多模块Springboot项目配置Jacoco代码覆盖率_springboot jacoco-CSDN博客
jacoco-多module场景-文件合并_springcloud 每个子项目都生成了jacoco文件 怎么合并-CSDN博客
软件测试相关【Jacoco】【实战篇】【多服务exec文件采集、合并、下载】 - 为你编程 - 博客园
SonarQube8.5社区版 覆盖率为0_sonarqube java 扫描覆盖率0-CSDN博客