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

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

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

共收到 15 条回复 时间 点赞

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

独缺 回复

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

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

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

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

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

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

xiaote 回复

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

kell 回复

大佬,解决了没

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

xiaote 回复

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

独缺 回复

大佬,有例子么?

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

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

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

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