因组织要求,需要一个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
由于重重原因,(哎……
)代码暂时还开源不了,不过大家有兴趣的话,可以一起讨论讨论,知无不言,言无不尽