基于Dubbo2.7的元数据,Dubbo Admin实现了服务测试功能,可以通过泛化调用,在控制台上调用真实的服务提供者

使用方式

  • 部署服务提供者: 可以在这里下载demo,此工程基于spring boot,方便在IDE或者命令行启动,对于服务测试来说,只需要启动dubbo-basic-provider即可。
  • 服务查询: 完成服务端部署后,可以到Dubbo Admin的服务测试页面上查询对应的服务: 
    这里的信息和元数据类似,包含方法名,参数类型和返回值信息,点击右边的标签就可以进入服务测试页面
  • 服务测试: 
    服务测试页面包含了两个json编辑器,参数类型的信息都是以json格式保存,这里需要填入对应的参数值(本例中数类型时String),填写完成后点击执行即可对服务端发起调用,调用结果展示在右边的编辑器中,如果调用失败,会显示详细的失败原因,下面来看一下调用失败的例子:
    本例中,先关掉Dubbo服务提供者的进程,再执行服务测试,可以看到返回的结果是找不到服务提供者的异常。和普通调用一样,业务和框架的异常都会返回在结果中,方便业务排查。
  • 复合类型参数
    考虑UserService中的以下方法和类型:
//org.apache.dubbo.demo.api.UserService
Result getUser(String name, UserInfoDO userInfoDO);
public class UserInfoDO {private int id;private LocationDO locationDO;private DepartmentDO departmentDO;@Overridepublic String toString() {return "UserInfoDO{" +"id=" + id +", locationDO=" + locationDO.toString() +", departmentDO=" + departmentDO.toString() +'}';}
}
public class DepartmentDO {private String departName;private LocationDO departLocation;@Overridepublic String toString() {return "DepartmentDO{" +"departName='" + departName + '\'' +", departLocation=" + departLocation.toString() +'}';}
}
public class LocationDO {private String address;private int postNum;@Overridepublic String toString() {return "LocationDO{" +"address='" + address + '\'' +", postNum=" + postNum +'}';}
}

参数是比较复杂的符合类型参数,服务测试的时候,会逐层展开填写每一个field的值,如下图所示:
同样可以调用成功并且返回结果

原理:数据来源

服务测试中,最重要的就是完整的方法签名信息,和参数的类型信息,有了这些信息才能够一步步填入每个参数的值,拼装出完整的服务消费者。在Dubbo2.7中,新增了元数据中心,Dubbo Admin的方法签名和参数类型信息就是从这里来的:
如图所示,服务端在运行的时候会将服务的元数据信息注册到元数据中心,格式如下:

{..."methods": [{"name": "sayHello","parameterTypes": ["org.apache.dubbo.demo.model.User"],"returnType": "org.apache.dubbo.demo.model.Result"},...],"types": [{"type": "char"},{"type": "long"},{"type": "org.apache.dubbo.demo.model.Result","properties": {"msg": {"type": "java.lang.String","properties": {"value": {"type": "char[]"},"hash": {"type": "int"}}},"userName": {"type": "java.lang.String","properties": {"value": {"type": "char[]"},"hash": {"type": "int"}}}}},{"type": "org.apache.dubbo.demo.model.User","properties": {"id": {"type": "java.lang.Long","properties": {"value": {"type": "long"}}},"username": {"type": "java.lang.Sring","properties": {"value": {"type": "char[]"},"hash": {"type": "int"}}}}},...]
}

与服务测试相关的就是methodstypes所包含的方法和类型信息,Dubbo Admin根据这些信息,将参数渲染到服务测试页面的Json Editor中,由用户来输入每个参数,每个成员变量的值。

原理: 泛化调用

有了参数类型,下一个问题就是怎么能够调用到服务端,在传统的Dubbo RPC调用中,客户端需要依赖服务端的API jar包(参考前文demo中的dubbo-basic-consumer),这对于Dubbo Admin来说不太可能,因为服务的上下线是动态的,Dubbo Admin无法动态增加jar包依赖,因此需要用到Dubbo中的泛化调用,指的是在没有服务端API接口的情况下,客户端直接通过 GenericService 接口来发起服务调用,返回值中的数据对象都用Map来表示。泛化调用在服务端不需要做特殊处理,只需要客户端发起即可。

总结和展望

本文简单介绍了服务测试的用法和原理,后续会进一步针对该功能进行增强,比如处理抽象类的参数类型,支持从json文件导入参数值,支持对参数值的保存等等,方便对服务接口进行回归测试。

原文:http://dubbo.apache.org/zh-cn/blog/service-test.html

