首页 > 编程语言 >Dubbo接口+python的接口测试举例(用Python自带的telnetlib库进行dubbo测试)

Dubbo接口+python的接口测试举例(用Python自带的telnetlib库进行dubbo测试)

时间:2023-07-17 10:02:45浏览次数:50  
标签:Dubbo 调用 服务 dubbo self 接口 测试 data

   最近公司开发新的一套系统,开发出来的方案会基于dubbo分布式服务框架开发的,那么什么是dubbo,身为测试的我,第一眼看到这个,我得去了解了解dubbo是啥玩意,为开展的测试工作做准备,提前先学 dubbo的相关知识。

  1、什么是dubbo

    Dubbo来源于阿里巴巴集团某个团队研发出来的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东。

     其核心部分包含:
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2. 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3. 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

  Dubbo本身支持多种远程调用方式,例如Dubbo RPC(二进制序列化 + tcp协议)、http invoker(二进制序列化 + http协议)、hessian(二进制序列化 + http协议)、WebServices (文本序列化 + http协议)等。
 2、Dubbo能做什么?

1.透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。      
2.软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3. 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
3、dubbo的架构

 

Provider

暴露服务方称之为“服务提供者”。

 

Consumer

调用远程服务方称之为“服务消费者”。

 

Registry

服务注册与发现的中心目录服务称之为“服务注册中心”。

 

Monitor

统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。

 

          

调用关系说明:

   0 服务容器负责启动,加载,运行服务提供者。

  1. 服务提供者在启动时,向注册中心注册自己提供的服务。

  2. 服务消费者在启动时,向注册中心订阅自己所需的服务。

  3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

  4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。

  5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

 

以上均是dubbo框架的一些理论知识、那么了解了基础的知识,我们怎么来测试dubbo提供的接口呢。

遇到这个问题我也会咨询一些前辈,有人说java编写代码可以测试,但是需要的依赖多,有些人说基于python也是可以调用的,那么也是需要第三库来支持的。

我们可以去下载对应的python库,有的版本不支持python3 你可以下载下来源码,对源码中的一些代码格式调整到python3支持的格式就好。

我这里用的是用Python自带的telnetlib库,telnetlib是python3自带的库,存放在路径C:\Program Files\Python36\Lib,我们举个例子,看代码是否能够正常运行。

我们拿来了本博客原创的例子。

    import json
    import socket
    import telnetlib
     
    class Dubbo(telnetlib.Telnet):
     
        prompt = 'dubbo>'
        coding = 'utf-8'
     
        def __init__(self, host=None, port=0,
                     timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
            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, arg):
            command_str = "invoke {0}.{1}({2})".format(
                service_name, method_name, arg)    #这个地方的arg不能写成json.dumps(arg),即不能转换成string型,提高复用性,在调2个或2个以上的接口的方法的参数时
            self.command(Dubbo.prompt, command_str)
            data = self.command(Dubbo.prompt, "")
            data = data.decode(Dubbo.coding,errors='ignore').split('\n')[0].strip()
     
            return data
     
     
        def dotest1(self, conn,data):  #含有泛型的json,看源码
            result = conn.invoke("com.xxx.bluespar.star.service.BudgetService","recBudgetDetail", data)
            #print("==========请求data参数为:==========" + str(data))
            return result
     
     
    if __name__ == '__main__':
        # count = 10001
        # for num in range(20190919200001, 20190919200006, 2):
        #     count += 100
        conn = Dubbo('10.9.48.115', 28899)  #这个是dubbo://的IP和端口
     
        # T_E006_BUDGET_DETAIL
        data1 = {
                "budgetId": "HKYF201908000003",
                "businessNo": "BN201908000003",
                "sendDate": "2019-08-24 10:42:20",
                "bill": "测试001",
                "secondBill": "测试001_second",
                "transName": "测试transName",
                "startCustomerId": "982",
                "startCustomerName": "苏州",
                "startCityId": "320500",
                "startCityName": "苏州",
                "startAirportName": "无锡",
                "endCustomerId": "522",
                "endCustomerName": "金华",
                "endCityId": "330700",
                "endCityName": "金华",
                "endAirportName": "广州",
                "flightType": 1,
                "flightNo": "GZ568888",
                "secFlightNo": "GZ568888_001",
                "pickLocationName": "广州",
                "goodsTypeName": "广州",
                "sendBillCount": 200,
                "sendGrossWeight": 8935.66,
                "sendCalWeight": 8955.55,
                "pickBillCount": 1122.66,
                "pickGrossWeight": 898.66,
                "pickCalWeight": 55.88,
                "computeWeight": 223.33,
                "financeReviewWeight": 88.66,
                "reviewWeight": 120.33,
                "computeModeName": "结算",
                "settleModeName": "结算",
                "computePrice": 55.2,
                "feeKindsName": "费用类型名",
                "feeValue": 500.2,
                "settleInCustId": "982",
                "settleInCustName": "苏州",
                "settleOutCustId": "522",
                "settleOutCustName": "金华",
                "remark": "备注一下"
    }
     
        result1 = conn.dotest1(conn, data1)  #执行dotest_json_param测试用例(请求是json格式的)
        print(result1)

