一、前言
前两天突然看到了这个jacoco,想着搭建了可以查看功能测试覆盖率和自动化脚本的覆盖率。
然后简单的研究了一下怎么使用和搭建。
二、准备
1、官网下载:jacoco
2、ruoyi前后端不分离版本
三、开始
1、服务器先配置java运行环境
2、然后打若依的jar包(这个可以去看若依的官网,很详细)
3、因为我是多模块版本的,jar包在ruoyi-admin下面的target里面
4、使用java启动命令的时候添加jacoco的命令
java -javaagent:/www/wwwroot/jacoco/lib/jacocoagent.jar=destfile=/www/wwwroot/jacoco/lib/to/coverage.exec,output=tcpserver,port=6300 -jar /www/wwwroot/jacoco/RuoYi/ruoyi-admin/target/ruoyi-admin.jar
注意:上面那个路径是我的jacoco和项目存放的地址,你要改成你自己的
启动之后就是这样。
5、测试结束后,生成数据文件coverage.exec
使用命令
注意:路径和端口要改为自己的。
java -jar /www/wwwroot/jacoco/lib/jacococli.jar dump --address localhost --port 6300 --destfile /www/wwwroot/jacoco/lib/to/coverage.exec
6、生成html的报告。
java -jar /www/wwwroot/jacoco/lib/jacococli.jar report /www/wwwroot/jacoco/lib/to/coverage.exec \--classfiles /www/wwwroot/jacoco/RuoYi/ruoyi-admin/target/classes \--sourcefiles /www/wwwroot/jacoco/RuoYi/ruoyi-admin/src/main/java \--html /www/wwwroot/jacoco/report/html \--xml /www/wwwroot/jacoco/report/report.xml \--csv /www/wwwroot/jacoco/report/report.csv
生成之后点击index.html
就可以查看报告了。比如登录绿色就是覆盖到的,红色就是没有。
四、简化启动
查看完覆盖率之后,如果想重置覆盖率,还要关闭项目,运行好几条命令,所以写了一个脚本简化了一下。比如你想重置覆盖率的时候。运行下面这个脚本。
新建一个run.sh文件在服务器,代码放下最下面,记得路径和端口改为自己的。
运行后得到
输入对应的1234就可以
重置的话
1、先停止项目
2、然后去删除coverage.exec文件
3、启动项目
4、进行测试(手工测试或自动化脚本)
5、测试结束后,生成coverage.exec文件
6、生成报告
#!/bin/bash# 定义变量
JACOCO_CLI="/www/wwwroot/jacoco/lib/jacococli.jar"
PROJECT_JAR="/www/wwwroot/jacoco/RuoYi/ruoyi-admin/target/ruoyi-admin.jar"
COVERAGE_EXEC="/www/wwwroot/jacoco/lib/to/coverage.exec"
CLASSES_DIR="/www/wwwroot/jacoco/RuoYi/ruoyi-admin/target/classes"
SOURCE_DIR="/www/wwwroot/jacoco/RuoYi/ruoyi-admin/src/main/java"
REPORT_DIR="/www/wwwroot/jacoco/report"
PORT=6300# 获取 ruoyi-admin.jar 进程的 PID
get_pid() {PID=$(ps aux | grep "$PROJECT_JAR" | grep -v grep | awk '{print $2}')
}# 启动项目
start_project() {get_pidif [ -z "$PID" ]; thenecho "Starting project..."nohup java -javaagent:/www/wwwroot/jacoco/lib/jacocoagent.jar=destfile=$COVERAGE_EXEC,output=tcpserver,port=$PORT -jar $PROJECT_JAR > /dev/null 2>&1 &echo "Project started."elseecho "Project is already running with PID: $PID"fi
}# 停止项目
stop_project() {get_pidif [ -n "$PID" ]; thenecho "Stopping project with PID: $PID"kill $PIDecho "Project stopped."elseecho "Project is not running."fi
}# 生成 coverage.exec
generate_coverage_exec() {echo "Generating coverage.exec from JaCoCo agent..."java -jar $JACOCO_CLI dump --address localhost --port $PORT --destfile $COVERAGE_EXECecho "coverage.exec generated."
}# 生成报告
generate_report() {echo "Generating JaCoCo report..."java -jar $JACOCO_CLI report $COVERAGE_EXEC \--classfiles $CLASSES_DIR \--sourcefiles $SOURCE_DIR \--html $REPORT_DIR/html \--xml $REPORT_DIR/report.xml \--csv $REPORT_DIR/report.csvecho "Report generated at $REPORT_DIR/html."
}# 菜单显示
show_menu() {echo "=============================="echo " Project Control Menu"echo "=============================="echo "1) 启动项目"echo "2) 停止项目"echo "3) 生成 coverage.exec"echo "4) 生成覆盖率报告"echo "Ctrl+C 退出"echo "=============================="echo -n "请选择一个选项: "
}# 主循环
while true; doshow_menuread -r optioncase $option in1)start_project;;2)stop_project;;3)generate_coverage_exec;;4)generate_report;;*)echo "无效选项,请重新选择。";;esac
done