Jacoco代码覆盖率统计

524 阅读2分钟

Jacoco 是一个开源的覆盖率工具。

Jacoco 可以嵌入到Ant 、Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序。很多第三方的工具提供了对Jacoco的集成,如sonar、Jenkins等

本文使用的环境是:k8s+jenkins 构建的,其中涉及到了在 node 节点机的容器中生成jacoco.exec 文件,然后将其拷贝到节点机,再从节点机将jacoco.exec 文件拷贝到jenkins 的代码库中,用于生成报告 。

步骤如下

Step1:   引入相应的 jar 到应用服务的目录下,并修改需要监测的应用服务的启动脚本
这是在 jenkins 中将相应应用服务部署脚本进行了调整

echo '\
cd /opt/\
wget http://192.168.214.100:7777/jacoco/tools/jacocoagent.jar   #此处启动了一个siampleHttp 服务,用于获取jar 包\
wget http://192.168.214.100:7777/jacoco/tools/jacocoant.jar\
wget -O buildexec.xml http://192.168.214.100:7777/jacoco/buildexec/build.xml\
wget http://192.168.214.100:7777/jacoco/tools/cron.sh\
sh cron.sh&   #此处见step2 中编辑的脚本\
sed -i "s#exec java#exec java -javaagent:/opt/jacocoagent.jar=includes=*,output=tcpserver,port=8044,address=127.0.0.1 -Xverify:none -javaagent:/opt/skywalking-agent/skywalking-agent.jar #g" /opt/mt/bin/startup.sh &&\
cd /opt/mt/ &&\
dos2unix -k start.sh &&\
cd /opt/mt/bin/ &&\
dos2unix -k startup.sh &&\
sh startup.sh\
'> ./start.sh

Step2: 用于在容器里定时生成jacoco.exec

此jacoco.exec 文件是拿取的代码执行的情况文件所生成的一个exec文件 此文件仅仅是step1 需要的一个脚本文件

[root@localhost tools]# more cron.sh\
while true;do ant dump -buildfile buildexec.xml;sleep 60;done

Step3: 在jenkins 拉取源码处,将生成的jacoco.exec文件复制过来

然后生成最终的执行报告,这是一个jenkins job

cd ../test-deploy\
wget -O buildreport.xml http://192.168.214.100:7777/jacoco/buildreport/build_test_model.xml\
wget -nc http://192.168.214.100:7777/jacoco/tools/jacocoant.jar\
wget -nc http://192.168.214.100:7777/jacoco/tools/dlexec.sh\
sh dlexec.sh testqyd test-model  #详细见step4\
ant report -buildfile ./buildreport.xml  #生成执行的报告\
open site:http://192.168.214.100:7777/jacoco/report/testqyd/test-model/jacocoReport/   #打开报告

Step4: 从docker中获取jacoco.exec文件,然后放在jenkins 摘取源码的目录下

[root@localhost]# more dlexec.sh \
platformname=$1\
projectname=$2\
echo "\
#############################################\
# 从node节点机下载jacoco.exec文件执行脚本 #\
#############################################\
"\
case $# in\
0)\
echo ""\
;;

\
1)\
ssh root@192.168.214.50 "kubectl get pods -n $platformname -o wide"\
;;

\
2)\
pnip=`ssh 192.168.214.50 "kubectl --kubeconfig=/etc/kubernetes/kubelet.kubeconfig get pods -n $platformname -o wide|grep $projectname|awk '{print \\$7}'|head -1"`\
if [ $pnip == '192.168.214.55' ];then\
 pnip='root@192.168.214.55'\
 rqid=`ssh $pnip "docker ps |grep $platformname/$projectname|awk '{print \\$1}'|head -1"`\
 ssh $pnip "docker cp $rqid:/opt/jacoco.exec /opt/test/jacoco.exec"\
 scp $pnip:/opt/test/jacoco.exec ./\
elif [ $pnip == '192.168.214.56' ];then\
 pnip='root@192.168.214.56'\
 rqid=`ssh $pnip "docker ps |grep $platformname/$projectname|awk '{print \\$1}'|head -1"`\
 ssh $pnip "docker cp $rqid:/opt/jacoco.exec /opt/test/jacoco.exec"\
 scp $pnip:/opt/test/jacoco.exec ./\
else\
 echo "not found!"\
fi\
;;\
esac

Jenkins执行效果图如下图所示:

图片

图片

欢迎关注【无量测试之道】公众号,回复【领取资源】

Python+Unittest框架API自动化、

Python+Unittest框架API自动化、

Python+Pytest框架API自动化、

Python+Pandas+Pyecharts大数据分析、

Python+Selenium框架Web的UI自动化、

Python+Appium框架APP的UI自动化、

Python编程学习资源干货、

Vue前端组件化框架开发、

资源和代码 免费送啦~

备注:我的个人公众号已正式开通,致力于IT互联网技术的分享。

包含:数据分析、大数据、机器学习、测试开发、API接口自动化、测试运维、UI自动化、性能测试、代码检测、编程技术等。

微信搜索公众号:“无量测试之道”,添加关注!