暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

dubbo接口及测试总结

原创 是你的赵主任 2023-07-28
371

1、dubbo是什么?

dubbo是由阿里巴巴提供的一个开源的、高性能的、优秀的分布式服务框架;

是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题;

提供了丰富的服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。


2、dubbo 基础架构

图片

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

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

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

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

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


02
dubbo接口测试的方法



明确接口的提供方与消费方;

确定接口的调用场景,影响的功能模块;

获取接口文档,参与接口评审,考虑接口设计的合理性;收集服务、注册中心、端口、方法、接口入参等信息;

设计测试用例,包括正向用例、反向用例及场景用例等;

确定测试时需要采用的测试手段,使用的工具,如果是代码,提前准备好脚本、参数化数据、接口关联关系等;

执行测试,记录问题。







telnet命令测试dubbo接口






步骤1:telnet连接远程

cmd命令dos命令行窗口

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

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

图片

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

图片

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

图片

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

图片

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

图片

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

图片

使用invoke方法进行接口调用

invoke 接口名.方法名(入参)

invoke 方法名(入参)







jmeter测试dubbo接口






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


2、添加jmeter取样器

添加线程组---->添加取样器---->Dubbo Sample 

图片

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

图片

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

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


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

图片

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


3、添加接口入参

图片

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


  • 入参类型如果为普通类型

    则参数类型值参数:参数类型

  • 入参类型如果是json

    则找开发获取参数类型或通过telnet -l 接口名的方式获取参数类型(以上的详细描述)

  • 入参类型如果是开发自定义封装的参数类型

    需找开发获取jar(放在jmeter的lib\ext目录下),且参数名称需填全称


4、添加结果树

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

5、运行接口







python代码实现dubbo接口测试







1、python 测试dubbo基本思路

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

导入telnetlib库

import telnetlib

创建telnet链接对象

conn = telnetlib.Telnet()

连接dubbo

conn.open(‘服务名’, 端口)

发起dubbo请求

conn.write(‘invoke 接口名.方法名(入参)’)

注意:

  • 如果参数不正确,dubbo会返回Method not found 错误,json参数需要在json中以形如"class": "net.sf.json.JSONObject"键值对格式插入参数说明

  • 考虑到参数包含中文,所以对于命令使用encode()进行编码

  • 参数需要以str形式传入,故使用json.dumps将json类型转换为str

获取telnet返回的信息

conn.read_until(b’dubbo>‘).decode().split(’\r\n’)[0]

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

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论