最近终于把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代码覆盖率报告的更多相关文章

  1. Jenkins中集成jmeter-maven插件

    转自:http://my.oschina.net/u/1377774/blog/168969 目录[-] 第一步.先在maven工程中单独使用jmeter-maven插件 0.环境 1.在POM.xm ...

  2. jenkins中集成commander应用

    jenkins中集成commander应用 jenkins 集成测试 promotion 最近参加公司的集成测试平台的开发,在开发中遇到了不少问题,两个星期的迭代也即将完成,在这也用这篇博客记录下开发 ...

  3. 在jenkins和sonar中集成jacoco(二)--在jenkins中生成jacoco覆盖率报告

    先要在jenkins上安装jacoco的插件,安装完成之后在job的配置项中可以增加这个选项: 第一个录入框是你的覆盖率文件(exec),第二个是class文件目录,第三个是源代码文件目录. 配置好了 ...

  4. 在Jenkins中集成Sonarqube

    Analyzing with SonarQube Scanner for MSBuild Global Configuration This step is mandatory if you want ...

  5. jenkins 中集成JNI的坑

    有包名1.生成class> javac myjni\HelloJNI.java2.生成.h文件> javah -d include myini.HelloJNI3.生成.dll文件> ...

  6. Jenkins中集成python,支持参数生成Makefile文件

    #!/usr/bin/env python import os print os.getenv("BUILD_NUMBER") print os.getenv("uuid ...

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

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

  8. windows部署jenkins持续集成maven测试项目不能访问测试报告

    买了一台阿里云的服务器用于练习maven test项目,系统版本wiondows server 2012,将jenkins war包部署在Tomcat服务器上,项目构建后,生成的报告在C:\Windo ...

  9. 在jenkins中调用maven的变量

    Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...

随机推荐

  1. android实习程序6——拨号通话

    拨号通话 ListView GridView AdapterView 在路径android-sdkr16\android-sdkr16\platform-tools确认存在adb.exe 下载youl ...

  2. Bitmap的一个简单实现

    一.Bitmap简介 Bitmap是一种常用的数据结构,其实就是一个连续的数组,主要是用于映射关系,如映射整数,一位代表一个数,即这里假设Bitmap有100Bytes * 8 这么多的位,那么这里可 ...

  3. 解决Eclipse一直loading workbench无法启动的问题

    不知怎地,Eclipse始终停留在Loading workbench状态.反复重启,状态依旧.尝试解决. 停止时显示的状态:”Loading workbench”,看来和这个workbench插件有关 ...

  4. ssi-uploader上传图片插件,点击选择文件按钮自动提交表单解决办法

    先介绍一下这款插件,然后再谈使用中可能遇到的问题 ssi-uploader是一个JQuery的图片上传插件,界面比较美观 github地址:https://github.com/ssbeefeater ...

  5. 蓝桥杯 C语言 入门训练 Fibonacci数列

    问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n ...

  6. SQL注入(一) - 入门篇

    什么是SQL注入 可能大家还不是对SQL注入这个概念不是很清楚,简单地说,SQL注入就是攻击者通过正常的WEB页面,把自己SQL代码传入到应用程序中,从而通过执行非程序员预期的SQL代码,达到窃取数据 ...

  7. java初学者

    决心开始从头学习java,并且每天记录自己的学习进度与学习成果,用于分享和促进. 鉴于是新手,并且之前也没有任何发文的经历,可能更多的是根据自己已有的知识容量基础之上进行的深化,太基础的看一遍就能会的 ...

  8. 证据权模型(C#版)

    证据权法是通过计算和利用各种不同证据的权重(表示相对重要性)并将多种证据结合起来,预测某个时间是否会发生的一种方法 证据权法以概率论中的贝叶斯定理为基础.设D表示要一个随机事件.用P(D)表示这一事件 ...

  9. 《我与Android不得不说的故事-1-立贴明志》

    产品需要迭代,人也一样,自我更新,才能不断进步,进军新领域,立贴明志. 顺便记录一下新路上的坑坑洼洼

  10. Android版本和API Level的对应关系

    Platform Version API Level VERSION_CODE Notes Android 4.4 KITKAT Platform Highlights Android 4.3 JEL ...