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
Jenkins中集成Gcov代码覆盖率报告的更多相关文章
- Jenkins中集成jmeter-maven插件
转自:http://my.oschina.net/u/1377774/blog/168969 目录[-] 第一步.先在maven工程中单独使用jmeter-maven插件 0.环境 1.在POM.xm ...
- jenkins中集成commander应用
jenkins中集成commander应用 jenkins 集成测试 promotion 最近参加公司的集成测试平台的开发,在开发中遇到了不少问题,两个星期的迭代也即将完成,在这也用这篇博客记录下开发 ...
- 在jenkins和sonar中集成jacoco(二)--在jenkins中生成jacoco覆盖率报告
先要在jenkins上安装jacoco的插件,安装完成之后在job的配置项中可以增加这个选项: 第一个录入框是你的覆盖率文件(exec),第二个是class文件目录,第三个是源代码文件目录. 配置好了 ...
- 在Jenkins中集成Sonarqube
Analyzing with SonarQube Scanner for MSBuild Global Configuration This step is mandatory if you want ...
- jenkins 中集成JNI的坑
有包名1.生成class> javac myjni\HelloJNI.java2.生成.h文件> javah -d include myini.HelloJNI3.生成.dll文件> ...
- Jenkins中集成python,支持参数生成Makefile文件
#!/usr/bin/env python import os print os.getenv("BUILD_NUMBER") print os.getenv("uuid ...
- Jenkins持续集成项目搭建与实践——基于Python Selenium自动化测试(自由风格)
Jenkins简介 Jenkins是Java编写的非常流行的持续集成(CI)服务,起源于Hudson项目.所以Jenkins和Hudson功能相似. Jenkins支持各种版本的控制工具,如CVS.S ...
- windows部署jenkins持续集成maven测试项目不能访问测试报告
买了一台阿里云的服务器用于练习maven test项目,系统版本wiondows server 2012,将jenkins war包部署在Tomcat服务器上,项目构建后,生成的报告在C:\Windo ...
- 在jenkins中调用maven的变量
Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...
随机推荐
- Fragment与Activity交互(使用接口)
在Fragment中: 1. // 定义一个回调接口,该Fragment所在Activity需要实现该接口// 该Fragment将通过该接口与它所在的Activity交互 { public void ...
- Address already in use: JVM_Bind(端口冲突)
1.错误描述 2011-7-20 11:05:18 org.apache.catalina.core.StandardServer await严重: StandardServer.await: cre ...
- C语言之分支结构 if(一)
一 程序的三种基本结构 顺序结构:程序从上往下依次执行,这个叫顺序结构 分支结构:有选择的执行或者不执行某段代码 循环结构:重复的执行某段代码 二 分支结构之if 最简单的俩种用法 (tips: if ...
- Ueditor1.4.3实现跨域上传到独立文件服务器,完美解决单文件和多文件上传!
再写配置方法之前先吐槽一下网上的各种教程,TM没一个有卵用,一群傻屌不会写就别写,写了就要负责. 百度google搜了半天,全是配置什么document.domain,根域名什么的,我只想对你说: 好 ...
- scrapy在ubuntu上安装总结
此文档是本人学习时使用的,采用一个实例作为引导进行安装测试. 实例下载地址如下: https://github.com/sans-serif/scrapy-german-news#introducti ...
- HTML5之canvas细节详谈
一.canvas基础 1.canvas是HTML5 的新标签,其默认宽高为300*150. canvas 元素本身是没有绘图能力的.所有的绘制工作必须在 JavaScript 内部完成. ...
- CreateMutex 创建一个有名字的互斥量的时候hMutex=CreateMutex(NULL,TRUE,"tickets")报错
编译器报错: 不能将参数 3 从“const char [8]”转换为“LPCWSTR”,怎么改成LPCWSTR类型 更改方法: hMutex=CreateMutex(NULL,TRUE,L" ...
- SDN理解:云数据中心底层网络架构
目录 - 目录 - 云数据中心流量类型 - NSX整体网络结构 - 管理网络(API网络) - 租户网络 - 外联网络 - 存储网络 - openstack整体网络结构 - 管理网络:(上图中蓝线) ...
- C# LocalizationHelpers (搬运)
using Utils; namespace System.Web.Mvc { /// <summary> /// 本地化帮助类 /// </summary> public s ...
- <hdu - 1863> 畅通工程 并查集和最小生成树问题
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...