前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 实现自动化测试 dubbo 协议接口

Python 实现自动化测试 dubbo 协议接口

作者头像
Wu_Candy
发布2022-12-06 20:55:57
4650
发布2022-12-06 20:55:57
举报
文章被收录于专栏:无量测试之道无量测试之道
前言

在工作或学习过程中,可能会遇到后端服务里有使用 dubbo 协议实现的接口,dubbo 协议接口的测试方法不同于 http/https 类型的接口,不能简单使用request.post的方法来完成自动化测试。

如果需要对 dubbo 协议的接口进行自动化测试,你会想到哪种解决方案呢?

今天的分享将提供一种方案由 Python 来实现 dubbo 协议的接口自动化测试。

准备工作:

  • 安装Python3+的运行环境
  • 使用python -m pip install telnetlib安装依赖包

PS:使用依赖包telnetlib是想通过 Python 来模拟 Linux 下对 dubbo 接口调用的命令行操作

Python 实现源码
代码语言:javascript
复制
import json
import telnetlib


class Dubbo(telnetlib.Telnet):
    prompt = 'dubbo>'
    
    def __init__(self, host=None, port=0):
      super().__init__(host, port)
      self.write(b'\n')
      
    def command(self, flag, str_=''):
      data = self.read_until(flag.encode())
      self.write(str_.encode() + b'\n')
      return data
      
    def invoke(self, service_name, method_name):
      command_str = "invoke {0}.{1}()".format(service_name, method_name)
      self.command(Dubbo.prompt, command_str)
      data = self.command(Dubbo.prompt, "")
      data = json.loads(data.decode(Dubbo.coding, errors='ignore').split('\n')[0].strip())
      

if __name__ == '__main__':
  conn = Dubbo('serviceIp', port)
  result = conn.invoke(
    "serviceName",
    "serviceName.method"
  )
  print(result)
源码重点详解

1、代码段:

command_str = "invoke {0}.{1}()".format(service_name, method_name)

(1)、invoke 为调用 dubbo 接口的命令名称;

(2)、{0} 为 invoke 命令后需要接的第一个参数,它的值将由传入进来的 service_name 取代,一般是传入服务名称,这里的写法只是为了占位;

(3)、{1} 为 invoke 命令后需要接的第二个参数,它的值将由传入进来的 method_name 取代,一般是传入被调用的方法名称,这里的写法只是为了占位;

(4)、() 为 invoke 命令后调用 method_name 方法时需要的格式,类似 Python 中如果想要调用一个函数是需要加上 () 才能调用成功的,如果有参数还需要在 () 里传入对应的参数;

(5)、问题:如果被调用的dubbo服务的方法需要传入对应的参数,怎么处理呢?

答:

将代码改写为:"invoke {0}{1}({2})".format(service_name,method_name,param_data),需要在 () 里添加占位符,并在调用该方法时传入对应的参数,一般是 key:value 格式的参数,即 Python 中的字典格式的数据;

2、代码段:

conn = Dubbo('serviceIp', port)

(1)、serviceIp:被调用服务所属的IP地址;

(2)、port:被调用服务所对应的可访问的外部暴露的端口;

PS:如果端口号为内部端口,这种方式调用会报错,必须是可访问的外部暴露端口。

本文参与?腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-26,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Python 实现源码
  • 源码重点详解
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com