不知道你是否在工作中有遇到过类似情况:

  • dubbo接口调试复杂,需要通过telnet命令或者通过consumer调用来触发。

  • telnet语句参数格式复杂,每次编写都要小心谨慎,一旦出错又需重来。

  • 复杂对象参数传参调用接口复杂,编写java api调用接口时间成本较高。

上述这些坑我在工作中都有遇见过,发现大部分耗时都会卡在调用dubbo服务做自测的阶段,所以后来花费了写业余时间写了一款高效的dubbo测试工具开源给大家使用。

这款工具目前已在实际工作中应用半年多,基本功能已经成熟,后续依旧会进行版本维护。

相关的代码地址为:

https://gitee.com/IdeaHome_admin/dubbo-proxy-tools

ps: 如果大家喜欢,希望能给出一颗宝贵的star

关于如何部署本工具

下载了gitlab的代码之后,你会看到有两个文件包:iubbo-proxy和iubbo-proxy-web,它们分别正好对应了后端代码和前端代码。

前端代码的部署

前端采用非常简单的vue技术,只需要将文件部署到一台nginx上边即可运作。
前端的默认访问页面是test-dubbo-web.html。

但是有两个小点需要改动下js配置

constants.js

这份文件里面编写了对应的请求server地址,这块是对应了后端服务的url。

由于请求dubbo接口需要通过zk注册中心来拉去服务名列表,所以需要在iubbo.x.js里面的commonzk中做配置:

这里的host是一个别称,相当于一个key用于供前端展示,实际上传输给后端的是用ip这个值。

后端代码的部署

后端工程采用了springboot框架技术,核心的配置放在了application.properties里面:

server.port=7089
application.invoker.name=iubbo-invoker-proxy spring.datasource.druid.password=
spring.datasource.druid.username=
spring.datasource.druid.url=jdbc:mysql://127.0.0.1:3306/iubbox-proxy
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= 127.0.0.1

然后倒入建表的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 NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 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 NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
  • t_user 用于记录相关的用户账号,方便于保存用户账号信息。

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

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

启动成功截图

关于本工具的使用教程

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

首页截图:

1.指定zk地址

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

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

拉取zk地址的时候,后端会根据文章上边提到的js配置里面的ip值去拉取,拉取成功会有相关提示:

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

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

这里以调用MsgService的sendMsg方法为例:

然后配置相关的参数和名称

选择对应参数类型和值:

最后发起请求:

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

我个人最喜欢使用的还是直连功能,因为在开发过程中,经常需要直连机器做自测:

假如说希望保存自己曾经发送过的dubbo测试用例,那么你只需先进行登录账号,账号直接往t_user表里面写入一条数据即可:

在首页的右上方有个进入登录页面按钮:

点击登录

如何保存请求用例:

保存用例这里有些小瑕疵,需要用户手动刷新下页面才能显示保存的用例信息:

点击选用参数,则页面又会重新回显之前使用过的请求信息。

特殊参数请求

该工具支持多种开发中常见的参数格式调用,目前支持常规参数

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

对于简单的数据类型传递

多参数,中英文混合传递

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参数)

