基于 jacoco 的功能测试代码覆盖率实践

jacoco增量覆盖率平台开发 先聊聊做这个平台的意义,从项目管理角度来说,测试说项目测试完成,该如何证明呢?一般情况下我们进行验收时没什么问题就算完成了,但是实际上测试很多情况并没有考虑到。所以该平台可以反哺测试的测试用例,让平台质量把控上升一个层次,其次可以作为产品验收的标准。覆盖率至少达到百分90才可以发布到生产。为什么时百分90不是百分百,作为开发人员有很多时候会写一些防止报错的异常代码,这部分代码可能正常情况下是永远执行不到的。 阅读详情

 

 

WellDo关注

0.2472018.09.18 12:07:44字数 1,878阅读 12,839

1. 基于 jacoco 的功能测试代码覆盖率实践

1.1 目前主流代码覆盖率统计工具

考虑到方案实施的难度很大取决于工具是否仍保持维护更新,所以选择 jacoco 来进行实践。

Jacoco 是一个开源的覆盖率工具。Jacoco 可以嵌入到 Ant 、Maven 中,并提供了 EclEmma Eclipse 插件,也可以使用 Java Agent 技术监控 Java 程序。很多第三方的工具提供了对 Jacoco 的集成,如 sonar、Jenkins、IDEA。

Jacoco 包含了多种尺度的覆盖率计数器,包含指令级(Instructions,C0 coverage),分支(Branches,C1 coverage)、圈复杂度(Cyclomatic Complexity)、行(Lines)、方法(Non-abstract Methods)、类(Classes)。

➢ Instructions:Jacoco 计算的最小单位就是字节码指令。指令覆盖率表明了在所有的指令中,

哪些被指令过以及哪些没有被执行。这项指数完全独立于源码格式并且在任何情况下有效,不需要类文件

的调试信息。

➢ Branches:Jacoco 对所有的 if 和 switch 指令计算了分支覆盖率。这项指标会统计所有的分支数

量,并同时支出哪些分支被执行,哪些分支没有被执行。这项指标也在任何情况都有效。异常处理不考虑在分支范围内。

➢ Cyclomatic Complexity:Jacoco 为每个非抽象方法计算圈复杂度,并也会计算每个类,包,组的复杂度。根据 McCabe1996 的定义,圈复杂度可以理解为覆盖所有的可能情况最少使用的测试用

例数。这项参数也在任何情况下有效。

➢ Lines:该项指数在有调试信息的情况下计算。

➢ Methods:每一个非抽象方法都至少有一条指令。若一个方法至少被执行了一条指令,就认为它被执行过。因为 JaCoco 直接对字节码进行操作,所以有些方法没有在源码显示(比如某些构造方法和由编

译器自动生成的方法)也会被计入在内。

➢ Classes:每个类中只要有一个方法被执行,这个类就被认定为被执行。同 5 一样,有些没有在源码声明的方法被执行,也认定该类被执行。

1.2 jacoco 部署准备工作

➢下载 jacoco.zip http://www.eclemma.org/jacoco/index.html

➢下载安装 ANT,具体可参考百度,需配置环境变量。

第 一 步 : 解 压 下 载的 jacoco-0.7.9.zip 文 件 , 将 lib 文 件 夹 下 的 jacocoagent.jar 包拷贝放到对应 tomcat 服务器的 lib 目录下

第二步: 修改 tomcat\bin 目录下的 catalina.bat 文件,在 setlocal 后添加如下代码:

set "JAVA_OPTS=-javaagent:%CATALINA_HOME%\lib\jacocoagent.jar=includes=com.thinkgem.

jeesite.*,output=tcpserver,port=8144,address=127.0.0.1 - Xverify:none"

(限 Windows 环境,其他系统略有不同,需先停掉 tomcat 服务)

配置完成后,可直接重启 tomcat 服务,查看 logs 目录下的 catalina 日志,查找 jacocoagent 字段,若有,则代表配置成功。

第三部:添加配置 ant build.xml 文件,随便存储在哪里都成,具体配置如下:

1.3 本地生成覆盖率报告

以上配置完成后,可进行对应的功能测试操作,通过 ant dump 命令,可动态获

