首页
学习
活动
专区
工具
TVP
发布

JAVA代码覆盖率工具 JaCoCo -踩坑篇

此种情况 排除 (2) 会不会签名文件有问题? 此种情况 排除 (3) JaCoCo 的jar包重新签名 和RDM打包,也就增加了 JaCoCo 部分,会不会是 JaCoCo 的两个jar包jacocoagent.jar和jacocoagent.jar出的问题? 结果问题仍然存在,此种情况 排除 (2) 那我们就回到第一个错误, Class resolved by unexpected DEX Agent出了两个地址。 (2) 如果1没有错误,那就要看看你的源码和 class 文件路径指定正确没, JaCoCo 是按照包名去搜索的,这个一定要确定好,很多项目会自建代码目录的。 二、覆盖率 一些 需要注意的地方 由于Android不能通过JVM停止后自动dump覆盖率数据,因此当Android应用进程不存在或停止的时候,覆盖率数据不会生成。

6.1K 6 0

jacoco 测试覆盖率过滤非业务类

之前在做接口测试代码覆盖率( jacoco )方案的时候,漏了 一些 东西,这篇文章补一下。 这里就引入了如何过滤 jacoco 代码覆盖率测试报告的问题,经过查阅资料,大概的方案分两种:一是在 jacoco 配置中过滤,二是在 class 文件夹中删除掉无用的 class 文件。 经过 一些 考量,决定采用第一种方案,原因如下: 第二种方案不可逆,如果在统计完某一个moudel的覆盖率,之后在统计其他moudel的时候就无法直接实现; 第二种处理起来比较麻烦,规则需要脚本实现。 --report任务: 根据前面配置的源代码路径和. class 文件路径, 根据dump后,生成的.exec文件,生成最终的html覆盖率报告。 :report> </target> <target name="all" /> </project> 主要在exclude这个标签里面过滤,如果大块 排除 ,也可以在指定classfilepath

