# OpenCobertura开展精准测试
# 介绍
OpenCobertura是在Cobertura的基础上改进而来的开源的Java覆盖率测试框架,于2024年11月22日正式发布。OpenCobertura主要有以下几个特点
- 易于使用,基于Agent进行插桩,可以快速开展精准测试
- 入侵小,OpenCobertrua采用最精简的算法进行插桩,对业务系统的代码侵入做到最小化
- 高性能,OpenCobertrua使用最小化探针算法,对业务系统的性能影响几乎可以忽略不计
# 插桩
使用Agent方式插桩
OpenCobertura目前只支持使用Agent的方式插桩,即在线插桩方式,离线插桩方式将在后续的版本中推出。
# 下载OpenCobertura
在官网或者Gitee上下载OpenCobertura的发行包,并解压到您的硬盘中。下面是OpenCobertura已经发行的清单列表:
# 在业务系统中增加agent参数
以Spring Boot项目为例,在启动命令行中增加-javaagent参数,示例如下
java %JAVA_OPTS% -javaagent:org.cobertura.agent-0.1.jar=includes=com.youfan.*:com.opentester.*,output=tcpserver,port=0731 -jar springbootdemo-1.0-SNAPSHOT.jar
为了简化您的操作,OpenCobertura提供了一个命令行示例程序,名称为startTest.bat批处理程序,您可以参考该批处理程序来修改您自己的启动命令。
在windows的环境中进行测试,建议将终端字符集设置为UTF-8编码,否则可能导致中文乱码,下面是一个完整的启动SpringBoot程序的批处理示例程序
@echo off
#设置终端字符集
chcp 65001
#设置Jar包的字符集
set JAVA_OPTS=-Dfile.encoding=UTF-8
#java启动命令
java %JAVA_OPTS% -javaagent:org.cobertura.agent-0.1.jar=includes=com.youfan.*:com.opentester.*,output=tcpserver,port=0731 -jar springbootdemo-1.0-SNAPSHOT.jar
启动业务系统进行测试:
#windows环境中
startTest.bat
#linux环境中
./startTest.sh
看到以下画面代表插桩成功:

接入来就可以在业务系统中开展测试了。
# 目录结构
OpenCobertura的目录结构如下:
#OpenCobertura解压目录结构
. 硬盘
├── OpenCoubertura-x.x
│ ├── createReport.bat
│ ├── org.cobertura.agent-x.x.jar
│ ├── org.cobertura.cli-x.x.jar
│ ├── org.cobertura.core-x.x.jar
│ ├── org.cobertura.report-x.x.jar
│ └── startTest.bat
createReport.bat: 生成报告的批处理命令。org.cobertura.agent-x.x.jar: 插桩用的agent。org.cobertura.cli-x.x.jar: 命令行处理程序。org.cobertura.core-x.x.jar: 核心包。org.cobertura.report-x.x.jar: 生成报告的包。startTest.bat: 启动测试程序的批处理程序示例
# 生成报告
OpenCobertura提供了基于命令行生成报告的方式,在OpenCobertura文件夹中找到createReport.bat命令,先修改-source源代码目录和-classes字节码目录参数,具体命令行如下:
java -Dfile.encoding=UTF-8 -jar org.cobertura.cli-0.1.jar -report -host localhost:0731 -source E:\beyondtesting-workspace\springbootdemo\springbootdemo-01\src -classes E:\beyondtesting-workspace\springbootdemo\springbootdemo-01\target\classes
-source源代码目录一般需要指向到src目录下 -classes字节码目录一般指向到target/classes下,这两个目录是maven工程的标准目录
#生成报告
createReport.bat
生成的报告和批处理命令在同一个文件夹之下,打开open-cobertura-report目录,双击index.html文件在浏览器器查看报告。

# 测试阶段说明
# 功能测试阶段
OpenCobertura提供的Agent插桩方式目录适合用在功能测试阶段,单元测试阶段因为我们还没有开发maven插件和idea,eclipse插件,所以目前在单元测试阶段还不支持。
# 单元测试阶段
缺少maven插件和idea,eclipse插件,暂不支持。
# JDK版本支持
OpenCobertura还很年轻,目前可以支持JDK1.8,和1.8以上的版本,但目前只能对1.8的语法做覆盖率分析,更多的JDK高级版本中的语法支持将在后续的版本中陆续推出。
# FAQ
# 为什么服务器默认端口是0731
0731是长沙的区号
# 为什么默认构造方法会有一行代码
默认构造方法中会有一条super指令,故OpenCobertura计算了一行代码
# 分支是如何计算的
一个if语句中的一个条件算两个分支,两个条件算四个分支,依此类推