美文网首页接口自动化测试
jenkins+jacoco代码覆盖率统计遇到的坑

jenkins+jacoco代码覆盖率统计遇到的坑

作者: Tomandy | 来源:发表于2019-10-08 01:33 被阅读0次

    前言

    质量保障过程中,基于jenkins+jacoco+sonar进行代码覆盖率统计往往是必不可少的一步。笔者前段时间进行相关专题研究时,也遇到了不少坑,因此在《jacoco 代码覆盖率使用中遇到的一些坑》文章提到的填坑基础上,笔者再做一些补充。

    问题及解决方法

    《jacoco 代码覆盖率使用中遇到的一些坑》提到的“覆盖率数据不准确”的问题,笔者在实践过程中也遇到了,具体的问题如下。

    问题:被测服务部署的版本与jenkins拉取的版本不一致。

    问题描述:jenkins拉取开发代码的分支及commitid可能与被测服务部署的不一致,从而导致代码覆盖率不准确。比如被测服务部署的是master分支2b9a4d commitid版本,但由于在测试过程中,开发不断的修改push代码,此时jenkins拉取的代码肯定跟服务部署的版本不一致。
    解决思路:提取被测服务的分支及commitid,作为变量传递给jenkins,从而确保两边保持一致。
    具体步骤:
    1、jenkins上安装Dynamic Parameter插件
    该插件依赖scriptler.hpi和token-macro.hpi。
    2、配置Dynamic Parameter,提取分支

    Dynamic Parameter
    //提取部署服务所在分支,根据curl返回调整var1及var2的分隔符
    def response= ("curl http://172.16.11.11:8080/healthcheck.html").execute()
    response.waitFor()
    var1= {it.split("git.branch=")[1]}
    var2={it.split(" <br/>")[0]}
    var2(var1("${response.in.text}"))
    

    上面的curl命令会返回被测服务部署的分支和commitid,整段代码的意思就是提取分支名称,后续通过${branch}来引用即可。
    3、配置分支变量


    引用变量

    4、提取commitid


    提取commitid
    shell.sh如下:
    #确保git上拉取的commitId与部署服务器的一致,否则会统计覆盖率不准确
    var=$(curl http://172.16.13.11:8080/healthcheck.html)
    var1=${var#*git.commit.id=}
    commitId=${var1%% <br>*}
    echo ${commitId}
    cd ${WORKSPACE}
    git checkout -B  tomandy  ${commitId}
    

    上面的curl命令会返回被测服务部署的分支和commitid,整段脚本的意思是强制检出当前分支(第2步提取的分支)下的某个commitid版本。此处需使用大写的 -B,使用-b的话,否则反复进行jenkins构建会报错,具体原因去查下两者的区别就明白了。

    按以上的步骤配置后,就能确保被测服务部署的版本与jenkins拉取的版本一致了,代码覆盖率统计不准确的问题也就解决了。至于jenkins+jacoco+sonar的环境搭建,参考《jacoco+sonarQube+sonarScanner+ant+jenkins环境搭建》即可。

    相关文章

      网友评论

        本文标题:jenkins+jacoco代码覆盖率统计遇到的坑

        本文链接:https://www.haomeiwen.com/subject/ukuvpctx.html