开源一款超实用的 Dubbo 测试工具,已用半年,感觉很有feel~的更多相关文章

  1. Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍

    一.http_load程序非常小,解压后也不到100Khttp_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把 ...

  2. 值得拥有!精心推荐几款超实用的 CSS 开发工具

    当你开发一个网站或 Web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文章中,我为大家收集了超有用的 CSS 开发工具. 对于 Web 开发人员来说,找到有用的 CSS 开发工 ...

  3. Windows开源Web服务器性能和压力测试工具

    linux有很多开源工具用来测试服务器负载,而windows上非常少,几乎没有除了几个复杂的JMeter WET等 将两个好用的工具是Linux版本通过Cygwin移植过来,方便广大windows人员 ...

  4. 8个超实用的Java测试工具和框架

    Java入门 如果你才刚开始接触Java世界,那么要做的第一件事情是,安装JDK——Java Development Kit(Java开发工具包),它自带有Java Runtime Environme ...

  5. 开源一款资源分享与下载工具 —— 电驴(eMule)

    这里分享一款资源分享与下载工具--电驴,其实严格来说,应该叫电骡,这是我维护的版本,eMuleVeryCD版本,VeryCD是一个不错的资源分享网站:http://www.verycd.com/.大概 ...

  6. 【转】精心推荐几款超实用的 CSS 开发工具

    原文转自:http://www.html5cn.org/article-5741-1.html 摘要: 当你开发一个网站或 Web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文 ...

  7. 几款超实用的 CSS 开发工具

      当你开发一个网站或 web 应用程序的时候,有合适的工具,绝对可以帮助您节省大量的时间.在这篇文章中,我为大家收集了超有用的 CSS 开发工具. 对于 Web 开发人员来说,找到有用的 css 开 ...

  8. 介绍一款超实用的演讲必备工具 ZoomIt

    最近在整理以前的文件时,发现躺在某个角落的一个超好的实用的小工具——ZoomIt.此工具是 SysinternalsSuite(已被MS收购)众多实用工具的一个. 相信大家在演讲时,经常需要调整屏幕文 ...

  9. 推荐10款免费的在线UI测试工具

    发布网站之前至关重要的一步是网站测试.网站测试要求我们全面地运行网站并通过所有基本测试,如响应式设计测试.安全测试.易用性测试.跨浏览器兼容性.网站速度测试等. 网站测试对SEO.搜索引擎排名.转换率 ...

随机推荐

  1. 搭建Istio基础环境

    需求 搭建istio基础环境(基于1.5.1版本) 安装步骤 在安装 Istio 之前,需要一个运行着 Kubernetes 的环境,安装步骤可以参考前面的文章 下载istio,然后解压,然后将 is ...

  2. 0521Day03命名规范 Data函数 可变长参数 枚举类型

    [重点] 命名规范 枚举类型 Date函数 可变长参数 pirnt,println 命名规范 1. 驼峰命名法:main,username,setUsername 用于变量.方法的命名 2. Pasc ...

  3. Python Redis常用操作(持续更新)

    目录 1.Redis简介 2.Redis部署 3.Redis API应用 4.String操作 1.Redis简介 redis是业界主流的key-value,nosql数据库之一.和Memcached ...

  4. template标签介绍和使用

    template标签介绍和使用 1.介绍:template标签是html5新出来的标签,具有3个特点,(1)随意性:可以写在页面中的任何地方.(2)不可见性:它里面的元素都是不可见的.(3)页面也不会 ...

  5. 【数据结构的JavaScript版实现】data-struct-js的npm包初版作成

    [数据结构的JavaScript版实现]data-struct-js的npm包初版作成 码路工人 CoderMonkey [数据结构的JavaScript版实现] 拖了这么久,终于趁着春节假期把初版( ...

  6. Java实现 LeetCode 749 隔离病毒(DFS嵌套)

    749. 隔离病毒 病毒扩散得很快,现在你的任务是尽可能地通过安装防火墙来隔离病毒. 假设世界由二维矩阵组成,0 表示该区域未感染病毒,而 1 表示该区域已感染病毒.可以在任意 2 个四方向相邻单元之 ...

  7. Java实现 蓝桥杯 算法训练 Bit Compressor(暴力)

    试题 算法训练 Bit Compressor 问题描述 数据压缩的目的是为了减少存储和交换数据时出现的冗余.这增加了有效数据的比重并提高了传输速率.有一种压缩二进制串的方法是这样的: 将连续的n个1替 ...

  8. Java实现 LeetCode 481 神奇字符串

    481. 神奇字符串 神奇的字符串 S 只包含 '1' 和 '2',并遵守以下规则: 字符串 S 是神奇的,因为串联字符 '1' 和 '2' 的连续出现次数会生成字符串 S 本身. 字符串 S 的前几 ...

  9. Java实现 LeetCode 290 单词规律

    290. 单词规律 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律. 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非 ...

  10. Java实现 LeetCode 292 Nim游戏

    292. Nim 游戏 你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解 ...