前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速使用 Jacoco 代码覆盖率统计

快速使用 Jacoco 代码覆盖率统计

作者头像
Wu_Candy
发布2022-07-05 14:37:09
1.4K0
发布2022-07-05 14:37:09
举报
文章被收录于专栏:无量测试之道
简介
Jacoco 是一个开源的覆盖率工具。

Jacoco 可以嵌入到 Ant 、Maven 中,并提供了 EclEmma Eclipse 插件,也可以使用 JavaAgent 技术监控 Java 程序。

很多第三方的工具提供了对 Jacoco 的集成,如 sonar、Jenkins 等。

今天分享使用的环境是:

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

操作步骤
Step1:引入相应的 jar 到应用服务的目录下,并修改需要监测的应用服务的启动脚本

以下是在 jenkins 中将相应应用服务部署脚本进行了调整

代码语言:javascript
复制
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 中需要的一个脚本文件。

代码语言:javascript
复制
[root@localhost tools]# more cron.sh
while true;do ant dump -buildfile buildexec.xml;sleep 60;done
Step3:在 jenkins 拉取源码处,将生成的 jacoco.exec 文件复制过来,然后生成最终的执行报告

以下是一个jenkins job

代码语言:javascript
复制
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 摘取源码的目录下
代码语言:javascript
复制
[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 执行效果图如下图所示:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
    • Jacoco 是一个开源的覆盖率工具。
    • 操作步骤
      • Step1:引入相应的 jar 到应用服务的目录下,并修改需要监测的应用服务的启动脚本
        • Step2:用于在容器里定时生成 jacoco.exec
          • Step3:在 jenkins 拉取源码处,将生成的 jacoco.exec 文件复制过来,然后生成最终的执行报告
            • Step4:从 docker 中获取 jacoco.exec 文件,然后放在 jenkins 摘取源码的目录下
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档