最近终于把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

转载于:https://www.cnblogs.com/jackyim/p/3772306.html

Jenkins中集成Gcov代码覆盖率报告相关推荐

  1. Jenkins中集成NodeJS插件问题对应

    在Jenkins的镜像中集成NodeJS插件,发现node和npm都无法执行,最终确认之后定位为libc的问题,在这篇文章中进行memo.中介来说,这个问题还可以描述为:如何在Alpine镜像中支持N ...

  2. Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)

    Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...

  3. mac 下安装java, jmeter, ant, jenkins,使用jmeter+ant+jenkins 接口测试集成工具,发送html报告到邮箱中

    涉及到的参考文档,如果有侵权,可以告知,立即删除. 一.全部小工具的安装 1.mac下安装java,jmeter 参考文档:https://www.jianshu.com/p/bce9077d883c ...

  4. Jenkins集成Maven代码覆盖率插件Cobertura

    Jenkins集成Maven代码覆盖率插件Cobertura可以很好的测试到没有做单元测试的代码,代码测试覆盖率也是一个衡量代码质量的因素.Maven为我们提供了Cobertura插件,可以很好地配置 ...

  5. python页面自动化测试代码覆盖率_Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)...

    requirments OS: Ubuntu 14.04+ Gitlab 8.1 + Jenkins 2.19.0 + 使用Jenkins对Python项目进行自动化测试主要依赖nose(单元测试). ...

  6. 在IDEA中集成Jenkins插件 解决Missing or bad crumb data异常

    在IDEA中集成Jenkins插件 由于项目组中使用jenkins作为持续集成工具,之前一直用web方式进行访问,感觉效率比较低下,所以想通过安装官方插件,直接在IDE上直接出触发Jenkins服务器 ...

  7. 【持续集成和交付】项目环境配置:在Jenkins中运行项目

    前言 一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210424. 11.持续集成和交付 Jenkins环境搭建 项目环境配置 邮件通知 定时项目执行 在Jenkins中运行项目 ...

  8. 持续集成之企业微信通知:5:在Jenkins中向企业微信推送消息

    在这篇文章中结合具体的示例来介绍在Jenkins中如何向企业微信群推送消息. 环境准备 这里使用Easypack的Jenkins 2.164.3来创建验证用的Jenkins环境.使用如下步骤即可完成. ...

  9. 使用JaCoCo Maven插件为单元和集成测试创建代码覆盖率报告

    当我开始使用Java 7时,我立即注意到Cobertura Maven插件不支持它 . 这对我来说是个大问题,因为我每天都使用代码覆盖率报告. 我做了一些研究,发现了JaCoCo代码覆盖库 . 看起来 ...

  10. jmeter添加html,Jmeter 报告可视化 —— 配置生成测试报告仪表板,Jmeter + Jenkins 自动化构建生成 HTML 报告...

    目录 一.jmeter报告仪表板相关信息 二.文件修改说明 三.jmeter.properties文件配置 四.user.properties文件配置 五.新建jtl报告目录 六.复制jmeter.p ...

最新文章

  1. 正态分布,此际回头看,原来并没有事
  2. 第十六届全国大学生智能汽车竞赛华东赛区 承办情况汇报
  3. ubuntu12.04编译android4.0源代码Deug2
  4. Service Worker 概念简介
  5. 50万块钱,在哪个银行存钱最合适?
  6. nginx php-fpm 下的php.ini在哪里
  7. java geoprocessor_ArcGIS GeoEvent Processor for Server 安裝與配置 (僅適用於壓縮安裝包)...
  8. java自动生成函数注释_IDEA类和方法注释自动生成(2019-08-31 21:47写)
  9. comsol仿真模型:风力发电机复合材料叶片的应力和模态分析
  10. 佛系程序员的月薪五万指南 -- 作者|李运华
  11. 数模电路基础知识 —— 4. 常见电路符号说明(二极管)
  12. mysql锘縖_根据中文字符串查询拼音声母
  13. java pdf中插入图片
  14. idea中如何生成程序运行的时序图
  15. 2023计算机毕业设计SSM最新选题之java“逢遇”个人博客平台qaoxv
  16. 基于javaweb网上书城系统(前端+后端)
  17. Raphael.js画带间隙的实心饼图
  18. ajax读文件(方法3,最简单的方法)
  19. 洋葱模型php,比较express与koa中间件模式的区别与联系
  20. checkbox要点两次两次才能选中,让它只需要点一次

热门文章

  1. 微信小程序生成海报分享:canvas绘制文字溢出如何换行
  2. Java_基础—readLine()和newLine()方法
  3. 【4】Kafka集群启动/关闭脚本
  4. 2.8 循环语句介绍
  5. [bzoj1025] [SCOI2009]游戏
  6. 中国人民公安大学(PPSUC) 网络对抗技术作业一
  7. Python做接口自动化测试框架
  8. JDK1.8之ConcurrentHashMap
  9. 56)函数模板的基本语法
  10. HSV颜色识别demo