取覆盖率数据,不需要停止 tomcat 服务器。

备注: Jenkins 的 Jacoco plugin 可以根据.exec 文件直接生成覆盖率报告,并在 Jenkins 中生成图

表等等。那样的话,ant report 这个任务就没用了。可直接在 jenkins 中配置,在每次项目构建的时候自

动执行 report,这样就不需要将项目源码文件 checkout 到本地

➢打开 cmd 命令行窗口,进入 build.xml  所在目录,执行 ant dump,

若成功,会输出如下信息:

➢在执行 ant report。jacoco 就会在你指定的路径生成覆盖率报告了

2. 基于 jacoco + SonarQube + sonar-scanner 的集成实践

SonarQube 能够提供对代码的一整套检查扫描和分析功能,可以通过 sonar-scanner 完成对各开发环境和软件的支持。通过整合 jacoco 不仅可以展示代码扫描结果,也能图形化显示测试覆盖率情况。

2.1 SonarQube 准备工作

第一步:

➢下载 SonarQube 和 sonar-scanner,并解压 https://www.sonarqube.org/downloads/ 将 sonar-scanner\bin,路径添加到环境变量

➢安装 MySql,并创建数据库(也可使用内置数据库,实际使用会很慢)

-- 创建数据库:

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; -- 创建SonarQube Server访问数据库的用户:

CREATE USER 'sonar' IDENTIFIED BY 'sonar';

-- 配置SonarQube Server访问数据库用户的权限

GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';

-- 更新权限:

flush privileges;

第二步:

➢配置 SonarQube 配置文件,打开 SonarQube 下的 conf/sonar.properties

➢ 配 置 sonar-scanner 配 置 文 件 , 修 改 sonar-scanner-3.0.3.778-windows\conf\sonar-scanner.properties 文件

第三步:

➢配置 SonarQube 系统

访问 http://127.0.0.1:9000,如果不是本机就输入 http://IP:9000

第四步:

对应项目工程添加 properties 配置文件,文件内容如下:

# 指定 SonarQube instance 必须是唯一的

sonar.projectKey=BR_CR2794_20170419

# 设置 SonarQube UI 显示的名称

sonar.projectName= hrms

sonar.projectVersion=1.0

sonar.language=java

# 指定 src 和 classes 文件夹位置,当可以是全路径,如果是当前工程根目录下用“.”表示也可以

sonar.sources=src

sonar.java.binaries=target

# 不参与分析的某个文件夹或者忽略某个文件夹

# sonar.inclusions=src1/**,src3/**

# sonar.exclusions=src2/**,src4/**

# 源码编码,默认是系统编码

sonar.sourceEncoding=UTF-8

# Set jacoco Configuration

# 指定代码覆盖率工具

sonar.core.codeCoveragePlugin=jacoco

# 指定 exec 二进制文件存放路径

sonar.jacoco.reportPaths=D:/covge/jacoco.exec

# 以下属性非必须,具体含义参考百度

sonar.dynamicAnalysis=reuseReports

sonar.jacoco.reportMissing.force.zero=false

2.2 SonarQube 执行项目分析

以上配置完成后,打开 cmd 窗口,进入工程根目录,执行 sonar-scanner 命

令,若报错,可在命令后加上 -X 重新执行一遍,会显示详细报错信息。成功应

有如下内容输出:

重新访问 http://127.0.0.1:9000 展示效果如下:


2.2SonarQube 集合 jenkins 和 maven 使用

➢ 在 Jenkins 中安装和使用 SonarQube 的先决条件:安装插件 SonarQube Plugin,并且 Jenkins 插件 SonarQube Plugin 在配置位置 Jenkins->Configuration->Configure System->SonarQube servers 中的选项 Server URL 要配置正确,使用已经安装好的 SonarQube Server 的 URL

➢ 修 改 maven 配 置 setting.xml , 参 照 官 方 配 置 :

https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Ma ven

<settings>

<pluginGroups>

<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>

</pluginGroups>

<profiles>

<profile>

<id>sonar</id>

<activation>

<activeByDefault>true</activeByDefault>

</activation>

<properties>

<!-- Optional URL to server. Default value is http://localhost:9000 --> <sonar.host.url>

