python测试dubbo接口实用篇

python测试dubbo接口

1.背景及想法
背景:开发的工程项目代码复杂,每次在执行单测或者接口黑盒测试时候,GUI编译运行时间太长,不利于提高测试效率。
想法:探索一下python测试dubbo接口的实用性。
2.想法及思路
考察三种python dubbo实现:python+hessian,python+dubbo_telnet,python+telnetlib(后两种原理一样)前面需要安装python-hessian扩展包,前者是通过http协议请求;后者是通过模拟控制台命令行实现对dubbo接口测试。
dubbo rpc调用方式:Dubbo本身支持多种远程调用方式,例如Dubbo RPC(二进制序列化 + tcp协议)、http invoker(二进制序列化 + http协议)、hessian(二进制序列化 + http协议)、WebServices (文本序列化 + http协议)等。Dubbo是支持hessian+http协议调用的,hessian是一种二进制序列化的方式。
共同点:都需要dubbo服务ip、port、接口服务路径、接口服务包对应的实现方法、方法参数
目标,更少的参数去实现某个接口方法单测,总体思路是通过接口服务包名+headers去请求url获取html结果,通过xsls方式解析html获取指定标签结果,获取ip、port,然后建立dubbo链接,根据“ls com.xxx.xx”获取方法,最后根据所有必要参数进行填充完成接口测试:
3.简单时序图:
在这里插入图片描述

4.python+dubbo_telnet实现
原理:核心是模拟telnet命令远程控制服务器,通过输入操作命令,服务器进行执行。
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法
方法1 步骤:

  1. pip install dubbo_telnet 安装工具包 或者 下载好工具包 解压到python安装路径 /ananconda2/lib/python3.7/site_packages 也可。

2.通过selenium进行对web进行模拟登录、定位元素并模拟按钮点击事件进行查找,定位服务提供者的ip和port
在这里插入图片描述

  1. 组装控制台的执行命令
    代码:
    在这里插入图片描述

示例:
ls com.wacai.loan.panama.api.PreRepayAdvService
invoke com.wacai.loan.panama.api.PreRepayAdvService.queryPreRepayAdvApp(80186116)

4.建立Telnet服务链接,并进行写入invoke等执行命令发起请求,最后获取返回结果。
在这里插入图片描述

5.不同请求方式的执行效果对比

本地执行效果,如图:
在这里插入图片描述

本地命令行执行效果一致,如图:
在这里插入图片描述

6.附加
参数种类编写方式
1.一个或者对个参数类型(非对象)
2.对象类型 需要加class类对象路径
如下:
1.params = ‘928653657,“app.membership.able”’
2.param = {
“class”: “com.wacai.loan.panama.api.dto.MemberFeeCalRequest”,
“uid”: 82407387,
“installment”: 12,
“loanAmount”: 1010000 }
目前存在的问题:
dubbo-admin网站的服务ip地址与k2服务的地址不一致(非必现,此时需要k2查看服务ip和port)
每次请求selenium就会重新打开浏览器页面,有点繁琐(后续优化)
遇到的问题:
1.驱动加载不了,驱动需要单独下载,驱动的版本号与本地谷歌浏览器的版本保持一致;
2.部分页面授权弹窗登录,不好使用selenium进行定位元素实现交互登录
3.参数对象组装问题
4.等…
telnet命令:
Please input “help [command]” show detail.
status [-l] - Show status.
pwd - Print working default service.
trace [service] [method] [times] - Trace the service.
exit - Exit the telnet.
help [command] - Show help.
invoke [service.]method(args) - Invoke the service method.
count [service] [method] [times] - Count the service.
clear [lines] - Clear screen.
ls [-l] [service] - List services and methods.
log level - Change log level or show log
ps [-l] [port] - Print server ports and connections.
cd [service] - Change default service.

方法2请求web核心代码

在这里插入图片描述

重点优化部分—参数格式书写,如图:

在这里插入图片描述
附加:如果不是对象与普通参数混搭,比如是对象参数,那么还是按照最上面的参数构造

欢迎评论区留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章