dubbo接口及测试总结

1 dubbo简介

1.1 dubbo是什么?

  • dubbo是由阿里巴巴提供的一个开源的、高性能的、优秀的分布式服务框架;
  • 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题;
  • 提供了丰富的服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。

1.2 dubbo 基础架构

在这里插入图片描述
Provider:暴露服务的服务提供者,向注册中心注册自己提供的服务;
Consumer:调用远程服务的服务消费者,向注册中心订阅自己想要的服务;
Registery:服务注册与发现的注册中心;
Monitor:统计服务的调用次数和调用时间的监控中心;
Container:服务运行容易,负责启动、加载、运行服务提供者。

2 dubbo接口测试的方法

  • 明确接口的提供方与消费方;
  • 确定接口的调用场景,影响的功能模块;
  • 获取接口文档,参与接口评审,考虑接口设计的合理性;收集服务、注册中心、端口、方法、接口入参等信息;
  • 设计测试用例,包括正向用例、反向用例及场景用例等;
  • 确定测试时需要采用的测试手段,使用的工具,如果是代码,提前准备好脚本、参数化数据、接口关联关系等;
  • 执行测试,记录问题。

3 dubbo接口测试的方法

3.1 telnet命令测试dubbo接口

步骤1:telnet连接远程

  • cmd命令dos命令行窗口
  • 使用命令telnet 服务提供者ip 提供服务端口(注意ip和端口之间是空格,不是冒号)
    如果电脑提示telnet不是内部或外部命令,则在控制面板—>程序---->打开或关闭windows功能,勾选”Telnet 客户端“一项
    在这里插入图片描述
    服务提供者ip 和端口由服得提供方提供
    在这里插入图片描述
    输入以上命令回车后进入telnet远程连接黑窗口,再次回车进入dubbo命令调用窗口,出现以下界面代表连接dubbo成功
    在这里插入图片描述
    查看服务提供者提供的接口列表(ls):
    在这里插入图片描述
    查看接口提供的方法(ls 接口名)
    在这里插入图片描述
    查看接口提供的方法返回值及入参参数类型,需要加-l参数(ls -l 接口名),方法名称前为返回类型,名称后括号内为入参的参数类型
    在这里插入图片描述
  • 使用invoke方法进行接口调用
    invoke 接口名.方法名(入参)
    invoke 方法名(入参)

3.2 jmeter测试dubbo接口

3.2.1下载jmeter 的dubbo依赖jar包

根据dubbo服务的版本,下载对应的插件版本(下载地址),下载后放到JMeter安装目录中的​​lib/ext​​路径下,放入依赖包后需要重启jmeter.

推荐下载​​jmeter-plugins-dubbo-${version}-jar-with-dependencies.jar​包(包含依赖包)

如果下载jmeter-plugins-dubbo-${version}.jar,则需要下载插件的依赖包,依赖包和版本如下:

  • dubbo-2.5.3.jar
  • javassist-3.15.0-GA.jar
  • zookeeper-3.4.6.jar
  • zkclient-0.1.jar jline-0.9.94.jar
  • netty-3.7.0-Final.jar
  • slf4j-api-1.7.5.jar
  • log4j-over-slf4j-1.7.5.jar

3.2.2 添加jmeter取样器

添加线程组---->添加取样器---->Dubbo Sample 在这里插入图片描述
在Rregister Settings中设置注册中心相关信息
在这里插入图片描述
Protocol:使用的注册中心平台类型
Address:注册中心的ip地址:端口号

填写完注册中心基本信息后,点击按钮【get provider list】获取所有服务提供者列表:(需要几分钟时间,耐心等待,如果有提示,点击yes),当弹出以下提示,说明获取服务完成。
在这里插入图片描述
拉取接口完成后,inferfaces列表下会展示已注册的所有的接口列表,选择一个接口,在Method下拉列表展示该接口关联的所有方法名称。并且在interface settings处自动填充接口信息。

3.2.3 添加接口入参

在这里插入图片描述
点击新增按钮,可以添加接口入参,paramType填入参数类型,paramValue填入参数值,入参顺序必须与方法定义的入参顺序一致。

  • 入参类型如果为普通类型,则参数类型值参数:参数类型
  • 入参类型如果是json,则找开发获取参数类型或通过telnet -l 接口名的方式获取参数类型(以上的详细描述)
  • 入参类型如果是开发自定义封装的参数类型,需找开发获取jar(放在jmeter的lib\ext目录下),且参数名称需填全称

3.2.4 添加结果树

添加监听器—>查看结果树,以方便查看接口测试结果

3.2.5 运行接口

3.3 python 代码实现dubbo接口测试

3.3.1 python 测试dubbo基本思路

与telnet命令请求dubbo一致,python 代码实现dubbo的大致思路如下:

  1. 导入telnetlib库
    import telnetlib
  2. 创建telnet链接对象
    conn = telnetlib.Telnet()
  3. 连接dubbo
    conn.open(‘服务名’, 端口)
  4. 发起dubbo请求
    conn.write(‘invoke 接口名.方法名(入参)’)
    注意:
    1、如果参数不正确,dubbo会返回Method not found 错误,json参数需要在json中以形如"class": "net.sf.json.JSONObject"键值对格式插入参数说明
    2、考试到参数包含中文,所以对于命令使用encode()进行编码
    3、参数需要以str形式传入,故使用json.dumps将json类型转换为str
  5. 获取telnet返回的信息
    conn.read_until(b’dubbo>‘).decode().split(’\r\n’)[0]

3.3.2 python 测试dubbo封装


import telnetlib
import json

class DubboClient(telnetlib.Telnet):
    prompt = 'dubbo>'

    def __init__(self, host, port):
        super().__init__(host,port)


    def invoke(self,service_name,method_name,arg):
        if type(arg) == 'dict':
            arg = json.dumps(arg)
        command_str = 'invoke {0}.{1}({2})\n'.format(service_name, method_name, json.dumps(arg))
        self.write(command_str.encode())
        data = self.read_until(self.prompt.encode()).decode().split('\r\n')[0]
        return data

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值