2.2K 1 0
  • 广告
    关闭

    【玩转 GPU】有奖征文

    精美礼品等你拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    mock测试及 jacoco 覆盖率

    可以借助 一些 mock测试工具来解决这个难题(比如下面要讲的mockito),废话不多说,直奔主题: 一、准备示例Demo 假设有一个订单系统,用户可以创建订单,同时下单后要检测用户余额(如果余额不足,提醒用户充值 2.2 引入 jacoco 插件 1 <plugin> 2 <groupId>org. jacoco </groupId> 3 <artifactId> jacoco -maven-plugin 讲一个小技巧:有些类,比如DAO/Mytatis层自动生成的DO/Entity,还有 一些 常量定义等,其实没什么测试的必要,可以 排除 掉,这样不仅可以提高测试的覆盖率,还能让我们更关注于核心业务类的测试。 排除 的方法很简单,可 jacoco 插件里配置exclude规则即可,参考下面这样: <configuration> <dataFile>target/ jacoco .exec</dataFile> </excludes> </configuration> 这样就把aspect包下的所有类,以及SampleApplication. class 这个特定类给 排除 在单元测试之外,此时再跑一下mvn package

    1.7K 2 0

    Lombok有毒慎用?会导致覆盖率崩塌?

    两种选择都没有意义,也都不可取,于是马上就有人想到了第三种方法 3 手工 排除 Bean 无论是 Jacoco 还是Sonar,都提供了exclude的方式,通过配置项来指定统计时 排除 某些特定的包或者类。 如对于 Jacoco 可以在 jacoco -maven-plugin的<configuration>中有如下配置,用于 排除 指定的内容。 通过这个方式,也可以在数据源头上进行 排除 。 类似的,还可以通过基于 jacoco 覆盖率报告来自研解析工具,进行覆盖率或者增量覆盖率计算。这个过程中,也可以指定需要 排除 的包或者类,实现类似的做法。 当然,这种方式也需要项目有 一些 项目结构和命名上的约定,以保证过滤的正确。另外,既然放开了过滤的条件,有可能会让人钻空子。 5 使用lombok.addLombokGeneratedAnnotation 其实从 Jacoco 0.8.0开始,其实就具备了可以将lobmok生成的代码从 Jacoco 报告中 排除 的能力。

    3.7K 1 0

    教你使用 Jacoco 统计服务端代码覆盖率

    接着,配置 Jacoco 插件及相关的 goal,使用 includes 和 excludes 两个关键字设定包含或 排除 的类路径 比如:这里只统计 com.xingag.api.service 下面的类 首先,编写一段简单的被测代码,根据考试成绩返回不同的结果 //ScoreServiceImpl.java package com.xingag.api.service; //被测代码 public class 成绩格式不正确"; return result; 然后,在 test 测试文件夹内,编写测试类和单元测试方法 @RunWith(SpringRunner. class ) 、@SpringBootTest 用于注解测试类,表明当前类作为一个测试类处理 //ScoreTests //测试类 @RunWith(SpringRunner. class ) @SpringBootTest public class ScoreTests { 接着,在测试类中以 Junit 的 @Test 注解定义 3 个单元测试方法 //ScoreTests.java //定义测试方法

    1.7K 1 0

    jacoco 关于Java代码覆盖率你不得不会的基操!

    0 前言 全是干货的技术殿堂 jacoco 是一个开源的覆盖率工具,通过插桩方式来记录代码执行轨迹. ant是构建工具,内置任务和可选任务组成的.Ant运行时需要一个XML文件(构建文件)。 配置jacocoagent参数,启动服务 生成 jacoco .exec ant 构建生成覆盖率报告 3 启动jcocoagent javaagent:javaagent是JDK 1.5以后引入的 那你得知道这有多坑了,最基本的配置是做不到的,我们还需要配置自己的 class 文件路径和源码路径! 注意要具体到 class 目录和 java 目录! 绿色的为行覆盖充分 红色的为未覆盖的行 红色菱形的为分支全部未覆盖 黄色菱形的为分支部分覆盖 绿色菱形为分支完全覆盖 6 测试报告过滤 方案分两种 在 jacoco 配置中过滤 在 class 文件夹中删除掉无用的 主要在exclude这个标签里面过滤,如果大块 排除 ,也可以在指定classfilepath的时候过滤。

    806 3 1

    增量代码覆盖率工具

    Loader 装载一个 class 前判断是否需要注入 class 文件,将统计代码插入 class ,测试覆盖率分析就可以在 JVM 执行测试的过程中完成。 (图片来源 官网 ) 我们设计的方案也是基于 JaCoCo 做相应改造,生成我们所需要的覆盖率模型,并通过 JaCoCo 开放的 API 实现相关功能。 对 JaCoCo 的改造 在讲具体实现步骤之前,先谈下我们对 JaCoCo 做的改造思路。 在这一步的主要流程是获取基线提交与被测提交之间的差异代码,然后过滤 一些 需要 排除 的文件(比如非 Java 文件、测试文件等等),对剩余文件进行解析,将变更代码解析到方法纬度,部分代码片段如下: private 开放的 API 和改造后的 JaCoCo 来实现的,根据前两步获取到的 class 和差异方法信息,用改造后的 JaCoCo 去解析 exec 文件,使它按照我们的覆盖率模型,只生成增量代码部分的覆盖率报告

    1.5K 1 0

    JaCoCo 增量覆盖率的基本实现原理

    装载一个 class 前判断是否需要注入 class 文件,将统计代码插入 class ,覆盖率分析就可以在JVM执行的过程中完成。 /report 第1个参数: jacoco .exec文件路径; 第2个参数: class 文件路径; 第3个参数:src源码路径; 第4个参数:报告存放地址; JaCoCo 也提供了OpenApi来生成报告。 JaCoCo 默认只能分析全量覆盖率。 改造 JaCoCo 支持增量 改造的底层逻辑是,在分析覆盖率数据时, class 文件只选取git diff的文件,从而只统计差异的增量代码,实现增量覆盖率。 应用重启会丢失覆盖率数据,可以做 一些 备份。 ://tech.youzan.com/thanos/ Java覆盖率 Jacoco 插桩的不同形式总结和踩坑记录 https://testerhome.com/topics/20632 jacoco 代码覆盖率使用中遇到的 一些

    500 1 1

    java代码覆盖工具 Jacoco

    什么是 Jacoco Jacoco 是一个开源的覆盖率工具。 官网地址:http://www.eclemma.org/ jacoco / Jacoco 集成方式 Jacoco 团队提供了如下的 一些 集成工具的支持: Java API http://www.eclemma.org On-the-fly 方式无须入侵应用启动脚本,只需在 JVM 中通过 -javaagent 参数指定 jar 文件启动 Instrumentation 的代理程序,代理程序在通过 Class Loader 装载一个 class 前判断是否需要注入 class 文件,将统计代码插入 class ,测试覆盖率分析就可以在 JVM 执行测试的过程中完成。 Path to exec files :代码覆盖率统计文件位置; Path to class directorie:classes文件位置; Path to source directories:源码文件位置

    1.2K 1 0

    ant+ Jacoco 统计tomcat远程部署后项目接口自动化测试或者功能测试代码覆盖率

    1.安装ant 环境,https://ant.apache.org/bindownload.cgi 2.下载 jacoco 包 https://www.eclemma.org/ jacoco / ,解压后,复制 <project name="plate_id_sample_service" xmlns: jacoco ="antlib:org. jacoco .ant"> <taskdef uri="antlib :org.<em>jacoco</em>.ant" resource="org/<em>jacoco</em>/ant/antlib.xml"> <classpath path= "F:\apache-tomcat-8.5.29\bin --.<em>class</em>文件路径, 可以放在客户端--> <fileset dir="F:\apache-tomcat-8.5.29\webapps\plan\WEB-INF\classes"/> </classfiles 对我们的接口测试工作,或者手工测试提供 一些 参考的价值。 这是我手工测试10分钟的覆盖率,看了下里面,很多分支或者代码可能覆盖不到,需要和自动化测试相结合。 ?

    499 2 0

    从精准化测试看ASM在Android中的强势插入- JaCoco 初探

    /build/intermediates/javac/xxxxx', excludes: ['**/R*. class '])) sourceDirectories.setFrom out.write((byte[]) agent.getClass().getMethod("getExecutionData", boolean. class ) .invoke JaCoco 对代码的修改主要体现在下面几个地方: 在 Class 中增加 jacocoInit方法 在Method中增加了$jacocoInit数字并初始化 增加了对数组的修改 当然,这只是 JaCoco ❝当然,借助 JaCoco 还能玩 一些 骚操作,比如发到线上,实时统计代码中有哪些代码从未执行过,用于发现潜在的垃圾代码。 探针插桩策略 JaCoco 的核心逻辑就是要决定,到底在哪插入探针代码。 官网文档上对插桩策略写的比较清楚,涉及到字节码的 一些 原理,所以这里就不深入讲解了,感兴趣的朋友可以通过下面的链接查看。

    887 3 0

    只懂黑盒测试也能学会的代码覆盖率及精准化测试

    简单说下原理,java 源代码会被 javac 编译为 class 文件, class 文件保存了 class 的基本信息与 jvm 的指令集。 java 的底层 runtime,也就是 jvm 在解析 class 的时候,会把文件格式的 class 读取到内存并运行。 要修改最底层的 jvm 字节码往往是比较麻烦的,需要精通 jvm 的各种指令以及 java class 结构。这方面的处理目前已有有非常成熟的开源项目可以做大了,如下就是 一些 知名的字节码修改工具。 其他工具是它之上的 一些 高级封装。借助于这些工具与 JVM 自身的 一些 调试特性,我们就可以对 jvm 代码或者进程进行便捷的操纵了。 首先需要在你的被测 java 程序启动的时候,加入 jvm 的 一些 javaagent 参数。

    558 2 0

    简单两步实现 Jacoco +Android 代码覆盖率的接入!(最新最全版)

    模式: JVM中通过-javaagent参数指定特定的jar文件启动Instrumentation的代理程序,代理程序在通过 Class Loader装载一个 class 前判断是否需要转换修改 class 文件 Offline模式: 在测试前先对文件进行插桩,然后生成插过桩的 class 或jar包,测试插过桩的 class 和jar包后,会生成动态覆盖信息到文件,最后统一对覆盖信息进行处理,并生成报告。 即便用例写的再怎么详细,也经常会有漏测的发生,这里一方面是因为现在大量互联网公司采用外包资源来做业务测试,而外包的工作质量无法有效评估,可能存在漏执行的情况,另外一方面是本身测试用例设计的不够完善导致没有覆盖到 一些 关键路径的代码分支 配置文件中的源码路径和 class 文件路径即可。 '**/*$ModuleAdapter. class ', '**/*$ViewInjector*. class ' ])

    3.3K 2 0

    手把手教你用 JaCoCo 生成单测覆盖率报告!

    version> <scope>test</scope> </dependency> 接着写一个计算器类,用于演示单测覆盖率,如下代码所示: package tech.shuyi; public class test.groovy.tech.shuyi 目录写一个 Groovy 单测,如下代码所示: package tech.shuyi import spock.lang.Specification class 在这里,我们要引入对应的两个插件,并做 一些 简单地配置。 首先,在 pom.xml 文件引入 Surefire 插件配置,如下代码所示: 可以看到 surefire-report 插件生成的 HTML 报告还是比较简陋的,跟 JaCoCo 插件生成的相比,显然后者更加可视化 一些 。 关于 Surefire 的 一些 配置不错!

    400 3 0

    JDK8升级JDK11过程记录

    /source> <target>11</target> </configuration> </plugin> 4、依赖升级 (1)额外依赖的的jar包 Java11中将 一些 包从标准 -- jdk11 jaxb模块引用 end --> (2)项目中可能用到的jar包 Lombok: 首先把现在项目中所有的lombok依赖 排除 掉,通过Idea Maven Helper插件搜索: 升级到最新版本,最低要求0.8.0 如果是用mavan plugin方式引入,修改pom.xml文件: <plugin> <dependency> <groupId>org. jacoco </groupId> <artifactId> jacoco -maven-plugin</artifactId> <version>0.8.6</version> </dependency> </plugin> 如果是javaagent方式引入,从官网下载最新的包:https://www.eclemma.org/ jacoco / 这里下载的是0.8.6.zip,解压开使用里面的

    1.5K 2 0