目录

dubbo接口及测试总结

dubbo接口及测试总结

1 dubbo简介

1.1 dubbo是什么?

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

1.2 dubbo 基础架构

https://i-blog.csdnimg.cn/blog_migrate/d47ecd4370bf1c6c802741bf00b1f794.png

Provider:暴露服务的服务提供者,向注册中心注册自己提供的服务;

Consumer:调用远程服务的服务消费者,向注册中心订阅自己想要的服务;

Registery:服务注册与发现的注册中心;

Monitor:统计服务的调用次数和调用时间的监控中心;

Container:服务运行容易,负责启动、加载、运行服务提供者。

2 dubbo接口测试的方法

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

3 dubbo接口测试的方法

3.1 telnet命令测试dubbo接口

步骤1:telnet连接远程

  • cmd命令dos命令行窗口

  • 使用命令telnet 服务提供者ip 提供服务端口(注意ip和端口之间是空格,不是冒号)

    如果电脑提示telnet不是内部或外部命令,则在控制面板—>程序—->打开或关闭windows功能,勾选”Telnet 客户端“一项

    https://i-blog.csdnimg.cn/blog_migrate/e46eeb1257d7cd4d1b9ca52732dd9561.png

    服务提供者ip 和端口由服得提供方提供

    https://i-blog.csdnimg.cn/blog_migrate/b46317ab10e255e9aa508428a968ebcf.png

    输入以上命令回车后进入telnet远程连接黑窗口,再次回车进入dubbo命令调用窗口,出现以下界面代表连接dubbo成功

    https://i-blog.csdnimg.cn/blog_migrate/93b4a7a2e3390848f87a2b6f6555990e.png

    查看服务提供者提供的接口列表(ls):

    https://i-blog.csdnimg.cn/blog_migrate/5c0786b049c94e054752151ccf678014.png

    查看接口提供的方法(ls 接口名)

    https://i-blog.csdnimg.cn/blog_migrate/7d1db0c5af6d1a9ad53cd97c0a3e362a.png

    查看接口提供的方法返回值及入参参数类型,需要加-l参数(ls -l 接口名),方法名称前为返回类型,名称后括号内为入参的参数类型

    https://i-blog.csdnimg.cn/blog_migrate/f9007fefd0e502dc8a7ae560f2d61f7d.png

  • 使用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 https://i-blog.csdnimg.cn/blog_migrate/74252729dda66e3272cebb7930d017d2.png

在Rregister Settings中设置注册中心相关信息

https://i-blog.csdnimg.cn/blog_migrate/8007a6b850bc834399d9ec88ac492272.png

Protocol:使用的注册中心平台类型

Address:注册中心的ip地址:端口号

填写完注册中心基本信息后,点击按钮【get provider list】获取所有服务提供者列表:(需要几分钟时间,耐心等待,如果有提示,点击yes),当弹出以下提示,说明获取服务完成。

https://i-blog.csdnimg.cn/blog_migrate/671b9c9f433f4522dd13ba3a8ec4170a.png

拉取接口完成后,inferfaces列表下会展示已注册的所有的接口列表,选择一个接口,在Method下拉列表展示该接口关联的所有方法名称。并且在interface settings处自动填充接口信息。

3.2.3 添加接口入参

https://i-blog.csdnimg.cn/blog_migrate/665de4d31b184f2987bb6157c82c0c08.png

点击新增按钮,可以添加接口入参,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