很多小伙伴都反映公司要求测dubbo(dubbo是一个java的分布式开源框架)接口,不会写java代码,怎么测,能不能用python来调dubbo接口。当然是可以的了,最近研究了一下,很简单,分享给大家。
    关于dubbo这个框架咱就不过多描述了,开发用,咱们只关注怎么调用就行了,想了解原理的可以看下这篇文章 http://www.cnblogs.com/Javame/p/3632473.html
    Dubbo本身支持多种远程调用方式,例如Dubbo RPC(二进制序列化 + tcp协议)、http invoker(二进制序列化 + http协议)、hessian(二进制序列化 + http协议)、WebServices (文本序列化 + http协议)等。
    Dubbo是支持hessian+http协议调用的,hessian是一种二进制序列化的方式。咱们用python调用的dubbo的时候,就是用hessian+http的方式调用,所以dubbo项目要配置使用hessian方式序列化,如果小伙伴要用python调用的时候,注意要找开发小哥哥在项目里面改成hessian方式的序列化,也就是改个配置文件的事,不影响原来的项目,如下图:

   咱们用python调用的时候,hessian+http这种方式调用,需要安装一个第三方模块,python-hessian这个模块,直接pip安装即可:

1
2

pip install python-hessian

当然我们要调用dubbo接口的话,要知道dubbo接口的调用地址、方法、入参对象和入参,这个就需要开发小哥哥提供给你文档了。

如果没有文档的话,就需要你能看懂java和dubbo的代码了。我这里没有文档,就直接说怎么找这些咱们需要用到的。

1、先找到调用地址、接口、方法。

dubbo是带有服务监控的功能的,这个都有,管开发要地址就行,这个里面可以看到你要测的服务,他里面的地址、方法,如下图,我们可以看到在dubbo服务监控里面有个HelloApi的服务:

然后我们带点这个服务进去,就可以看到这个服务是部署在哪个服务器上的,然后点这个服务器的ip进去,就可以看到调用地址、接口、和方法,分别是:

调用地址:http://192.168.1.100:8181/api/yz.dubbo.api.HelloApi ,#那个页面里写的是hessian,咱们用的是http协议发送的,这里咱们用的时候就改成http

方法:hello

如下图:
       

2、找到入参对象和入参

通过dubbo的服务监控,我们可以获得调用地址、接口,入参对象和入参就得看代码了,我们打开项目代码,看到入参类型是在yz.dubbo.api下面的param包里面的Param对象,那么入参对象就是yz.dubbo.api.param.Param,然后我们可以看到这个对象里面有几个属性,也就是它的入参,一个字符串类型的sth,一个整形数组ints,一个字符串键值对maps,对应到咱们python的数据类型就是一个字符串,一个list,一个字典。

入参对象:yz.dubbo.api.param.Param
    入参:sth、ints、maps


3、调用

通过上面的东西,咱们调用的dubbo需要用到的东西全部都准备好了,咱们封装一个函数去调用,下面是代码,写好了注释

from pyhessian.client import HessianProxy
#从pyhessian导入HessianProxy,用它来发请求
from pyhessian import protocol
#这个是用来进行把咱们python的数据类型序列化成二进制的def dubbo_api(url,interface,method,param_obj,**kwargs):''':param url: url地址:param interface: 接口名称,因为这里可能还有别的服务要测,接口名不一样,这里定义成变量:param method: 调用哪个方法:param param_obj: 入参的对象:param kwargs: 这个用关键字参数,因为每个接口的参数都不一样,不固定,所以这里用关键字参数:return:'''req_param = protocol.object_factory(param_obj,**kwargs)#这个是用来构造二进制的入参的,也就是把入参序列化try:#用try捕捉一下异常req_obj = HessianProxy(url+interface)#这个req是生成一个请求对象res = getattr(req_obj,method)(req_param)#getattr是python的内置方法,获取对象的方法,咱们从构造的请求对象里面获取到方法,然后调用,把前面生成的#序列化好的参数传进去,然后获取到返回的数据except Exception as e:print('有异常了,异常信息是:%s'%e)res = {"msg":"异常:%s"%e,"code":300}#这个是自己定义的异常,如果调用出错了,就返回这个return res
if __name__ == '__main__':url = 'http://192.168.1.100:8181/api/'interface = 'yz.dubbo.api.HelloApi'method = 'hello'param_obj = 'yz.dubbo.api.param.Param'params = {"sth":"dubbo","ints":[1,2,3],"maps":{"name":"dubbo"}}#这个入参,为了不定义多个变量,咱们把它写成字典形式的,就和stu=dubbo这种方式调用是一样的over = dubbo_api(url,interface,method,param_obj,**params)#测试调用一下print(over)#打印结果

