编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

sonar代码覆盖率实战(sonar 代码覆盖率)

wxchong 2024-09-28 02:20:52 开源技术 8 ℃ 0 评论

sonar接入测试结果

项目执行mvn test指令生成的 测试用例文件在标红位置

将生成的测试用例导入到sonar中

执行命令将测试结果上传到sonarqube中

默认

SONARQUBE_TOKEN=22e813fd70f53cac585ced071058a79fa2a91ff6

#执行测试,把默认位置的测试结果上传
mvn clean test sonar:sonar \
  -Dmaven.test.failure.ignore=true \  #忽略测试失败
  -Dsonar.host.url=http://192.168.132.128:9000   \ #sonar 服务器地址
  -Dsonar.login=$SONARQUBE_TOKEN \
  -Dsonar.ws.timeout=300 \   # 超时时间
  -Dsonar.projectKey=litemall-$USER \  
  -Dsonar.projectName=litemall-$USER

使用自定义位置上传测试结果

find . -name "surefire*" ./litemall-db/target/surefire-reports

mvn clean test sonar:sonar   \
  -Dmaven.test.failure.ignore=true \
  -Dsonar.host.url=http://192.168.132.128:9000   \ #sonar 服务器地址
  -Dsonar.login=$SONARQUBE_TOKEN   \
  -Dsonar.ws.timeout=300 \
  -Dmaven.test.skip=false \
  -Dsonar.junit.reportPaths='./litemall-db/target/surefire-reports,./litemall-db/target/surefire-reports'

覆盖率工具

jacoco底层使用asm框架对代码所生成的类文件进行修改,加入统计指令,从而得知代码有没有被覆盖

ASM:所有字节码插桩框架的底层,性能最高,apm框架的核心基础

JavaAssist:简单易用

ByteBuddy、BTrace、 JVM- Sandbox

jacoco mvn插件使用

https://www.jacoco.org/jacoco/trunk/doc/maven.html

jacoco 命令行使用

https://www.jacoco.org/jacoco/trunk/doc/cli.html

手工统计覆盖率

  • 对被测应用进行插桩,然后启动on the fly模式javaagent模式可以在内存中动态修改class字节码,不会修改jar包,所以jar包大小不变offline模式,修改jar包中的class文件,文件会变大
  • 执行测试行为
  • 导出覆盖率统计结果
  • 生成报告
agent下载地址 https://repo1.maven.org/maven2/org/jacoco/org.jacoco.agent/0.8.6/ 5
cli工具下载地址 https://repo1.maven.org/maven2/org/jacoco/org.jacoco.cli/0.8.6/ 2

下载jar到本地服务器

#以on the fly模式启动被测应用
java -javaagent:./org.jacoco.agent-0.8.6-runtime.jar -jar apache-jmeter-5.4.1/bin/ApacheJMeter.jar 
#执行后正常结束被测程序会得到覆盖率统计文件,被测应用只要得到执行就可以统计到覆盖率,
可以跟测试用例不在同一个服务器上。
ls jacoco.exec 
#生成无源代码的报告 
java -jar org.jacoco.cli-0.8.6-nodeps.jar report jacoco.exec --classfiles apache-jmeter-5.4.1/bin/ApacheJMeter.jar --html jacoco_html 
#生成有源代码关联的报告
java -jar org.jacoco.cli-0.8.6-nodeps.jar report jacoco.exec --classfiles apache-jmeter-5.4.1/bin/ApacheJMeter.jar --html jacoco_html_src --sourcefiles apache-jmeter-5.4.1_src/apache-jmeter-5.4.1/src/launcher/src/main/java/ 


动态生成覆盖率

mvn clean \ 
org.jacoco:jacoco-maven-plugin:0.8.5:prepare-agent \ 
test \ 
org.jacoco:jacoco-maven-plugin:0.8.5:report \ 
 -Dmaven.test.failure.ignore=true \ 
 -Dmaven.test.skip=false

覆盖率导入sonarqube 默认路径

mvn sonar:sonar \
  -Dsonar.host.url=http://sonarqube.ceshiren.com:9000   \
  -Dsonar.login=$SONARQUBE_TOKEN \
  -Dsonar.ws.timeout=300 \
  -Dsonar.projectKey=litemall-core-$USER \
  -Dsonar.projectName=litemall-core-$USER

生成jacoco的覆盖率报告

上传报告到sonar

### 覆盖率导入sonarqube

默认路径
```
mvn sonar:sonar \
  -Dsonar.host.url=http://sonarqube.ceshiren.com:9000   \
  -Dsonar.login=$SONARQUBE_TOKEN \
  -Dsonar.ws.timeout=300 \
  -Dsonar.projectKey=litemall-core-$USER \
  -Dsonar.projectName=litemall-core-$USER
```

自定义路径
```
SONARQUBE_HOST=http://sonarqube.ceshiren.com:9000 
sonar-scanner \
  -Dsonar.host.url=$SONARQUBE_HOST    \
  -Dsonar.login=$SONARQUBE_TOKEN   \
  -Dsonar.projectKey=litemall_$USER \
  -Dsonar.projectName=litemall_$USER \
  -Dsonar.sources=$(echo **/src | sed 's# #,#g')  \
  -Dsonar.java.binaries="**/target" \
  -Dsonar.junit.reportPaths=$(find . -name "surefire-reports"  | xargs  | sed 's# #,#g') \
  -Dsonar.coverage.jacoco.xmlReportPaths="**/jacoco/jacoco.xml"

pom文件加入jacoco插件


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表