前言

jacoco是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以插桩到Ant、Maven中,可以使用其JavaAgent技术监控Java程序等。

那么本次主要使用对java代码进行覆盖率统计,比如A测试攻城狮在功能测试时/接口测试时,实际覆盖测试了多少java代码,可以作为一个评判。

jacoco官网地址:http://www.eclemma.org(有墙)

一、jacoco基本介绍

1、jacoco是根据控制流Type来采用不同的探针插桩策略的。(植入探针)

2、探针原理是字节码指令集插入到java方法中,程序执行后可以被记录,它不会改变原有代码的行为。

3、jacoco支持on-the-fly和offline的两种插桩模式。本次主要使用在java -jar xx.jar启动的时候加入参数(on-the-fly)

行覆盖率:度量被测程序的每行代码是否被执行,判断标准行中是否至少有一个指令被执行。

类覆盖率:度量计算class类文件是否被执行。

分支覆盖率:度量if和switch语句的分支覆盖情况,计算一个方法里面的总分支数,确定执行和不执行的 分支数量。

方法覆盖率:度量被测程序的方法执行情况,是否执行取决于方法中是否有至少一个指令被执行。

指令覆盖:计数单元是单个java二进制代码指令,指令覆盖率提供了代码是否被执行的信息,度量完全 独立源码格式。

圈复杂度:在(线性)组合中,计算在一个方法里面所有可能路径的最小数目,缺失的复杂度同样表示测 试案例没有完全覆盖到这个模块。

二、必备环境

本篇基于Windows下使用:

1、ant 环境

所有版本:https://downloads.apache.org/ant/binaries/

本篇直接点击此链接下载:https://downloads.apache.org/ant/binaries/apache-ant-1.9.15-bin.zip   下载后直接解压:

注意Windows后缀为.zip,如:apache-ant-1.9.15-bin.zip

设置环境变量:

①将bin、lib目录添加至环境变量中的系统变量path即可,如下图我的解压路径:

  1. D:\apache-ant-1.9.15\bin
  2. D:\apache-ant-1.9.15\lib

②cmd验证环境:

cmd输入:ant -v

如下图即可显示ant的版本为:1.9.15

2、jacoco

全部版本下载地址:https://repo1.maven.org/maven2/org/jacoco/jacoco/

可在我网盘中下载链接:https://pan.baidu.com/s/19evt3K1eo1y7GeeyggD5Hg 提取码:gsxl

强烈推荐clone git:https://github.com/git-gsxl/jacoco-demo.git

随你自己解压到哪个目录,

3、java.jar 与 build.xml 文件 

文件在网盘中下载链接:https://pan.baidu.com/s/19evt3K1eo1y7GeeyggD5Hg 提取码:gsxl

强烈推荐clone git:https://github.com/git-gsxl/jacoco-demo.git

4、配置build.xml文件

①配置 jacocoant.jar 文件路径;

②配置源码路径

③配置server_ip

④其它自行根据所需配置

三、启动 jar 服务

1、在 jar 包cmd下输入启动命令:java -javaagent:F:/jacoco-0.8.6/lib/jacocoagent.jar=includes=*,output=tcpserver,port=9999,address=127.0.0.1,append=true -jar demo-V1024.jar

