覆盖率统计实战

环境

SQ_HOST=https://sonarqube.stuq.ceshiren.com/
SQ_TOKEN=squ_2b550e208198bb2735fb7f4343c69234bc87a56b

单元测试与单元测试覆盖率

https://github.com/spring-projects/spring-petclinic.git

mvn clean package -Dmaven.test.skip=true -Dmaven.gitcommitid.skip=true

mvn clean test package -Dmaven.gitcommitid.skip=true

mvn clean test package org.sonarsource.scanner.maven:sonar-maven-plugin:LATEST:sonar -Dmaven.gitcommitid.skip=true -Dsonar.host.url=$SQ_HOST  -Dsonar.login=$SQ_TOKEN

mvn clean test package org.sonarsource.scanner.maven:sonar-maven-plugin:LATEST:sonar -Dmaven.gitcommitid.skip=true -Dsonar.host.url=$SQ_HOST  -Dsonar.login=$SQ_TOKEN -Dmaven.test.failure.ignore=true

课间练习 spring-petclinic-rest

https://github.com/spring-petclinic/spring-petclinic-rest

  • 构建
  • 单元测试
  • 覆盖率统计
  • sonarqube分析
  • 新增代码覆盖
  • 把overall与new code的 MEASURES图贴到回复里

集成测试与集成测试覆盖率

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

java -jar $JACOCO_HOME/lib/jacococli.jar  dump --address 127.0.0.1 --port 6300 --destfile owners.exec

java -jar $JACOCO_HOME/lib/jacococli.jar report --classfiles target/classes/ --html jacoco/owners_report/ --xml jacoco/owners_report.xml  --csv jacoco/owners_report.csv jacoco/owners.exec 

java -jar $JACOCO_HOME/lib/jacococli.jar report --classfiles target/classes/ --sourcefiles src/main/java/ --html jacoco/owners_report/ --xml jacoco/owners_report.xml  --csv jacoco/owners_report.csv jacoco/owners.exec

查找宠物主人,没有根据名字搜索

搜索无结果

搜索只有一条结果

覆盖率进阶知识

增量覆盖率如何统计

super-jaocco

覆盖率功能的service化

https://github.com/didi/super-jacoco

组内共用

带有覆盖率的测试环境

java -jar xxx.jar
# to
java -javaagent... -jar xxx.jar

jenkins job执行

  • jacococli.jar dump report
  • job启动

手工测试流程

  • 自动部署覆盖率环境
  • 发起手工测试用例执行
  • 手工触发 jenkins job(推荐)、测试平台、提供service

覆盖率丰富度

  • xml > html
  • xml > sonar 可以联动,跟新增代码、测试用例、代码提交人进行关联

集成测试覆盖率统计

sonar-scanner -Dsonar.host.url=$SQ_HOST  -Dsonar.login=$SQ_TOKEN -Dsonar.coverage.jacoco.xmlR
eportPaths=jacoco/owners_report.xml  -Dsonar.projectKey=PetClinicIT -Dsonar.sources=src/main/java/  -Dsonar.java.binaries=target/classes/

镜像不可修改问题

  • image base origin image
  • instance docker run bash -c ‘java -javaagent’
  • instance docler exec bash -c ‘stop start’

自动化测试与覆盖率结合

  • teardown_session AfterAll 覆盖率收集

自动化测试与精准测试

  • setup 清理
  • teardown 收集 清理 reset

精准测试章节中再讲