Dubbo Admin服务测试功能相关推荐

  1. 使用阿里云短信服务测试功能发送短信到手机验证

    1.首先打开aliyun短信服务页面,点击"免签名/模板审核的API发送测试" 2.绑定你的测试手机号,点击调用API发送短信 3.进入该页面你只需要先看一看就行,等会需要把Tem ...

  2. Dubbo Admin —— Spring Cloud Alibaba 2021.1 + Nacos + Dubbo Admin参考配置

    环境配置 <dependencyManagement><dependencies><!--Spring Boot--><dependency><g ...

  3. Dubbo 管理能力弱?Dubbo Admin 发布 v0.1 助力服务管理能力!

    点击蓝色"程序猿DD"关注我哟 来源:阿里巴巴中间件 为了提升 Dubbo 里程碑版本2.7.0的使用体验,我们于去年年中启动了 Dubbo Admin 的重构计划,并作为Dubb ...

  4. 后台服务系统之Dubbo Admin的讲解

    dubbo Admin Dubbo提供了可视化的界面管理工具,方便我们对服务进行管理,它就是dubbo admin,代码地址: https://github.com/apache/dubbo-admi ...

  5. 没有Dubbo Admin,怎么查看zookeeper中注册的dubbo服务?

    之前查看zookeeper中注册的dubbo服务,用的都是dubbo admin这种现成的工具. 旧版本dubbo admin长这样 (本图片来自网络) 新版本长这样 服务不太正常的时候,用dubbo ...

  6. 【UDS统一诊断服务】四、诊断典型服务(5)— 功能/元件测试功能单元(例行程序功能单元0x31)

    文章目录 四.诊断典型服务(5)- 功能/元件测试功能单元(例行程序功能单元) "功能/元件测试功能单元(例行程序功能单元)"包括的服务: (1)RoutineControl (0 ...

  7. 微服务架构实战第十节 微服务的模拟组件测试和契约服务测试

    32 测试方案:如何正确理解针对微服务的测试解决方案? 作为整个课程最后一部分内容,我们将讨论微服务架构中的测试解决方案.对于微服务而言,测试是一个难点,也是经常被忽略的一套技术体系.当系统中存在多个 ...

  8. 代码审计-dubbo admin =2.6.1远程命令执行漏洞

    前置 输入材料 安全目标和需求 架构分析 供应链安全 源代码审查 依赖结构矩阵(Dependency Structure Matrices,DSM) 数据流 信任边界 数据存贮 威胁列表 otter ...

  9. dubbo接口测试_Django测试工具平台之Dubbo接口请求 + 前端

    前言 本章内容主要完成以下几个内容: 1.记录Dubbo接口请求 2.搜索请求记录 3.前端页面完成 4.项目第一阶段展示 项目展示中主要演示在本地如何启动项目,进行调试.如果需要部署线上环境,可以去 ...

最新文章

  1. Spring中-IOC-Bean的初始化-循环依赖的解决
  2. 路由器mstp多域配置举例
  3. 常用Linux基础命令
  4. mysql主从切换机制torch_Mysql主从复制 - osc_y0vjyklt的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. input常用输入框限制
  6. oracle学习笔记一
  7. MongoDB从立地到成佛(介绍、安装、增删改查)
  8. Martini源码剖析
  9. BZOJ2730 HNOI2012 矿井搭建 连通性
  10. 增长量计算n+1原则_土方量计算方法
  11. 基于消息中间件RabbitMQ实现简单的RPC服务
  12. 检索COM类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败
  13. 程序员水平自测题:程序员们,想知道你的技术达到了什么水平吗?
  14. jms.jar 2.0_JMS API 2.0生产者和使用者
  15. 看 AWS 如何通过 Nitro System 构建竞争优势
  16. .bat文件和脚本文件
  17. 触发器:建立时间和保持时间
  18. 基于三轴加速度传感器的老人摔倒检测
  19. es管理器免root_真正免root的ES文件浏览器详细使用教程
  20. IE浏览器设置默认显示版本

热门文章

  1. 【论文解读】基于关系感知的全局注意力
  2. 统计学习方法第三章作业:一般k邻近、平衡kd树构造、kd树邻近搜索算法代码实现
  3. 图像反光能被一键去除了?港科大开源RFC,仅用一个操作,强反光也能完美去除|CVPR2021
  4. 推荐算法炼丹笔记:非采样的负样本
  5. 技术系列课|AI驱动的超分辨技术应用现状
  6. 合作伙伴说 | 一人行快,众人行远,与网易共建万亿新生态
  7. java操作excel文件之系列一:《读取excel文件的内容保存到数据库》
  8. 转 :Vim文件编码识别与乱码处理
  9. 《货币是个什么东西》笔记
  10. PostgreSQL MySQL 兼容性之 - bit 函数和操作符