目录

关于精准测试

非流水线单独部署学习

参考文档:

准备工作

部署 super jacoco 服务

监控被测项目

启动收集、获取覆盖率

执行测试、生成报告

蓝鲸流水线加入superjacoco


关于精准测试

精准测试是一种软件测试方法,它旨在通过使用先进的工具和技术来提高测试的效率和效果。精准测试的核心思想是通过精确的数据分析和测试结果来指导测试过程,确保测试工作能够更加有针对性和高效。

精准测试的目标是减少不必要的测试工作,提高测试的针对性和效率,从而在保证软件质量的同时,减少测试成本和缩短上市时间。这种方法特别适用于复杂的大型软件系统和快速迭代的开发模式。在精准测试的实施过程中,测试团队需要具备较强的数据分析能力和熟练使用各种测试工具的技能,并且充分发挥测试左移、右移。

测试左移与测试右移-CSDN博客

非流水线单独部署学习

这里使用的Super-jacoco属于代码覆盖率分析工具

代码覆盖率统计Super-jacoco在公司级容器化项目中的具体应用方案-CSDN博客

Jacoco代码覆盖率报告详解_jacoco报告怎么看-CSDN博客

superjacoco缺点:没有体现代码执行频次/执行时间,但用于精准测试场景,可不用关心这两个问题。

准备工作

使用Super-jacoco作为代码覆盖率统计工具。准备了2台服务器:Super-jacoco服务宿主机(232.101)确认宿主机 git、jdk、maven。被测视频服务机器(236.42),确保2台服务器直接网络通畅。

安装参考资料进行数据库配置,application.properties配置(注意数据库驱动需对应版本),pom文件依赖配置。

进入super-jacoco-master\jacoco下,把org.jacoco.cli-1.0.2-SNAPSHOT-nodeps文件放到宿主机(232.101)的root目录下,用于获取报告文件

mv org.jacoco.cli-1.0.2-SNAPSHOT-nodeps.jar /root

在Super-jacoco目录下打包,执行命令。

※注意:运行Maven命令时一定要进入pom.xml文件所在的目录!

mvn package '-Dmaven.test.skip=true'

解决打包时依赖问题:1、远程仓库超时。2、编译时无权限。等

打包时可能会遇到报错:jdk.internal.org.objectweb.asm 未找到,此时在superjacoco代码中把jdk.internal.org.objectweb.asm替换为org.objectweb.asm即可

部署 super jacoco 服务

完成打包后启动服务,在super-jacoco.jar同级目录下执行命令

nohup java -jar super-jacoco.jar &

检查是否启动成功

lsof -i:8899

监控被测项目

来到被测视频服务机器(236.42)

把super-jacoco-master\jacoco下,org.jacoco.agent-0.8.5-runtime放到被测视频服务机器(236.42)指定目录下

与参考文件不同的是视频服务是由run.sh文件通过找到主类启动,因此需要修改run.sh,在start方法中  -Dname=$Tag 前加上  -javaagent:/usr/local/org.jacoco.agent-0.8.5-runtime.jar=includes=*,output=tcpserver,port=18513,address=*,append=true

function start() {
  #nohup java $JVM -Dappliction=$Tag -Djava.ext.dirs=$Lib:$JRE_HOME/lib/ext $MainClass >> $Log 2>&1 &
  nohup $JRE_HOME/bin/java -javaagent:/usr/local/org.jacoco.agent-0.8.5-runtime.jar=includes=*,output=tcpserver,port=18513,address=*,append=true  -Dname=$Tag -cp $JAVA_CP ${JVM} ${MainClass} >>$Log 2>&1 &
  spid=$(ps -ef | grep -v 'grep' | egrep $Tag | awk '{printf $2 " "}')
  echo "$Tag start success pid:$spid"
}

保存后run.sh start,查看18513 端口的服务是否启动成功

lsof -i:18513

最后再来到宿主机(232.101)查看是否能访问到 236.42的18513端口

telnet 10.80.236.42 18513
#Connected to 10.80.232.150. Escape character is '^]'. 表示成功连接了,

启动收集、获取覆盖率

启动覆盖率收集: 

使用工具(postman等)POST 

url = 'http://super-jacoco所在服务器地址:8899/cov/triggerEnvCov'
headers = {'Content-Type': 'application/json'}
data = {
    "uuid": "可自定义",
    "type": 1,  # 1全量; 2增量
    "gitUrl": "被测服务的git克隆地址",
    "subModule": "模块(com.XXX),非必填",
    "baseVersion": "被对比的git分支(dev/master/或分支ID)",
    "nowVersion": "同上",
    "address": "被测服务器",
    "port": "18513"
}

分支id填写参考:

覆盖率查询:

建议2分钟后,使用工具(postman等)GET报告:

url = 'http://super-jacoco所在服务器地址:8899/cov/getEnvCoverResult'
params = {
    "uuid": "post时定义的uuid值",
}

get返回的数据中可以点击链接查看报告和执行日志

执行测试、生成报告

执行和被测服务shot-video-manage-service相关的功能测试,jacoco会记录代码覆盖率。如果jacoco pom中未定义报告路径的话。报告文件默认在org.jacoco.cli-1.0.2-SNAPSHOT-nodeps.jar 的同级目录下:

宿主机(232.101)/root/report 找到uuid同名文件夹

列名 (中文解释) 具体说明
Element 被测元素名称,这里显示的是 Java 类名 (例如 VideoWechatLiveHistoryReq.java)
Missed Instructions 未覆盖的字节码指令数:未被测试执行到的字节码指令数量
Cov. (Instructions Coverage) 指令覆盖率:(总指令数 - 未覆盖指令数) / 总指令数 × 100%,反映代码执行的细致程度
Missed Branches 未覆盖的分支数:if/else、switch-case 等条件判断中未被执行到的分支数量
Cov. (Branches Coverage) 分支覆盖率:(总分支数 - 未覆盖分支数) / 总分支数 × 100%,反映条件判断的覆盖完整性
Missed (Cxty) 未覆盖的循环复杂度:未被测试覆盖的循环复杂度单元数(JaCoCo 中 Cxty = Cyclomatic Complexity)
Cxty (Total Complexity) 总循环复杂度:衡量代码逻辑复杂度的指标,数值越高逻辑越复杂
Missed (Lines) 未覆盖的行数:未被测试执行到的源代码行数(注意:一行代码可能对应多条字节码指令)
Lines (Total Lines) 总代码行数:该类的源代码总行数(不包含空行和注释)
Missed (Methods) 未覆盖的方法数:未被测试执行到的方法数量(构造方法、普通方法等)
Methods (Total Methods) 总方法数:该类中定义的方法总数
Missed (Classes) 未覆盖的类数:未被测试执行到的类数量(这里每个类都是独立的,所以要么 0 要么 1)
Classes (Total Classes) 总类数:当前统计范围内的类总数(这里每个类单独一行,所以均为 1)

蓝鲸流水线加入superjacoco

未完待续………………

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