其实,上述代码,就等同于我打开putty或者cmd命令提示符,输入如下命令:

    >  telnet 10.9.48.115 28899
     
    >  invoke com.xxx.bluespar.star.service.BudgetService.recBudgetDetail({"budgetId":"HKYF201908000003","businessNo":"BN201908000003","sendDate":"2019-08-24 10:42:20","bill":"测试001","secondBill":"测试001_second","transName":"测试transName","startCustomerId":"982","startCustomerName":"苏州","startCityId":"320500","startCityName":"苏州","startAirportName":"无锡","endCustomerId":"522","endCustomerName":"金华","endCityId":"330700","endCityName":"金华","endAirportName":"广州","flightType":1,"flightNo":"GZ568888","secFlightNo":"GZ568888_001","pickLocationName":"广州","goodsTypeName":"广州","sendBillCount":200,"sendGrossWeight":8935.66,"sendCalWeight":8955.55,"pickBillCount":1122.66,"pickGrossWeight":898.66,"pickCalWeight":55.88,"computeWeight":223.33,"financeReviewWeight":88.66,"reviewWeight":120.33,"computeModeName":"结算","settleModeName":"结算","computePrice":55.2,"feeKindsName":"费用类型名","feeValue":500.2,"settleInCustId":"982","settleInCustName":"苏州","settleOutCustId":"522","settleOutCustName":"金华","remark":"备注一下"})

Dubbo的接口测试其实也不是那么难,只要我们肯下功夫,我们一定能够做成功的。dubbo接口。开始学起来。

原文链接:https://blog.csdn.net/cyjs1988/article/details/82495136

标签:Dubbo,调用,服务,dubbo,self,接口,测试,data
From: https://www.cnblogs.com/zhaoruixiao/p/17559205.html

相关文章

  • 接口用例方法设计
    单接口测试⼀个单独的业务,就对应⼀个独⽴的接⼝。如:登录业务,对应登录接⼝。注册业务,对应注册接⼝。⽀付业务,对应⽀付接⼝。下图是设计思路,并非每条都要设计出来,得根据实际情况。比如,iHRM项目的部门添加接口,请求体参数有必须和非必须的。非必须的可以有任意组合。单接口测试......
  • Eolink Apikit,0 代码可拖拽的自动化测试神器
    大家好,我是哪吒。传统的自动化测试方法需要编写大量的代码和脚本,对于非开发人员来说具有一定门槛,本文将以EolinkApikit为例,探讨图形化操作、可拖拽的自动化测试工作流,如何快速构建复杂的测试流程。一、从测试到可拖拽的自动化测试传统的测试需要测试人员逐步执行测试用例,手动输......
  • 可维护性测试指南
    可维护性测试什么是可维护性测试?维护的主要定义是保持或维持特定状态的过程。软件的可维护性由开发人员负责,他们定期修改软件以满足不断变化的客户需求并解决客户提出的问题。软件维护需要增强软件的功能,以包含客户需要的新功能,修改代码以避免将来出现问题,修复代码中的缺陷或错......
  • 三通道激光恒流源 数据测试
    前端整流部分空载不带电容输出:都使用耐压35v电容测试,10000uf为绿色高频电容类型(优信):不带负载:10000uf电容滤波效果47000uf电容滤波:(和没上220v供电一致,,)带1r电阻负载:47000uf&10000uf电容对比 ......
  • spring boot 接口多线程
    SpringBoot接口多线程在单线程的环境中,当接口请求过多时,容易造成阻塞和性能问题。为了提高系统的响应速度和吞吐量,我们可以使用多线程来处理接口请求。本文将介绍如何在SpringBoot中使用多线程处理接口请求,并给出相应的代码示例。什么是多线程多线程是指在一个进程中同时执行......
  • vue项目ios真机测试
    如何实现“Vue项目iOS真机测试”简介在开发Vue项目时,我们通常需要进行测试来确保项目在不同平台上的兼容性和稳定性。本文将为刚入行的开发者介绍如何在iOS设备上进行Vue项目的真机测试。流程下面是实现Vue项目iOS真机测试的整体流程:步骤说明步骤一环境准备步骤......
  • vue.js - 不同参数同时请求同一个接口接口
    Vue.js-不同参数同时请求同一个接口接口概述在Vue.js中,我们可以使用Axios库来发送HTTP请求。当我们需要根据不同参数来请求同一个接口时,可以通过以异步的方式来实现。本文将教你如何使用Vue.js和Axios来实现这个功能。步骤下面是实现该功能的步骤:步骤描述1在Vue组......
  • 【Python】从同步到异步多核:测试桩性能优化,加速应用的开发和验证
    测试工作中常用到的测试桩mock能力在我们的测试工作过程中,可能会遇到多个项目并行开发的时候,后端服务还没有开发完成,或者我们需要压测某个服务,这个服务测在试环境的依赖组件(如MQ)无法支撑我们svr的并发访问的场景,这个时候我们可能就需要手写一个服务,来替代测试环境的这些依赖组......
  • Java性能优化-测试try-catch放在循环内和外的性能对比与业务区别
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751使用如上方式测试Java中try-catch放在循环内和循环外是否有性能上的差别。注:博客:https://blog.csdn.net/badao_lium......
  • Java性能优化-测试数组和链表在查询和添加删除时性能对比
    场景Java中使用JMH(JavaMicrobenchmarkHarness微基准测试框架)进行性能测试和优化:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131723751上面在使用JMH时测试了Java中数组和链表在进行头部插入时的对比结果。下面分别对比在头部、中部、尾部分别进行查询和......