因组织要求,需要一个Dubbo接口的测试工具,经多方研究,遂决定要写一个不需要编写任何代码,直接在页面上填写数据就能直接运行Dubbo接口的测试工具,类似于Postman编写http接口一样简单。

整个平台采用B/S结构,后台服务采用的是python的django框架

传输方式为 TCP + Hessian

平台没有用到zk,都是直接在前端页面填写IP:PORT直连的

目前实现的功能:

解析相关jar包,把接口、函数、函数参数直接显示在web界面

每个版本接口、函数的对比,并在web界面显示差异

可直接在界面上填写需要的数据,一键完成数据整理、发送,包含返回数据的显示

现已支持java大部分的数据类型,不仅包括基础类型(String、Boolean、Byte、Double、Integer、Date、Void)等;容器类型(Map、HashMap、List、HashSet、Vector)等;还支持Object对象的传递,包含Enum;对于泛型或者一些特殊在运行过程中才知道的对象,web界面可以支持测试人员自定义对象属性

用例的创建

后期准备实现的功能:

用例的断言

测试计划

创建mock数据服务

完全自定义接口、函数及函数参数

接口列表界面

函数列表界面

用例添加和调试界面

自定义数据结构界面

需要考虑的点

由于python的Dict类型,key不支持List和Dict类型,主要是List和Dict类在python中没有实现__hash__,故自定义一个类,实现一个__hash__函数,其他继承这两个类就可以了

class PDict(dict):

def __hash__(self):

return id(self)

class PList(list):

def __hash__(self):

return id(self)

由于前后端传输的类型我们选择是json格式,而且json能存储的类型有限,由于我们在json格式的数据中自定义了一套我们自己的数据结构,后台会把前端传给我们的json数据再进行二次编译,编译成java所需要的各种数据类型

比方说java中的数据类型为:

这里表示有三个参数,第一个参数为Dict类型,第二个参数为String类型,第三个参数为自定义枚举类型

Ljava/util/Map;Ljava/lang/String;Lcom/test/enums/DataAPIEnum;

翻译成前后端都认识的类型为:

[{"valueMetaType": "", "keyChildren": [{"children": [], "type": "String", "name": "String", "metaType": ""}], "name": "Map", "keyType": "String", "valueChildren": [{"metaType": "", "type": "Object", "children": [], "name": "Object"}], "keyMetaType": "", "valueType": "Object"}, {"metaType": "", "type": "String", "children": [], "name": "String"}, {"metaType": "com/test/enums/DataAPIEnum", "type": "Enum", "children": [], "name": "Enum"}]

然后把需要的值填入上述json里面的children字段就好,这个大家看过就好,没准你们就更好的想法也不一定

hessian协议的pack与unpack:这里我参考的是github上大神的代码,做了二次开发,调试过程中也针对性的修改了一些东西,地址:https://github.com/zhouyougit/PyDubbo,

PS

由于重重原因,(哎……

)代码暂时还开源不了,不过大家有兴趣的话,可以一起讨论讨论,知无不言,言无不尽

python编写测试系统_纯 python 编写的一套 dubbo 测试平台相关推荐

  1. python进行矩阵计算公式_纯python进行矩阵的相乘运算的方法示例

    本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下: def matrixMultiply(A, B): # 获取A的行数和列数 A_row, A_col = shape(A) ...

  2. python矩阵乘法算法_纯python进行矩阵的相乘运算的方法示例

    本文介绍了纯python进行矩阵的相乘运算的方法示例,分享给大家,具体如下: def matrixMultiply(A, B): # 获取A的行数和列数 A_row, A_col = shape(A) ...

  3. python课表查询系统_使用python抓取广西科技大学教务系统课程表

    因学校教务系统课程表查询功能累赘,服务器经常挂,同时也不适合手机端查询,所以用python开发爬虫抓取所有课程表,放到我的服务器上面. 本文仅供学习. 特性 中途退出程序再次运行不会抓取到重复课程表 ...

  4. python 成绩分析系统_用Python编写成绩管理分析系统(故事升级版)

    目录 项目总览 生活小故事引入 项目思路 项目实现 功能改善 代码展示 效果演示 项目后期 项目适用 每文一语 项目总览 生活小故事引入 微风和煦,散乱在办公桌上的测验小试卷还有几分"热度& ...

  5. python颜色识别算法_纯Python编写K-means算法,提取图片中的主体颜色

    在文章 今天我用Python手写了一个K-means算法,来完成同样的功能. 聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓"物以类聚,人以群分&qu ...

  6. python银行排队系统_【Python编程特训·连载30】市政务中心排队系统 答案发布

    请用你所掌握的Python语言完成"市政务中心排队系统" 难度系数:☆ ☆ ☆ 排队系统,又称叫号排队系统,是一种综合运用计算机.多媒体等设备对用户服务进行有效管理的一种按序进行服 ...

  7. python制作网页系统_使用python静态网页生成工具pelican快速在github上部署网站博客...

    简介 Pelican用Python编写的静态站点生成器.亮点: 使用reStructuredText或Markdown格式直接用编辑器编写内容 简单的CLI工具来(重新)生成站点 易于与分布式版本控制 ...

  8. python智能办公系统_用 Python 自动化办公能做到哪些有趣或有用的事情?

    Python的学习资料,网上随便搜都是大把的 不过那些基本上没什么干货 好的学习资料是系统的,全面的 从实战例子,到工具到源码,都全面的很 片面的学习,你肯定是学不好的 而且,大多数资料都是一堆理论的 ...

  9. python股票查询系统_使用python获取股票的上市日期等基本信息

    之前介绍过一个Baostock的python证券数据平台,如今又增加了新的功能,提供了股票上市日期目,上市状态等信息的获取,也可以查询退市股票的信息. 还是按照之前的惯例,上代码: import ba ...

最新文章

  1. jQuery对表单元素的取值和赋值操作代码
  2. 20150309+Linux+LAMP安装-02
  3. DevOps发展的9个趋势
  4. 这是一个测试:测试博客在浏览器中是否可以显示数学内容以及代码格式
  5. SAP Fiori SSL 和 SAML 2.0 配置文档
  6. python应用体系_python-大型django应用程序体系结构
  7. 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
  8. 【Java】计算8+88+888+8888+....前12项的和
  9. 收获,不止SQL优化——抓住SQL的本质--第二章
  10. Unity渲染管线-百人计划笔记
  11. Android 通过软引用实现图片缓存,防止内存溢出
  12. 飞鸽传书【经典版】(飞鸽传书2011)
  13. 目标检测_CVPR2020
  14. 流量压力折射移动互联网困局
  15. 计算机软件基础自考实践报告,信息作战自考实践报告
  16. Excel查找重复行
  17. 为何公众号推送会延迟发送_【微课堂】小程序引流神器—微信公众号营销
  18. BLE-1の蓝牙4.0协议栈概览
  19. 逢二进一 、逢八进一、逢十六进一
  20. 揭开计算机神秘的面纱教学反思,《揭开计算机神秘的面纱》教学设计.doc

热门文章

  1. 管理软件预警通知(Notification)功能的实现案例分析
  2. 解决paramiko获取远程脚本延时返回数据的问题
  3. springboot springmvc 抛出全局异常解决方法
  4. python 异常处理中try else语句的使用
  5. 在解决方案中所使用 NuGet 管理软件包依赖
  6. 避免HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常
  7. Requirement already satisfied 解决方法
  8. 如何复制静态文件以使用Webpack构建目录?
  9. 如何在JavaScript中反转字符串?
  10. iOS使用shell脚本批量修改属性