http://myserver:9000

</sonar.host.url>

</properties>

</profile>

</profiles>

</settings>

修改 Maven 配置之后,在 Maven 构建指令上加上一个 Goals 即可:

$SONAR_MAVEN_GOAL -Dsonar.host.url=$SONAR_HOST_URL

精准测试 & Jacoco 代码覆盖率统计实战 测试设计阶段测试范围评估少:质量差评估多:成本高测试设计设计全:成本高设计少:用时少、风险高交付测试阶段开发工程师顺手改了代码,忘记同步,对上线有什么影响?马上要上线了,系统达到质量标准了么?测试工程师核心功能是否回归足够?功能点这么多,测完还会有遗漏测试点么?代码变动太频繁,上线会有什么风险么?于是引出想解决的问题这次版本新增/修改的代码,都有测试覆盖到吗?上线前的回归,怎样弄清楚测试范围?精准测试的目标降低测试成本:根据代码变更定位测试范围。 阅读详情

相关推荐

基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34015336的博客 1410

基于jacoco+ant+tomcat生成代码覆盖率报告

基于jacoco+ant+tomcat生成代码覆盖率报告废话少说,直接上干货1、关于项目代码2、关于工具及jar包生成3、环境配置4、修改配置参数5、命令行启动项目6、获取覆盖率报告 最近着手研究代码覆盖率落地的项目,把自己的经历记录下来供大家参考,也欢迎有想法的互相交流。覆盖率报告支持服务停止、重启累加记录,不会因为项目部署而导致历史覆盖率报告清空。但切忌清空report下的文件,会导致历史覆盖率报告丢失~ 废话少说,直接上干货 1、关于项目代码:着手研究的项目系前后端分离,所以需要分别获取到能成功启动的

qq_35195359的博客 1078

TestOps 详解

TestOps的目的是促进测试人员和开发人员、运营人员、IT项目管理人员之间密切互动的方法论。在谈论TestOps是什么的时候,我们可以看到在TestOps的文化和模型中,它扩展了测试自动化工程师的角色,新的职责是建立和维护自动化测试环境。这个定义意味着要执行自动化测试,工程师在Docker中打包测试,启动要测试的软件,运行测试,收集结果,并提供报告;通过强制性负载和可靠性测试扩展软件测试类型,扩大测试人员的工作范围,包括在测试环境和生产中监控所有系统的责任;

悦分享 1206

linux下调用jacoco生成报告,Jenkins使用jacoco插件检测代码覆盖率

代码覆盖率:类覆盖,方法覆盖,行覆盖,指令覆盖……(简而言之,就是判断有没有被执行)覆盖率 = 已经执行的代码 / 总代码(1)创建maven项目,配置pom.xml如下pom.xmlxsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">4.0.0c...

weixin_39688687的博客 825

jacoco-0.8.8.zip

本资源用于检验接口自动化用例的代码覆盖率

基于Jacoco的代码覆盖率实时监控与精准测试实践-QECon深圳站2021年全球软件质量&效能大会.pdf

基于Jacoco的代码覆盖率实时监控与精准测试实践-QECon深圳站2021年全球软件质量&效能大会

idea怎么使用jacoco生成报告_基于 jacoco 的功能测试代码覆盖率实践

1.基于 jacoco 的功能测试代码覆盖率实践1.1 目前主流代码覆盖率统计工具考虑到方案实施的难度很大取决于工具是否仍保持维护更新,所以选择 jacoco 来进行实践。Jacoco 是一个开源的覆盖率工具。Jacoco 可以嵌入到 Ant 、Maven 中,并提供了 EclEmma Eclipse 插件,也可以使用 Java Agent 技术监控 Java 程序。很多第三方的工具提供了对 Ja...

weixin_36095188的博客 2123

PostgreSQL隐式类型转换全解析:告别operator does not exist

强类型数据库是现代数据系统的基石,它在带来严谨性的同时,也常常让开发者在类型不匹配报错前束手无策。当一条SQL因bigint与text比较而抛出operator does not exist时,根源往往在于对数据库隐式转换规则的误解。PostgreSQL通过pg_cast系统表将转换划分为隐式、赋值与显式三个级别,并依据操作符解析逻辑决定是否自动提升类型。理解这些机制,不仅能快速定位JOIN、UNION、函数调用等场景下的类型错误,还能帮助开发者合理使用EXPLAIN VERBOSE、pg_typeof等工