运行结果看下图:

步骤写的可能有点多,但是具体实现起来很简单,快去试试吧。

转载于:https://www.cnblogs.com/sriba/p/8043352.html

python、java大作战,python测试dubbo接口相关推荐

  1. Python结合telnet命令实现自动化测试dubbo接口

    欢迎关注[无量测试之道]公众号,回复[领取资源], Python编程学习资源干货. Python+Appium框架APP的UI自动化. Python+Selenium框架Web的UI自动化. Pyth ...

  2. Jmeter dubbo插件测试dubbo接口

    一.背景 对于如何使用Jmeter测试http接口,大家都已经比较熟悉,网上相关的知识也很多.但随着微服务越来越流行,仅仅会测试http接口已经远远不够.Dubbo作为当下非常流行的RPC接口,学习如 ...

  3. Python—飞机大作战游戏(附源代码及素材)

    目录 过程说明: 主函数 键盘控制 创建类 01.飞机基类 02.子弹基类 03. Hero飞机类 04.enemy飞机类 源代码及素材 过程说明: 应用到的库:         import pyg ...

  4. 为什么学python十大理由-python用于什么

    语言多元化是PayPal编程文化中一个重要的组成部分.在C++和Java长期流行的同时,更多的团队选择了Jva和Scala.同时,Braintree的收购也引入了一个久经世故的Ruby社区.Pytho ...

  5. python数据分析大作业-python大作业

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 依次分析下代码:第一行 通过保留字import引用了python中用于绘 ...

  6. python读取大文件-python如何读取大文件以及分析时的性能优化小技巧

    在二代.三代测序背景下,分析人员难免会遇到解析超过1G.或者10G以上的文件.这里将给大家简单介绍下如何用python读取大文件,并给大家提两个优化代码的小建议. 首先,python 读取GB级大文件 ...

  7. python引用大数据,Python 3 UDF

    Python 2官方即将停止维护,MaxCompute支持Python 3.MaxCompute使用的Python 3版本为CPython-3.7.3.本文为您介绍如何通过MaxCompute Pyt ...

  8. python下载大文件-python 大文件

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 大文件上传服务一.前端(http:fex.baidu.comwebuploade ...

  9. python读取大文件-Python如何读取、拆分大文件

    简述 最近和第三方数据接触较多,数据量也开始陡增,从一开始的1KW行,最大到了1亿行,这让我这个常年处理"小数据'的人有点捉襟见肘.本来数据放在hive中也是可以操作的,但是有时候需求是做一 ...

最新文章

  1. ecshop后台实现用ajax动态修改/更新用户评论的时间
  2. Node 10 新功能概览(译)
  3. WEB技术架构的资源链接。
  4. 简单的写一个发布订阅器
  5. nginx屏蔽服务器类型信息,简单的禁止CURL 访问服务器nginx
  6. python docx包_[Python02] Python-docx包的使用,快速处理 Word 文件!
  7. 哪里找电商素材模板?
  8. dos命令如何查看计算机信息,电脑DOS命令查看进程详细信息方法图解
  9. 一起学JAVA 接口 面向接口开发
  10. java 65533,java导出excel超出65533行
  11. Android适配虚拟按键-亲测华为小米手机有效
  12. python:分隔符
  13. ShaderJoy —— 心形爆炸烟花效果【GLSL】
  14. One hundred years of uncertainty
  15. Python利用requests抓取页面源代码(基础)
  16. 下一个可扩展性障碍:大型多玩家手机AR
  17. 推荐算法_04_word2vec
  18. AT变速箱的工作原理
  19. 分享如何有效的提升网站PV值
  20. 13个人围成一圈,从第1个人开始顺序报号1、2、3,凡报到3的人退出圈子。找出最后留在圈子里的人原来的序号。

热门文章

  1. 内蒙古师范大学计算机与科学,2021年内蒙古师范大学计算机科学与技术(077500)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  2. 3d 室内地图_微软科研人员欲通过3D点云混淆技术保护AR定位隐私
  3. c语言计算n天之后为星期几,计算任何一天是星期几的C语言源代码.
  4. php面试 算法,PHP面试之常用算法 - 简庆旺个人博客|PHP教程|PHP学习|Python学习|Python教程|Seo学习|Seo教程...
  5. 前端如何查看音频的长度_Android音频可视化
  6. 统计学基础学习笔记:正态分布
  7. Java讲课笔记21:List接口及其实现类
  8. springboot三层架构_几张图让你快速了解数据中台技术架构
  9. 2017.9.13 序列统计 思考记录
  10. 2017.8.10 loli 测试