通过javaagentJavaAgent会监听服务器端设置的TCP port,然后把收集到的信息(jacoco.exec)写入TCP connection,所以服务不需要关闭。

  1. C:\Users\Administrator\Desktop\jacoco-demo>java -javaagent:F:/jacoco-0.8.6/lib/jacocoagent.jar=includes=*,output=tcpserver,port=9999,address=127.0.0.1,append=true -jar demo-V1024.jar
  2.  
  3. . ____ _ __ _ _
  4. /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
  5. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  6. \\/ ___)| |_)| | | | | || (_| | ) ) ) )
  7. ' |____| .__|_| |_|_| |_\__, | / / / /
  8. =========|_|==============|___/=/_/_/_/
  9. :: Spring Boot :: (v2.3.4.RELEASE)
  10.  
  11. 2020-10-24 18:08:50.125 INFO 13264 --- [ main] c.s.j.jacocodemo.JacocodemoApplication : Starting JacocodemoApplication vV1024 on WIN-Q3LSDAOKUJ1 with PID 13264 (C:\Users\Administrator\Desktop\jacoco-demo\demo-V1024.jar started by Administrator in C:\Users\Administrator\Desktop\jacoco-demo)
  12. 2020-10-24 18:08:50.133 INFO 13264 --- [ main] c.s.j.jacocodemo.JacocodemoApplication : No active profile set, falling back to default profiles: default
  13. 2020-10-24 18:08:53.933 INFO 13264 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
  14. 2020-10-24 18:08:53.989 INFO 13264 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
  15. 2020-10-24 18:08:53.989 INFO 13264 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.38]
  16. 2020-10-24 18:08:54.195 INFO 13264 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
  17. 2020-10-24 18:08:54.222 INFO 13264 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3949 ms
  18. 2020-10-24 18:08:54.748 INFO 13264 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
  19. 2020-10-24 18:08:55.272 INFO 13264 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
  20. 2020-10-24 18:08:55.301 INFO 13264 --- [ main] c.s.j.jacocodemo.JacocodemoApplication : Started JacocodemoApplication in 6.268 seconds (JVM running for 7.3)

2、运行 ant 命令

在此之前我们在浏览器上访问我们的服务,ip+prot (既我已经访问了hello的方法,业务测试覆盖了hello方法)

①ant dump

  1. C:\Users\Administrator\Desktop\jacoco-demo>ant dump
  2. Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.0_151\lib\tools.jar
  3. Buildfile: C:\Users\Administrator\Desktop\jacoco-demo\build.xml
  4.  
  5. dump:
  6. [jacoco:dump] Connecting to /127.0.0.1:9999
  7. [jacoco:dump] Dumping execution data to C:\Users\Administrator\Desktop\jacoco-report\jacoco-integation.exec
  8.  
  9. BUILD SUCCESSFUL
  10. Total time: 0 seconds
  11.  
  12. C:\Users\Administrator\Desktop\jacoco-demo>

②ant report

  1. C:\Users\Administrator\Desktop\jacoco-demo>ant report
  2. Unable to locate tools.jar. Expected to find it in C:\Program Files\Java\jre1.8.0_151\lib\tools.jar
  3. Buildfile: C:\Users\Administrator\Desktop\jacoco-demo\build.xml
  4.  
  5. report:
  6. [mkdir] Created dir: C:\Users\Administrator\Desktop\jacoco-demo\jacoco-report
  7. [jacoco:report] Loading execution data file G:\5-ppl-study-java\jacoco-demo\target\coverage\jacoco-integation.exec
  8. [jacoco:report] Writing bundle 'Check Order related' with 2 classes
  9.  
  10. BUILD SUCCESSFUL
  11. Total time: 0 seconds

四、查看覆盖率报告

1、在jacoco-report目录下打开,index.html即可

2、点击进入 controller 查看详情

可以发现与我们上述所示的一致,只覆盖hello方法。剩下看你们了,去试试运行其它方法,再执行ant,再查看报告。

欢迎来大家QQ交流群一起学习:482713805

