# OpenCobertura开展精准测试

# 介绍

OpenCobertura是在Cobertura的基础上改进而来的开源的Java覆盖率测试框架,于2024年11月22日正式发布。OpenCobertura主要有以下几个特点

  1. 易于使用,基于Agent进行插桩,可以快速开展精准测试
  2. 入侵小,OpenCobertrua采用最精简的算法进行插桩,对业务系统的代码侵入做到最小化
  3. 高性能,OpenCobertrua使用最小化探针算法,对业务系统的性能影响几乎可以忽略不计

# 插桩

使用Agent方式插桩

OpenCobertura目前只支持使用Agent的方式插桩,即在线插桩方式,离线插桩方式将在后续的版本中推出。

# 下载OpenCobertura

在官网或者Gitee上下载OpenCobertura的发行包,并解压到您的硬盘中。下面是OpenCobertura已经发行的清单列表:

OpenCobertura-0.1.zip

# 在业务系统中增加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的目录结构如下:

#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报告

# 测试阶段说明

# 功能测试阶段

OpenCobertura提供的Agent插桩方式目录适合用在功能测试阶段,单元测试阶段因为我们还没有开发maven插件和idea,eclipse插件,所以目前在单元测试阶段还不支持。

# 单元测试阶段

缺少maven插件和idea,eclipse插件,暂不支持。

# JDK版本支持

OpenCobertura还很年轻,目前可以支持JDK1.8,和1.8以上的版本,但目前只能对1.8的语法做覆盖率分析,更多的JDK高级版本中的语法支持将在后续的版本中陆续推出。

# FAQ

# 为什么服务器默认端口是0731

0731是长沙的区号

# 为什么默认构造方法会有一行代码

默认构造方法中会有一条super指令,故OpenCobertura计算了一行代码

# 分支是如何计算的

一个if语句中的一个条件算两个分支,两个条件算四个分支,依此类推

Last Updated: 11/23/2024, 3:10:29 PM