转自:https://www.cnblogs.com/chunyanxu/p/8732734.html

随笔- 57  文章- 0  评论- 0 

python、java大作战,python测试dubbo接口

 

很多小伙伴都反映公司要求测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需要用到的东西全部都准备好了,咱们封装一个函数去调用,下面是代码,写好了注释

 
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
31
32
33
34
35
36
37
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)#打印结果

运行结果看下图:

步骤写的可能有点多,但是具体实现起来很简单,快去试试吧。
 
 
 
好文要顶 关注我 收藏该文  

[转]python dubbo接口测试的更多相关文章

  1. 【转】基于Python的接口测试框架实例

    下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   背景 最近公司在做消息推送,那么自然就会产生很多接口,测试 ...

  2. 基于python的接口测试框架设计(三)接口测试的框架

    基于python的接口测试框架设计(三)接口测试的框架 其实我这里用到的是unittest单元测试框架,,这个框架好就好在比较清楚,,setup terdown都可以处理一些初始化及完成后的工作 主要 ...

  3. 基于python的接口测试框架设计(二)配置一些参数及文件

    基于python的接口测试框架设计(二)配置一些参数及文件 我这里需要基于我的项目配置的主要是登陆参数.以及baseURL ,把这些放在单独的文件里  毕竟导入的时候方便了一些 首先是url 图略 建 ...

  4. 基于python的接口测试框架设计(一)连接数据库

    基于python的接口测试框架设计(一)连接数据库 首先是连接数据库的操作,最好是单独写在一个模块里, 然后便于方便的调用,基于把connection连接放在__init__()方法里 然后分别定义D ...

  5. 基于Python的接口测试框架实例

    文章来源:http://www.jb51.net/article/96481.htm 下面小编就为大家带来一篇基于Python的接口测试框架实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考. ...

  6. 用阿里巴巴官方给Jmeter开发的Dubbo sampler取样器进行dubbo接口测试【图解剖析】

    自:https://blog.csdn.net/cyjs1988/article/details/84258046 [一]Dubbo sampler下载地址: 该插件支持jmeter 3.2及3.2以 ...

  7. python request接口测试笔记(1)

    python request接口测试笔记(1) 涉及到的功能说明: 需要登录拿到token,才能进行下一个接口的请求 读取csv文件中的信息,作为接口的参数 将接口响应结果,写入csv文件,以便分析统 ...

  8. 【Jmeter】- 使用 jmeter 进行 dubbo 接口测试

    大家都知道 dubbo 是一个优秀 rpc 框架,它一般(dubbox 除外)通过对外提供 tcp协议的接口进行外部调用.而我们日常使用的测试工具 jmeter 并不支持 dubbo 协议的请求.所以 ...

  9. Jmeter官方插件实现Dubbo接口测试

    目前主流的分布式框架有Dubbo和SpringCloud, SpringCloud是基于Http协议的分布式框架,Dubbo是基于RPC的分布式框架,Jmeter没有内置对Dubbo接口的支持,很难直 ...

随机推荐

  1. IO调度

    互联网公司不关注真实的文件系统,他们关注VFS层,关注block层,关注IO的管控. queue->make_request_fn ( blk_queue_bio ),其中blk_queue_b ...

  2. Java集合整体框架

    Java中的集合类有List.Set.Map Collection的实现类:List.Set List的实现类:ArrayList.LinkedList.Vector Set的实现类:HashSet. ...

  3. 对于response.setContentType(MIME)的解释

    response.setContentType(MIME)的作用是使客户端浏览器,区分不同种类的数据,并根据不同的MIME调用浏览器内不同的程序嵌入模块来处理相应的数据.例如web浏览器就是通过MIM ...

  4. NotifyIcon控件

    NotifyIcon就是系统托盘控件.通知区域中的图标是一些进程的快捷方式,这些进程在计算机后台运行,如防病毒程序或音量控制.这些进程不会具有自己的用户界面.NotifyIcon 类提供了编写此功能的 ...

  5. 51nod 1779逆序对统计(状压DP)

    按照插入数的大小排序, 然后依次进行dp. 用一个状态表示n个数是否被选了 10110 就是表示第1.3.4个位置都选了 那么如果此时这个数该填到5这个位置,那么必定会造成一个逆序(因为下一个数会填到 ...

  6. [洛谷P3765]总统选举

    题目大意:有$n(n\leqslant5\times10^5)$个数,有$m(m\leqslant5\times10^5)$次询问. 一次询问形如$l\;r\;s\;k\;w_1\;w_2\dots ...

  7. BZOJ3289 Mato的文件管理 【莫队 + 树状数组】

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 3964  Solved: 1613 [Submit][Status] ...

  8. 树形DP小结

    树形DP1.简介:树是一种数据结构,因为树具有良好的子结构,而恰好DP是从最优子问题更新而来,那么在树上做DP操作就是从树的根节点开始深搜(也就是记忆化搜索),保存每一步的最优结果.tips:树的遍历 ...

  9. i=i+1与i+=1的区别及效率(Java)

    原博客地址 在做个java优化的PPT时,看到了i=i+1与i+=1的区别,在这之前还真没想到那么细. 1.x=x+1,x+=1及x++的效率哪个最高?为什么? x=x+1最低,因为它的执行如下. ( ...

  10. python并发进程

    1 引言 2 创建进程 2.1 通过定义函数的方式创建进程 2.2 通过定义类的方式创建进程 3 Process中常用属性和方法 3.1 守护进程:daemon 3.2 进程终结于存活检查:termi ...