weixin_29587015的博客 307

生成jacoco报告_基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

使用 JaCoCo 统计功能测试代码覆盖率?对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当代码 push 到代码仓库后,用 JaCoCo 进行单元测试代码覆盖率统计,并将相应数据推送到 SonarQube。 "不是很熟"指的是应用场景也仅限于此,并未进行过多研究与实践。前不久,有测试同事提出,想要在实...

weixin_39692172的博客 1009

<Verilog实现除法器> Verilog实现牛顿-拉夫逊(Newton-Raphson)除法器

阿斯顿阿斯顿啊啊是打发士大夫

IC跳跳鱼的博客 3586

RTKLIB PPP与RTK_POST精密定位实战:从实时到事后处理的完整流程解析

本文详细解析了如何使用RTKLIB进行精密单点定位(PPP)的完整流程,涵盖从实时处理到事后处理(RTK_POST)的关键步骤。文章深入探讨了数据准备、软件配置、核心参数设置(如电离层、对流层、潮汐改正)以及常见问题排查,旨在帮助用户掌握高精度GNSS定位技术,实现从入门到精通的实战应用。

weixin_29047919的博客 282

java代码怎么动态修改xml配置文件内容_基于 jacoco 的功能测试代码覆盖率实践

1. 基于 jacoco 的功能测试代码覆盖率实践1.1 目前主流代码覆盖率统计工具考虑到方案实施的难度很大取决于工具是否仍保持维护更新,所以选择 jacoco 来进行实践。Jacoco 是一个开源的覆盖率工具。Jacoco 可以嵌入到 Ant 、Maven 中,并提供了 EclEmma Eclipse 插件,也可以使用 Java Agent 技术监控 Java 程序。很多第三方的...

weixin_39564524的博客 633

风力发电机缺陷检测平台

风力发电机缺陷检测平台相关内容展示

weixin_39779415的博客 1111

world 统计字数代码实现原理_基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

本文首发于:Jenkins 中文社区https://jenkins-zh.cn/wechat/articles/2019/05/2019-05-22-jacoco-coverage-for-functional-test/使用 JaCoCo 统计功能测试代码覆盖率?对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当...

weixin_39634576的博客 460

基于任务的后勤智能体:三段构建与演进设计探究

这是系统智能化的核心难点。例如,对于一个“加强连级滩头阵地防御”子任务,系统会根据防御时长、预期敌军攻击强度、地形等因素,计算出所需的弹药(不同弹种的具体数量)、构筑工事的器材、人员的给养和饮水量、以及医疗救护的药品和血包数量。首先进行分词、词性标注等基础处理,然后利用在军事语料库上训练的命名实体识别(NER)模型,提取出关键实体,如任务类型(“夺控作战”)、作战对象(“Y岛”)、时间约束(“D日H时”、“24小时内”)、成功标准(“建立稳固滩头阵地”)、保障重点(“弹药充足”、“及时救治”)等。

weixin_49042442的博客 1088

利用Arcgis提取nc数据并计算区域年均温

1.下载数据。2.解压数据至不含中文的路径中。打开工具箱中的多维分析工具-创建NetCDF栅格图层,导入数据。3.打开工具箱中的数据管理工具-图层和表视图-创建栅格图层,导入数据,对输出数据进行命名,得到月均温栅格数据。4.选择工具箱-Spatial Analyst工具(空间分析工具)-地图代数-栅格计算器,计算全国一年年均温。​5.将其导出为.tif格式数据,方便后期使用。6.选择工具箱-Spatial Analyst工具(空间分析工具)-区域分析--以表格显示分区统计,得到分区域的气温数据。

什么都学亿点点的博客 7995

java代码统计工具_基于 Jenkins + JaCoCo 实现功能测试代码覆盖率统计

