Sonar + Jacoco,强悍的UT, IT 双覆盖率统计(转)

以前做统计代码测试覆盖,一般用Cobertura。以前统计测试覆盖率,一般只算Unit Test,或者闭上眼睛把Unit Test和Integration Test一起算。

但是,我们已经过了迷信UT的时代:

  • UT不支持大幅度重构,如果对类和方法进行重构拆分,UT就失去了保障重构后代码仍然正确的作用,还要花时间按新的类和方法重写,其他用例对旧类和方法的mock改起来也是噩梦。
  • UT不支持基于用户故事的测试,即使覆盖率100%了,也不保证就是产品经理想要的东西。
  • UT对输入参数和Mock对象行为的假设,其实存在潜在的风险
  • 多线程,网络等等难于测试的地方。

在我看来,使用嵌入式容器的集成测试,如Spring Boot所倡导的基于嵌入式Jetty,H2等等的一整套集成测试体系,集合了UT(可本地快速运行,可直接assert应用内部属性,可统计覆盖率,如果CI失败了可以本地单独运行、debug、修复失败的case再提交)与FT(基于用户故事黑盒测试)的优点,对项目质量保证的地位一点不比UT低,所以同样需要计算覆盖率,而不是传统测试金字塔模型,只依赖UT的覆盖率。

所以Sonar + Jacoco 这种同时显示UT和IT测试覆盖率的组合非常实用。

照抄Sonar自带的Maven UT/IT示例项目,用maven插件,很容易就能跑出效果来,略。

花了我半天时间的,是如何用Jenkins上的SonarQubeRunner,跑出相同的效果,因为SonarQubeRunner不认识Maven是谁。

网上都是半新半旧,不咸不淡的文章,自己又摸索了一轮,得出一个只要一条不漏,便保证能跑的Jenkins + Maven + Sonar + Jacoco配置

在Jenkins上使用最新的SonarQube Runner 2.4,填入下面的配置

sonar.projectKey=xxx
sonar.projectName=xxx
sonar.projectVersion=xxx
sonar.modules=moduleA,moduleB,IT module C

#这里假设moduleA,moduleB 在根目录下的一层目录,Module C在二层目录下,需额外定义
#moduleC.projectBaseDir=xxx/moduleC

sonar.sourceEncoding=UTF-8
sonar.language=java
sonar.sources=src/main/java
sonar.tests=src/test/java
sonar.binaries=target/classes

#排除一些不想统计的类
#sonar.exclusions=**/*IDL.java

sonar.java.coveragePlugin=jacoco
sonar.jacoco.itReportPath=xxx/moduleC/target/jacoco-it.exec,最好写成绝对路径
sonar.junit.reportsPath=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports

原文地址:http://calvin1978.blogcn.com/articles/sonar-jacoco.html

时间: 2024-08-10 21:29:00

Sonar + Jacoco,强悍的UT, IT 双覆盖率统计(转)的相关文章

ant+sonar+jacoco代码质量代码覆盖率扫描

使用ant构建的java web项目如何做sonar代码质量扫描?以下就是实际遇到并成功使用的案例一.做sonar扫描的准备工作    1.给web项目增加build.xml构建脚本.    2.下载jar包:jacocoant.jar:sonar-ant-task-2.2.jar    3.搭建一个sonar服务器二.在build.xml中编写jacoco和sonar的脚本 案例的build.xml脚本 <?xml version="1.0" encoding="UT

.NET Core单元测试之搞死开发的覆盖率统计(coverlet + ReportGenerator )

.NET Core单元测试之搞死开发的覆盖率统计 这两天在给项目补单元测试,dalao们要求要看一下测试覆盖率 翻了一波官方test命令覆盖率倒是有支持了,然而某个更新日志里面写着 ["Support for Linux and Mac will be considered separately in a subsequent effort."] 吐血ing... 8102年都要过去了,微软同学你是不有点过分啊. 然后又翻了一堆资料之后发现,GitHub有dalao自己搞了个cover

多环境多需求并行下的代码测试覆盖率统计工具实现

马蜂窝技术原创内容,更多干货请关注公众号:mfwtech 测试覆盖率常被用来衡量测试的充分性和完整性,也是测试有效性的一个度量.「敏捷开发」的大潮之下,如何在快速迭代的同时保证对被测代码的覆盖度和产品质量,是一个非常有挑战性的话题. 在马蜂窝大交通.酒店等交易相关业务中,项目的开发和测试实践同样遵循敏捷的原则,迭代周期短.速度快.因此,如何依据测试覆盖率数据帮助我们有效判断项目质量.了解测试状态.提升迭代效率,是我们一直很重视的工作. Part.1 测试覆盖率统计中的挑战 对于功能测试而言,通常

JavaScript覆盖率统计实现

主要需求 1. 支持browser & nodejs 由于javascript既能够在浏览器环境执行,也能够在nodejs环境执行,因此须要能够统计两种环境下单元測试的覆盖率情况. 2. 透明.无缝 用户写单元測试用例的时候,不须要为了支持覆盖率统计多写代码,之前写的用例无需改动就能够直接统计覆盖率情况. 原理 javascript覆盖率的相关文章比較少.以下的图是通过阅读开源javascript覆盖率工具istanbul及开源測试框架Karma的覆盖率插件karma-coverage得出的.

bcov进行覆盖率统计

kcov是在bcov基础上进行的,bcov已经很久没有维护了: 首先需要下载依赖库libdwraft,然后在configure时候进行指定: ./configure --with-libdwarf=/usr/local/lib 然后make;make install (1)悲催的是编译过程中出现了错误 ‘PTRACE_O_TRACECLONE’ was not declared in this scope 增加头文件<sys/ptrace> 同时对ptrace调用的地方进行强制类型转换,例如原

单元测试覆盖率统计

参考http://www.cnblogs.com/turtle-fly/archive/2013/01/09/2851474.html 1.下载安装gcov/lcovgcov生成覆盖率数据lcov数据统计 2.编译gcc -g -pipe -m64 -fpic -DLINUX -fprofile-arcs -ftest-coverage 3.链接三条任选一个执行即可$ gcc --coverage$ gcc -lgcov$ gcc -fprofile-arcs 4.运行程序,会生成覆盖数据 5.

EclEmma单元测试覆盖率统计插件

EclEmma是Eclipse里的一个插件,安装简单,覆盖率显示直观.安装EclEmma.打开Eclipse,点击Help → Intall New SofaWare → Work with 输入 http://update.eclemma.org/  回车 点击完成结束配置,并开始下载安装插件,安装结束后Eclipse通常会提醒你重新启动Eclipse选择确定.在重新打开的Eclipse工具栏里你就会看到这个代码覆盖测试工具Eclemma!  

[转载] JaCoCo:分析单元测试覆盖率的利器

转载自http://www.ibm.com/developerworks/cn/java/j-lo-jacoco/和http://www.cnblogs.com/chenfengmugu/p/4937257.html 本文主要介绍了如何使用 JaCoCo 分析 Java 项目的单元测试覆盖率,同时介绍了如何在 Eclipse 中安装和使用 EclEMMA,让开发人员可以直观地看到单元测试的覆盖情况. 前言 随着敏捷开发的流行,编写单元测试已经成为业界共识.但如何来衡量单元测试的质量呢?有些管理者

Jacoco覆盖率工具使用

Jacoco介绍 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第三方的工具提供了对Jacoco的集成,如sonar.Jenkins等. 官网地址:http://www.eclemma.org/jacoco/ Java Counters Jacoco包含了多种尺度的覆盖率计数器,包含指令级(Instructions,C0coverage),分支(Branches,