运行时转储执行数据

7_R*_*R3X 5 code-coverage jacoco

我正在使用 JaCoCo 生成代码覆盖率报告,并且我有许多场景需要生成单独的报告。问题是该程序非常庞大,大约需要 2 分钟才能启动并加载所有类文件。

我想在其中一个场景完成后立即获取运行时的执行数据,然后开始下一个场景,而不是为每个场景重新启动服务器。

有办法这样做吗?

God*_*din 4

以下所有内容均摘自 JaCoCo 官方文档: http://www.jacoco.org/jacoco/trunk/doc/

http://www.jacoco.org/jacoco/trunk/doc/agent.html中描述的 Java 代理有选项output

  • file:VM 终止时,执行数据将写入 destfile 属性中指定的文件中。
  • tcpserver:代理侦听地址和端口属性指定的 TCP 端口上的传入连接。执行数据写入此 TCP 连接。
  • tcpclient:启动时,代理连接到地址和端口属性指定的 TCP 端口。执行数据写入此 TCP 连接。

和选项jmx

如果设置为 true,代理将通过 JMX公开功能

通过 JavaDoc 中描述的 JMX 功能公开,提供了以下三种方法:

byte[] getExecutionData(boolean reset) 返回当前执行数据。

void dump(boolean reset) 通过配置的输出触发当前执行数据的转储。

void reset() 重置所有覆盖范围信息。

再次从文档中还有 Ant Task dump- http://www.jacoco.org/jacoco/trunk/doc/ant.html

此任务允许从另一个 JVM 远程收集执行数据,而无需停止它。远程转储对于长时间运行的 Java 进程(如应用程序服务器)非常有用。

dump命令行界面中的命令 - http://www.jacoco.org/jacoco/trunk/doc/cli.html

dump目标jacoco-maven-plugin- http://www.jacoco.org/jacoco/trunk/doc/dump-mojo.html

API 使用示例包括:

  • MBeanClient.java 此示例连接到覆盖代理以通过 JMX 收集执行数据。
  • ExecutionDataClient.java 此示例连接到覆盖代理以通过远程协议收集执行数据。
  • ExecutionDataServer.java 此示例启动套接字服务器以通过远程协议从代理收集执行数据。