zoukankan      html  css  js  c++  java
  • Jenkins中集成Gcov代码覆盖率报告

    最近终于把gcov代码覆盖报告集成到jenkins中了,总算是完成工作,写篇博客总结下。

    我循序渐进地用了三个工具:gcov, lcov, gcovr

    这三个工具原理(其实gcovr依赖于GNU的gcov的)都是收集你程序run之后所产生的*.gcda文件,总的来说,我个人觉得比较喜欢lcov,应为lcov的报告读起来很不错,可惜它不能集成到Jenkins。。。

    从头说起。。。

    一开始我用的是GNU tool gcov,网上学习了下gcov,生成了xx.cpp.gcov报告,然后就可以查看了,gcov给我的感觉是比较基础,最大的缺点是不能统计所有代码的覆盖信息(我是用cmake,有可能我的CMakeLists.txt中有好多target,比如,我写了个CMakeLists.txt,这个文件中产生2个目标,一个叫hello_world,一个叫goodbye_world,这个hello_world里有2个源文件,然后这个goodbye_world里假设也有两个文件,但是我想查看总的代码覆盖情况,也就是两个目标run之后4个源文件的代码覆盖情况),而且生成的报告不是那么human-readable。

    随后,又开始研究,找到了一个叫lcov前端工具,将lcov和genhtml连起来用确实生成的HTML报告读起来很棒,行覆盖率、分支什么的都有,而且又能收集多个目标执行后的代码覆盖率,但是lcov生成的报告不能被Jenkins追踪,也没有覆盖率趋势。

    于是,又再次研究,用Google搜到篇老外的文章,http://www.semipol.de/archives/320,里面讲了用gcovr可以生成xml文件,这个xml文件是可以被Cobertura读取解析,而这个Cobertura是Jenkins的一个现有java统计覆盖率的插件,这下就找到方向了!

    有了方向,我就开始做了,首先:在Jenkins上找到了Cobertura这个插件并安装,然后,配置下你的编译,我是直接执行了shell脚本,就是Jenkins的构建的Execute shell,比如,sh mybuild.sh,紧接着,在你的Jenkins工程中增加post-build action,见下图,让这个插件去读这个coverage.xml文件,接下来就是怎么生成这个coverage.xml文件了。

    随后,我在网上下了个gcovr,是用gcovr -x -r "source_dir" --output "output_dir/coverage.xml"生成了上面插件需要的coverage.xml文件,你可以把它写到上面的mybuild.sh中,其实mybuild.sh肯定还有其他shell命令,比如先运行你的程序,进入目录什么的。

    ok,如果编译没什么错误的话,最后你就能在Jenkins中看到gcov的报告了。

     至此,Jenkins集成Gcov报告就结束了,如果你用的是cmake的话,我强烈推荐下老外写的CMake脚本,这些脚本很强大,可以集成到你的CMakeLists.txt中,使你不需要去写gcovr -x -r "source_dir".....这些命令了,因为老外直接写好了,额,open source就是强大啊!

    Cmake coverage 脚本:https://code.cor-lab.de/projects/rsc/repository/revisions/master/entry/cmake/Modules/EnableCoverageReport.cmake

    相关解析脚本: https://code.cor-lab.de/projects/rsc/repository/revisions/master/entry/cmake/Modules/ParseArguments.cmake

    找lcov脚本: https://code.cor-lab.de/projects/rsc/repository/revisions/master/entry/cmake/Modules/FindLcov.cmake

    找gcovr脚本:https://code.cor-lab.de/projects/rsc/repository/revisions/master/entry/cmake/Modules/Findgcovr.cmake

    gcovr下载地址:https://pypi.python.org/pypi/gcovr/   解压后,使用scripts/gcovr就可以了

    下载完上述4个脚本和gcovr工具后,你就可以在你的CMakelists.txt中加入了,具体我不解释了,自行查看,下面示范怎么使用:


    set(CMAKE_MODULE_PATH "helloworld/cmake/modules" ${CMAKE_MODULE_PATH})  #我把这些脚本放到cmake/modlues目录下

    include(ConfigureCodeCoverage)

    if(CODE_COVERAGE)
    ENABLE_COVERAGE_REPORT(FILTER "/usr/include/*;/usr/lib/*")
    endif(CODE_COVERAGE)

    编译:

    先运行 cmake --build . --use-stderr

    然后运行 cmake --build . --use-stderr -- target Coverage

    运行完毕后,你就可以看到locv和gcovr生成的报告了,因为老外已经讲lcov,gcovr集成进EnableCoverageReport.cmake这个脚本中了。

    一些链接:

    Gcovr user guide: http://gcovr.com/guide.html#gettingStarted

  • 相关阅读:
    linux命令 time
    linux命令 awk
    php学习十四:抽象,接口和多态
    php学习十三:其他关键字
    php学习十二:其他魔术方法
    php学习十一:组合
    php学习十:继承
    php学习九:存取器&魔术方法
    php学习八:封装
    php学习七:时间和日期
  • 原文地址:https://www.cnblogs.com/jackyim/p/3772306.html
Copyright © 2011-2022 走看看