使用 JaCoCo 统计功能测试代码覆盖率?对于 JaCoCo,有所了解但又不是很熟悉。 "有所了解"指的是在 CI 实践中已经使用 JaCoCo 对单元测试代码覆盖率统计: 当代码 push 到代码仓库后,用 JaCoCo 进行单元测试代码覆盖率统计,并将相应数据推送到 SonarQube。 "不是很熟"指的是应用场景也仅限于此,并未进行过多研究与实践。前不久,有测试同事提出,想要在实...

weixin_39881575的博客 497

libVLC 视频抓图

libVLC 中通过libvlc_video_take_snapshot核心接口来截图。以下是VLC播放器中使用的截图界面,我们仿照这个做一个界面。首先,你需要初始化 libVLC 实例和媒体播放器对象。1. 初始化 libVLC 和媒体播放器。菜单添加action,并响应槽函数。生成目录下snap.png。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 1944

代码覆盖率原理简介

随着项目迭代的不断深入,工程逻辑与用户场景日益复杂,传统的白盒测试体系已经无法适应苛刻的工程质量要求,质量评估也不再单纯的依赖bug率和性能指标,而需要精准的数据来量化代码质量,代码覆盖率就是其中的一项重要标准。 代码覆盖率简述 什么是代码覆盖率 代码覆盖率测试技术是一种常见的白盒测试技术,是衡量软件测试工作充分性和完整性的重要指标之一。 简单来说,代码覆盖率就是测试过程中已经被执行过的代码占准备测试总代码量的比例和程度,它关注的是在执行用例时,有哪些代码被执行到了,有...

那一年漫天雪的博客 8244

Windows 11 安装 Miniconda + Mamba,配置国内源

本文详细介绍了在 Windows 11 系统下安装 Miniconda 并配置 Mamba 的完整流程,包括选择精简版 Miniconda 的理由、安装过程中的关键选项设置、配置清华大学镜像源以加速包下载,以及在 base 环境中设置 pip 国内源。同时说明了 Mamba 相较 Conda 的性能优势,并指导用户完成 Mamba 安装与 Shell 集成,最终通过命令验证环境管理功能,帮助用户构建高效、轻量的 Python 开发环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 3347

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java单元测试(Junit+Mock+代码覆盖率)

Java单元测试(Junit+Mock+代码覆盖率) 单元测试是编写测试代码,用来检测特定的、明确的、细颗粒的功能。单元测试并不一定保证程序功能是正确的,更不保证整体业务是准备的。 单元测试不仅仅用来保证当前代码的正确性,更重要的是用来保证代码修复、改进或重构之后的正确性。 一般来说,单元测试任务包括 接口功能测试:用来保证接口功能的正确性。局部数据结构测试(不常用):用来保证

music0ant的专栏 1080

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

代码覆盖率100%不代表质量好:测试KPI如何设计才能真正保障产品质量

代码覆盖率是软件测试中衡量代码执行程度的常用指标,常被团队视为质量保障的“金标准”。然而,行覆盖率、分支覆盖率等不同统计口径的含义差异巨大,覆盖率100%并不等于行为被正确验证,更不等于产品安全。当覆盖率被异化为考核KPI时,团队往往通过无断言测试、排除困难模块、调整统计配置等方式“刷数据”,导致数字漂亮而线上事故频发。真正有效的测试KPI应当摆脱对单一覆盖率的迷信,转向线上缺陷逃逸率、有效缺陷率、探索性测试等结果与过程结合的指标体系,并利用Jacoco、pytest-cov等工具实现质量门禁。本文从覆盖率

weixin_28828243的博客 286

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

功能测试如何获得代码覆盖率?大佬解释得太详细了

如代码里展示的,我这里原始的入口类是com.tachibana.downloader.ui.main.MainActivity,我们继承这个Activity,并实现了一个generateCoverageReport方法,用来记录JaCoCo的数据,在这个Activity退出的时候,调用方法记录,实现覆盖率数据获取的功能。解决方案,继承一切真实入口类可以被继承的属性,比如theme什么的,这样在FakeActivity实例化加载资源的时候,可以避免出现资源申请失败的问题,防止出现应用启动闪退的现象。

测试萌萌 855
上一篇: 多partition下无法保障消息的顺序性
下一篇: inux下的zookeeper启动
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值