20 Star 190 Fork 82

idea / Iubbox Dubbo可视化测试工具

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

不知道你是否在工作中有遇到过类似情况:
dubbo接口调试复杂,需要通过telnet命令或者通过consumer调用来触发。 telnet语句参数格式复杂,每次编写都要小心谨慎,一旦出错又需重来。 复杂对象参数传参调用接口复杂,编写java api调用接口时间成本较高。
上述这些坑我在工作中都有遇见过,发现大部分耗时都会卡在调用dubbo服务做自测的阶段,所以后来花费了写业余时间写了一款高效的dubbo测试工具开源给大家使用。 这款工具目前已在实际工作中应用1年多,基本功能已经成熟,后续依旧会进行版本维护。 相关的代码地址为:
https://gitee.com/IdeaHome_admin/dubbo-proxy-tools ps: 如果大家喜欢,希望能给出一颗宝贵的star

2.0.3-release版本

下边部分是针对于2.0.3-release版本进行迭代之后的使用说明文档,2.0.3-release版本开始支持对于dubbo请求方法所携带参数做自动填充功能,细节点看application.properties配置项。

关于如何部署本工具


新版本的代码结构去除了原先的前后端分离,采用前后端合并的思路进行整合,减轻使用者的部署成本。

前端代码的部署

前端采用非常简单的vue技术,只需要调整js目录下方的constants.js文件中的server_addr变量即可改变请求地址。 默认的请求地址为:

let server_addr="http://127.0.0.1:7090/";

后端代码的部署

后端工程采用了springboot框架技术,核心的配置放在了application.properties里面,调整为对应mysql配置即可

server.port=7090
application.invoker.name=iubbo-invoker-proxy

spring.datasource.druid.password=password
spring.datasource.druid.username=root
spring.datasource.druid.url=jdbc:mysql://10.11.9.243:3306/iubbox
spring.datasource.druid.driver-class-name=com.mysql.jdbc.Driver

mybatis-plus.configuration.map-underscore-to-camel-case=true

spring.redis.port=6379
spring.redis.host=localhost
spring.redis.password=password

#dubbo服务注册在zk的根节点

zk.dubbo.root=/dubbo
#如果zk的方法位置有调整,修改这里即可 
zk.dubbo.method.root=/dubbo/%s/providers
#采用zk注册中心的时候,dubbo的参数注册在这个地址上
zk.meta.data.addr=/dubbo/metadata/%s
zookeeper.base.sleep.times=3000
zookeeper.max.retry.times=4

register.connect.timeout=8000

然后导入建表的sql:

CREATE TABLE `t_dubbo_invoke_req_record` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  `arg_json` varchar(2500) COLLATE utf8_bin DEFAULT NULL COMMENT 'dubbo请求参数',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8mb4;


CREATE TABLE `t_user` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `username` varchar(60) COLLATE utf8_bin DEFAULT NULL,
  `password` varchar(30) COLLATE utf8_bin DEFAULT NULL,
  `createTime` datetime DEFAULT CURRENT_TIMESTAMP,
  `updateTime` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8mb4;

CREATE TABLE `t_register_config` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `host` varchar(255) DEFAULT NULL COMMENT 'host地址',
  `ip` varchar(60) DEFAULT NULL COMMENT '注册中心真实ip',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `type` smallint(2) DEFAULT NULL COMMENT '注册中心类型:1 zk,2 nacos',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;


