问答 关于 jacoco 的 tcpclient 模式,如何获得服务器上的报告

xiaote · 2018年09月02日 · 最后由 EasilyTest 回复于 2020年05月22日 · 3776 次阅读

jacoco 的覆盖率获得有 file tcpserver tcpclient 三种模式。但是公司的服务器是 docker 动态分配的,有空闲的资源就把服务分布过去,所以服务器的 ip 不确定,不能用 tcpserver 和 file 模式。现在考虑用 tcpclient 的形式来获得,个人不太清楚这种模式下要如何拿到 jacoco.exec?是需要自己写一个 server 么?求各位大神不吝赐教啊!

共收到 15 条回复 时间 点赞

你用域名不就行了? 另外也可以改造下,反向推送出去。

就是因为运维说用域名不行才想到了用 tcpclient 的模式。想问下,改造是改的哪里?

我试了源码的 ExecutionDataServer 启动了 server,不过每次跑出来的结果都是空的。。

ip 动态没关系,你们有 cmdb 系统么?封装个根据应用取 IP 的接口就行了。

我记得用法是差不多的,只不过你需要先启动一个本地监听的服务器,jacoco 本身有提供,类名是 ExecutionDataServer.java,需要配置远程服务器地址和本地的监听端口。服务器上需要配置启动监听的服务器地址和端口。覆盖率数据会自动上传到你监听服务器设定的路径里,并生成 exec 文件。

独缺 回复

没错,这个我试过了,不过一开始 exec 文件一直只有头内容,我把服务器 jvm 停掉后就会触发钩子写进 exec 文件了。不知道是不是 client 这种模式也是要停 jvm 的,还是我哪里做的有问题?

tcpserver 设置动态覆盖率收集,手动调用 dump 出 exec 文件,可以不停 jvm。tcpclient 原理应该差不多吧,没试过。

xiaote 回复

试验了一下还真得不行,不知楼主解决了没

kell 回复

大佬,解决了没

是需要停服务的,不然数据不上传

xiaote 回复

你 的 ExecutionDataServer 从哪查找到的 能方便告知下吗

独缺 回复

大佬,有例子么?

我也是同样的问题,应用容器化部署了~用的 tcpsever 模式启动后会有两个不同的 pid,导致覆盖率统计都是 0

容器中使用 0.0.0.0 这个 ip 进行绑定。就可以实际获取的容器 node 的 ip

填 0.0.0.0 然后通过实际容器 ip 就可以访问到

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册