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


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

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

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

    准备工作:

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

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

    Python 实现源码

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    源码重点详解

    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:如果端口号为内部端口,这种方式调用会报错,必须是可访问的外部暴露端口。


    资源分享

    下方这份完整的软件测试视频学习教程已经上传CSDN官方认证的二维码,朋友们如果需要可以自行免费领取 【保证100%免费】

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    JavaSE-IO流--IO原理、流的分类、FileReader、FileWriter
    从业务场景分析腾讯云服务器选型最佳实践!
    Redis:send of 37 bytes failed with errno=10054
    vscode编辑器创建分支注意事项?!
    TCO-PEG-N3|TCO-PEG-azide|反式环辛烯-聚乙二醇-叠氮-齐岳生物
    Python详细安装配置教程
    【413.等差数列划分】
    Ubuntu1804安装rabbitmq服务
    Java设计模式基本介绍、基本要素、23种设计模式介绍
    JavaSE——访问控制权限
  • 原文地址:https://blog.csdn.net/wx17343624830/article/details/128051315