CREATE TABLE `t_login_status` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(9) DEFAULT NULL COMMENT '用户id',
  `user_token` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '用户token',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_user_token` (`user_token`) USING HASH
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

t_user 用于记录相关的用户账号,方便于保存用户账号信息。

t_dubbo_invoke_req_record 用于记录请求dubbo接口的用例信息。

t_register_config 用于记录注册中心的配置信息。

t_login_status 用于记录登录态相关信息。

最后就是启动入口类org.iubbo.proxy.IubboXInvokerApplication

启动成功截图 在这里插入图片描述

关于本工具的使用教程

本工具区分了已登录账号和未登录账号两类角色,已登录账号的使用者可以对请求的用例进行保存,方便下一次提取信息,未登录账号虽然没有保存用例的功能,但是不影响其使用本工具进行测试。

首页地址: http://localhost:7090/html/test-dubbo-web.html 或者访问: http://localhost:7090/html/index.html

首页截图: 在这里插入图片描述 ps:2.0.0版本对颜色做了一些细微调整,如果觉得绿色太丑,可以在代码里面进行调整

指定zk注册地址

2.0.0版本中将注册中心的配置抽离为通过MySQL进行管理: 只需要在t_register_config表里面加入一行记录即可看到相关信息: 在这里插入图片描述

在测试dubbo接口之前,我们通常都会去拉取一遍zk上边的service地址,操作如下图: 先在文本框点击,输入和js配置有关的字母或数字会有模糊匹配的选项供各位选择: 在这里插入图片描述

选中了zk地址之后,再去点击拉取zk地址按钮(以前有同事刚接触这个工具的时候,这里被绕蒙了~~)

拉取zk地址的时候,后端会根据文章上边提到的js配置里面的ip值去请求服务器拉取zk的url信息,拉取成功会有相关提示: 在这里插入图片描述

接下来便是筛选dubbo服务地址的功能,在拉取zk地址下方有一个下拉框,这里面此时应当会被注入zk上所有dubbo服务列表的名称。 在这里插入图片描述

选择对于的service名称,然后在右边的“请输入名称”文本框中输入该接口对应的方法名称(一定要名称对应) 例如测试该方法:

public interface DubboService {

    /**
     * 测试接口功能
     *
     * @return
     */
    String doTest(String str);
}

然后配置相关的参数和名称: 选择对应参数类型和值: 在这里插入图片描述 选择参数之后需要点击一遍添加参数按钮,这样才能保证刚才设置的参数生效。

最后发起请求: 在这里插入图片描述

在基础参数配置项的旁边,还有一个模块是专门配置consumer端的额外内容,这些参数项都是在平时工作中可能会应用到的场景,需要的时候可以进行配置。这里面也配备了工作中非常常用的直连选项。

指定nacos注册地址

2.0.1版本中新增了nacos注册中心的兼容功能 输入图片说明 这里面支持基于namespace和group分组的dubbo查询功能

额外参数

个人最喜欢使用的还是直连功能,因为在开发过程中,经常需要直连机器做自测: 在这里插入图片描述

假如说希望保存自己曾经发送过的dubbo测试用例,那么你只需先进行登录账号,或者点击注册按钮重新注册账号即可: 在这里插入图片描述

在这里插入图片描述

保存请求用例

在这里插入图片描述

查看保存用例信息

用户手动刷新下页面才能显示保存的用例信息: 在这里插入图片描述 点击选用参数,则页面又会重新回显之前使用过的请求信息。

转让测试用例

点击转让测试用例按钮即可进行用户的转让 在这里插入图片描述

压力测试

支持对于dubbo接口进行压力测试的配置 在这里插入图片描述

请求详情分析

对于每次dubbo请求,都会有对应的参数请求信息,响应数据相关信息展示:

接口响应数据信息: 在这里插入图片描述 实际发送给dubbo服务端的各项参数指标信息: 在这里插入图片描述 请求耗时的各项指标数据 在这里插入图片描述

特殊参数请求

该工具支持多种开发中常见的参数格式调用,目前支持常规参数 ps:注意这里的参数格式需要和dubbo方法里面的参数格式按照相同顺序相同类型做映射,否则后端程序会返回找不到对应方法

Java的常用基本类型数据:boolean,short,int,long,double,char,float Java中常用的包装类数据:

java.lang.String,
java.lang.Integer,
java.lang.Object,
java.util.List,
java.lang.Class,
java.lang.Long,
java.lang.Boolean,
java.util.Map,
java.util.Date,
java.lang.Float,
java.lang.Double

对于简单的数据类型传递

图片: https://uploader.shimo.im/f/1MiAoLiD6zADpfVx.png 图片: https://uploader.shimo.im/f/s8WRZPpOOyIn7LWF.png 图片: https://uploader.shimo.im/f/aftGOrdiJK0fUkfs.png

多参数,中英文混合传递

图片

List类型参数的传递

图片

Class类型的参数传递

图片

Map类型的参数传递

图片

Date类型的参数传递

图片

自定义对象参数传参

如果在实际应用中遇到了这种场景,需要调用以下的接口,那么这个使用就需要使用自定义参数了:

图片

图片

图片

复杂类型自定义参数传递

假设遇到了List类型参数,而且传输的List里面包含有自定义对象,例如下边这种类型:

List<UserDTO> testUserDtoList(List<UserDTO> userDTOList,Class clazz);

那么此时的传参案例可以像下边这样来写: 图片

易错点归纳

注意请求的参数顺序要和方法对应的参数顺序一致,假设服务的方法定义如下:

<T> List<T> getList(List<Long> var1, Class<T> var2);

那么传入的参数就必须先填List参数,再写Class参数。 正确示例:(先写了List参数,再写Class参数) 错误示例:(先写了Class参数,再写List参数)

实际运行

目前该工具已经在自己公司运行一年左右,较为平稳,给团队的开发效率带来了极大地提升。希望本工具也能对各位有所帮助。


如果大家有需要对该工具后续进行迭代开发或者特殊定制的,可以私聊本人, wx: idea_000000。

使用过程中如果遇到什么问题或者有什么改善的建议欢迎加入下方微信群 输入图片说明

Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

简单易上手的Dubbo可视化调试工具,支持zookeeper,nacos注册中心的调用,自动补全请求参数功能,目前已在实际工作中正常运行两年多,免费开源给大家使用。 如果大家有需要对该工具后续进行迭代开发或者特殊定制的,可以私聊本人。 展开 收起
Java 等 4 种语言
Apache-2.0
取消

发行版 (1)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/IdeaHome_admin/dubbo-proxy-tools.git
git@gitee.com:IdeaHome_admin/dubbo-proxy-tools.git
IdeaHome_admin
dubbo-proxy-tools
Iubbox Dubbo可视化测试工具
2.0.3-release

搜索帮助