美文网首页python技术专栏
python测试dubbo接口

python测试dubbo接口

作者: huxt | 来源:发表于2019-05-28 11:15 被阅读0次

    开发配置:

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

    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.clientimport HessianProxy

    # 从pyhessian导入HessianProxy,用它来发请求

    from pyhessianimport protocol

    # 这个是用来进行把咱们python的数据类型序列化成二进制的

    def dubbo_api(url, interface, method, param_obj, **kwargs):

    '''

        :paramurl: url地址

        :paraminterface: 接口名称,因为这里可能还有别的服务要测,接口名不一样,这里定义成变量

        :parammethod: 调用哪个方法

        :paramparam_obj: 入参的对象

        :paramkwargs: 这个用关键字参数,因为每个接口的参数都不一样,不固定,所以这里用关键字参数

        :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接口

        本文链接:https://www.haomeiwen.com/subject/inrrtctx.html