idea的Java类之间的跳转 idea怎么跳到实现类_idea的Java类之间的跳转


阿里妹导读: 相信大家对 HSF 控制台并不陌生,它是我们测试 HSF 接口的首选工具。对于使用频率这么高的工具,有没有办法提高它的效率呢?本文将分享如何从调试的环节中一步一步缩短测试时间并最终实现一个  IDEA  的 HSF 插件。 文末福利:21 组实战带你学习 Java 面向对象编程。 在我们日常工作中,调试工作占据了很大一部分工作。同时伴随着服务化的兴起,各个领域拆分建设,应用数量也是越来越多,项目调试难度也在逐渐增大。 在项目调试过程中,一般应用的调试内容无非由以下三部分组成:

idea的Java类之间的跳转 idea怎么跳到实现类_java超过多少秒跳过执行_02


这三部分调试中,RPC 大部分时候又占据了绝大部分。目前主流 RPC 产品为  DUBBO,阿里内部则使用 HSF。虽有所差异,不过核心思路基本一致。 今天作者就来说说我们是如何来做 RPC 调试的。 有人说 RPC 调试有什么好说的,很简单啊。调试是很简单,但做到高效的调试是不简单的。 因为日常使用 PRC 调试的频率很高,如果能大幅提高调试效率那对日常工作的帮助绝对杠杠的。 既然要提效,我们先来看看现在是怎么做 RPC 调试的吧。 一般一次 RPC 调试由以下 4 个部分组成:

idea的Java类之间的跳转 idea怎么跳到实现类_idea每次打开原来的项目怎么操作_03


我们先看下使用普通 HSF 控制台完成一次 RPC 调试需要的时间。 需要 9 个步骤大概 1 分钟时间 + 构造入参大概 2 分钟,总计 3 分钟:

idea的Java类之间的跳转 idea怎么跳到实现类_RPC_04


如果能将 3 分钟缩减为 5 秒钟。那么粗略估计每天使用 HSF 10 次,一年使用 3600 次,可以节省 3*10*360 = 10800 分钟 ,有利可图啊。 从上面的流程我们可以看到,用了很多的步骤去找到最终的调试入口。作者感觉这种方式效率太低了。 想到的第一个办法就是将 HSF 控台的集成到 IDEA 中,这样在开发过程中直接从 IDEA 中发起请求调用,可以节省不少步骤免得使用浏览器了。 基于以上的思考作者尝试开发了一个 HSF 的 IDEA 插件 demo。 初期使用效果

之前需要 9 步的操作,可以节省到 6 步了,作者大概计算了下,需要时间变为 30 秒操作时间 + 2 分钟参数构造时间,到此我们节省了大约 30 秒的时间。

idea的Java类之间的跳转 idea怎么跳到实现类_java超过多少秒跳过执行_05


这样将调试工具集成在 IDEA 中,可以方便的调出使用。快乐不少~ 基于以上 dem o 的功能,作者继续思考如何进一 步减少步骤。 发现我们每次都需要手动输入 appName 有点多余,能否根据当前用户自动加载出来呢? 原则上是可以的,只要拿到当前用户的登陆信息,然后基于用户信息,查找当前用户所负责的应用,就可以获取到用户的应用列表了。这样每次使用插件直接选择自己要调试的 RPC 应用不是很方便么。 经过作者四方探寻,获取到了用户的登陆信息,然后再通过 Aone 拉取用户 Owner 的 App 列表提供默认显示。 提供自动加载 appName 信息

路径:

idea的Java类之间的跳转 idea怎么跳到实现类_idea每次打开原来的项目怎么操作_06


使用效果:展示当前登录者信息,按照登录者获取到 Aone 中 Owner 应用清单。作者实验了下这个功能大概又节省了 3 秒钟。

idea的Java类之间的跳转 idea怎么跳到实现类_idea如何跳到某接口的实现类_07


完成这个功能后作者开始寻找进一步提效的方法。 我们来回顾下操作步骤:

  1. 选 appName
  2. 选接口
  3. 选方法
  4. 选目标环境
  5. 构造参数
  6. 发起调用


从 27 秒缩减到 10 秒。 其中 appName 信息,接口信息,方法信息其实在我们的 IDEA 中已经有的啊,能否根据我们当前 IDEA 打开的文件来自动匹配到我们的接口和方法呢? 自动匹配接口

作者又四方打探,灵机一现。可否在我们需要测试的 Interface 文件上发起请求呢。当前 class 中有 Interface 信息、方法信息。试试看。 使用 IDEA 插件支持读取当前文件内容信息。我们可以打开需要测试的 interface 或者 HSFProvider,选中要测试的方法。 路径:

idea的Java类之间的跳转 idea怎么跳到实现类_java超过多少秒跳过执行_08


代码展示:

/*** PsiClass 可以获取到当前文件信息 ,判断当前class是否接口* @param mainDialog* @param cls* @return*/private static boolean interfaceAutoLoad(MainDialog mainDialog, PsiClass cls) {          if (Objects.nonNull(cls) && cls.isInterface()) {                String interfaceName = cls.getQualifiedName();                  return loadInterface(mainDialog, interfaceName);              }              return false;    }


效果:把一次 HSF 请求的操作压缩到 5 步 ,作者实验了一下以下步骤只需要 5 秒就可以完成,加上参数构造 2 分钟 = 2 分钟 5 秒。

idea的Java类之间的跳转 idea怎么跳到实现类_java超过多少秒跳过执行_09


插件完成后请求小明来试用:

小明试用了一段时间说:“你这个操作已经很方便了,不过我们在 HSF 执行时有一个问题,每次都得重新构造参数,很是浪费时间,可不可以支持参数收藏?”

作者:“好想法,满足你。”


支持入参收藏

在原有基础上追加了 2 个功能:

  1. 支持参数设置别名收藏,以后可以继续使用
  2. 支持执行的历史记录查看


这样类似的 case 执行只需要加载历史记录,稍加修改参数就可以用啦。

idea的Java类之间的跳转 idea怎么跳到实现类_RPC_10


功能完善后又请小明来试用:

小明又发现了新的问题说:“你这个好用是好用,但是只支持日常,要是支持预发和线上环境就好了。我的场景需要使用相同的数据同时测试预发和线上接口。”

作者:“好想法,满足你。”


我们日常测试的时候经常需要线上线下环境切换,甚是麻烦。作者开始琢磨有没什么路径实现。

idea的Java类之间的跳转 idea怎么跳到实现类_idea如何跳到某接口的实现类_11


支持多环境

多环境的支持也非常重要,一般除了日常的调试,还有预发布环境和线上环境。如果能给使用者选择,不同环境预发调试也会变得很方便。 说干就干,因为各个环境是网络隔离的,需要到预发和线上分别部署机器,申请不同的域名,插件使用时给用户选择使用环境信息就可以了。 在插件端提供多环境选择,根据用户选择的环境,使用不同域名发起请求。实现支持多套环境。 实现效果:按照不同环境发起不同请求,支持多环境。

idea的Java类之间的跳转 idea怎么跳到实现类_idea的Java类之间的跳转_12


至此,基于 IDEA 插件开发的 RPC 工具已经完成了。从目前使用效果来说也很好,很多同学来询问及使用,目前短短 2 个月,已经有超过 500+ 应用接入使用,能效提升明显。


idea的Java类之间的跳转 idea怎么跳到实现类_idea每次打开原来的项目怎么操作_13