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
转载于:https://www.cnblogs.com/jackyim/p/3772306.html
Jenkins中集成Gcov代码覆盖率报告相关推荐
- Jenkins中集成NodeJS插件问题对应
在Jenkins的镜像中集成NodeJS插件,发现node和npm都无法执行,最终确认之后定位为libc的问题,在这篇文章中进行memo.中介来说,这个问题还可以描述为:如何在Alpine镜像中支持N ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- mac 下安装java, jmeter, ant, jenkins,使用jmeter+ant+jenkins 接口测试集成工具,发送html报告到邮箱中
涉及到的参考文档,如果有侵权,可以告知,立即删除. 一.全部小工具的安装 1.mac下安装java,jmeter 参考文档:https://www.jianshu.com/p/bce9077d883c ...
- Jenkins集成Maven代码覆盖率插件Cobertura
Jenkins集成Maven代码覆盖率插件Cobertura可以很好的测试到没有做单元测试的代码,代码测试覆盖率也是一个衡量代码质量的因素.Maven为我们提供了Cobertura插件,可以很好地配置 ...
- python页面自动化测试代码覆盖率_Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)...
requirments OS: Ubuntu 14.04+ Gitlab 8.1 + Jenkins 2.19.0 + 使用Jenkins对Python项目进行自动化测试主要依赖nose(单元测试). ...
- 在IDEA中集成Jenkins插件 解决Missing or bad crumb data异常
在IDEA中集成Jenkins插件 由于项目组中使用jenkins作为持续集成工具,之前一直用web方式进行访问,感觉效率比较低下,所以想通过安装官方插件,直接在IDE上直接出触发Jenkins服务器 ...
- 【持续集成和交付】项目环境配置:在Jenkins中运行项目
前言 一直想学习自动化测试,但是都没行动,业余时间学习零零碎碎并记录20210424. 11.持续集成和交付 Jenkins环境搭建 项目环境配置 邮件通知 定时项目执行 在Jenkins中运行项目 ...
- 持续集成之企业微信通知:5:在Jenkins中向企业微信推送消息
在这篇文章中结合具体的示例来介绍在Jenkins中如何向企业微信群推送消息. 环境准备 这里使用Easypack的Jenkins 2.164.3来创建验证用的Jenkins环境.使用如下步骤即可完成. ...
- 使用JaCoCo Maven插件为单元和集成测试创建代码覆盖率报告
当我开始使用Java 7时,我立即注意到Cobertura Maven插件不支持它 . 这对我来说是个大问题,因为我每天都使用代码覆盖率报告. 我做了一些研究,发现了JaCoCo代码覆盖库 . 看起来 ...
- jmeter添加html,Jmeter 报告可视化 —— 配置生成测试报告仪表板,Jmeter + Jenkins 自动化构建生成 HTML 报告...
目录 一.jmeter报告仪表板相关信息 二.文件修改说明 三.jmeter.properties文件配置 四.user.properties文件配置 五.新建jtl报告目录 六.复制jmeter.p ...
最新文章
- 正态分布,此际回头看,原来并没有事
- 第十六届全国大学生智能汽车竞赛华东赛区 承办情况汇报
- ubuntu12.04编译android4.0源代码Deug2
- Service Worker 概念简介
- 50万块钱,在哪个银行存钱最合适?
- nginx php-fpm 下的php.ini在哪里
- java geoprocessor_ArcGIS GeoEvent Processor for Server 安裝與配置 (僅適用於壓縮安裝包)...
- java自动生成函数注释_IDEA类和方法注释自动生成(2019-08-31 21:47写)
- comsol仿真模型:风力发电机复合材料叶片的应力和模态分析
- 佛系程序员的月薪五万指南 -- 作者|李运华
- 数模电路基础知识 —— 4. 常见电路符号说明(二极管)
- mysql锘縖_根据中文字符串查询拼音声母
- java pdf中插入图片
- idea中如何生成程序运行的时序图
- 2023计算机毕业设计SSM最新选题之java“逢遇”个人博客平台qaoxv
- 基于javaweb网上书城系统(前端+后端)
- Raphael.js画带间隙的实心饼图
- ajax读文件(方法3,最简单的方法)
- 洋葱模型php,比较express与koa中间件模式的区别与联系
- checkbox要点两次两次才能选中,让它只需要点一次