jacoco-1-java代码测试覆盖率之本地环境初体验的更多相关文章

  1. iOS 覆盖率检测原理与增量代码测试覆盖率工具实现

    背景 对苹果开发者而言,由于平台审核周期较长,客户端代码导致的线上问题影响时间往往比较久.如果在开发.测试阶段能够提前暴露问题,就有助于避免线上事故的发生.代码覆盖率检测正是帮助开发.测试同学提前发现 ...

  2. Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率

    测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的, ...

  3. LibSvm流程及java代码测试

    使用libSvm实现文本分类的基本过程,此文参考 使用libsvm实现文本分类 对前期数据准备及后续的分类测试进行了验证,同时对文中作者的分词组件修改成hanLP分词,对数字进行过滤,仅保留长度大于1 ...

  4. 20.fastDFS集群java代码测试

    1.工程结构   2.代码内容 FastdfsClientTest.java代码   package cn.itcast.fastdfs.cliennt; import java.io.File; i ...

  5. 解决java代码测试http协议505错误

    代码功能:通过java代码获取网页源代码: 所用工具:Myclipse8.5+tomcat6.0+浏览器 系统环境:windows xp旗舰版 火狐浏览器版本: IE浏览器版本: 测试http协议有错 ...

  6. Java高级特性1_流库_初体验

    Java高级特性流库_初体验 面对结果编程 在编程里, 有两种编程方式, 一种是面对过程编程, 一种是面对结果编程. 两者区别如下 面向过程编程 面向过程编程需要编程程序让程序依次执行得到自己想要的结 ...

  7. SonarQube学习(四)- 使用Jenkins集成JaCoCo和SonarQube检查代码测试覆盖率

    一.前言 我始终觉得学习这件事是自己的事,自己会了就是会了,无关于他人,但有点小伤感的是现在的阅读量开始走低. 二.准备 安装Jenkins,请移步<Docker学习(二)- Docker 安装 ...

  8. 统计代码测试覆盖率-Python

    衡量Unit Test(单元测试)是否充分, 覆盖率是一个必要指标, 是检验单元测试的重要依据, 这里针对python unittest 的单元测试覆盖率coverage进行分享. 来自官方的解释: ...

  9. Java API研究:获取本地环境所有网卡及每个网卡的所有网络配置

    一个网卡(不太标准,应该叫做一个网络接口,一个网卡是可以拥有多个网络接口的,如SoftAP)拥有一套网络配置:ip地址,子网掩码,网关,dns等等. 自java 1.6开始,提供了访问网络配置的一些接 ...

随机推荐

  1. Skywalking Php注册不上问题排查

    Skywalking是一款分布式追踪应用,具体介绍可以参考 skywalking. 最近公司的一个Php应用在Skywalking后台查不到数据了: 登录到某台服务器上发现注册不上,启动时就报错了: ...

  2. Vue环境搭建、创建与启动、案例

    vue环境搭建 """ 1) 安装node 官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/ 2) 安装cnpm npm install - ...

  3. awk的一些认识

    awk awk '{pattern + action}' {filenames} 当我们所指定的规则脚本过长的时候,我们可以使用-f的选项加上我们的脚本文件.再复杂点我们可以直接调用shell脚本,就 ...

  4. 你来讲讲AQS是什么吧?都是怎么用的?

    前言 在Java面试的时候,多线程相关的知识是躲不掉的,肯定会被问.我就被问到了AQS的知识,就直接了当的问,AQS知道是什么吧,来讲讲它是怎么实现的,以及哪些地方用到了它.当时自己确实没有讲好,所以 ...

  5. 为cmd中的命令添加别名,以解决java:错误: 编码 GBK 的不可映射字符 (0xAF)

    使用sublineText3编写了java代码,通过cmd javac编译 提示 错误:编码GBK的不可映射字符 解决方法 使用javac -encoding UTF-8 Person.java 结果 ...

  6. 手把手教你AspNetCore WebApi:增删改查

    前言 小明已经创建与运行了WebApi项目,了解项目结构有哪些组成,并学会了怎么发布到IIS.基础已经建好,从现在开始要真正实现待办事项的功能了. 新建表 CREATE TABLE [dbo].[To ...

  7. 达梦产品技术支持-DM8-数据库安装

    (该文档只适合个人环境搭建,未涉及到数据库的各种参数配置,未涉及到数据库规划,若需要企业环境搭建请咨询专业人员) 基于Windows的安装 windows下安装是图形化界面,与linux下的图形化界面 ...

  8. 扩展、接管MVC都不会,还会用Spring Boot?

    持续原创输出,点击上方蓝字关注我 目录 前言 Spring Boot 版本 如何扩展MVC? 如何自定义一个拦截器? 什么都不配置为什么依然能运行MVC相关的功能? 如何全面接管MVC?[不推荐] 为 ...

  9. linux 线程挂起恢复

    1 //============================================================================ 2 // Name : thread. ...

  10. 2014年 实验二 B2C网上购物

    实验二 B2C网上购物 [实验目的] ⑴.熟悉虚拟银行和网上支付的应用 ⑵.熟悉并掌握消费者B2C网上购物和商家的销售处理 [实验条件] ⑴.个人计算机一台 ⑵.计算机通过局域网形式接入互联网 (3) ...