首页 > 技术文章 > 怎么测试PB协议的接口:

testling 2020-12-08 11:12 原文

什么是PB协议:Protocol Buffer是Google提供的一种数据序列化协议:

  • 稳定可维护的Node socket.io服务(socket篇)

  • PB的动态编译的特性和嵌套message,数据结构简单化(数据篇)

  • 前端对于二级制的的处理,例如ArrayBuffer,序列化与反序列化,MD5加密(加密篇)

 

1.其实不用管他是什么协议,我们只需要明白,作为测试他能否实现业务需要的功能,然后能否抗住压力  (基本功能+性能压力)

 

2.proto文件 需要转化为python的协议文件 ,具体方式 是 pip install protobuf

 

3.安装了这个包 可以pip  show protobuf  看一下

 

4.生成命令:protoc --proto_path=PROTO_PATH --python_out=OUT_DIR xxx.proto  

 

5.生成python的协议文件之后,我们需要创建好请求参数 json格式就行 

 

data = {
"data": [
{
"f1": 1.0,
"f2": 1.0,
"f3": 1,
"f4": 1,
"f5": 1,
"f6": 1,
"f7": "aa",
"f8": "12222222",
"f9": 12222222,
"f18": "aa",
"f19": "12222222",
"f12": "aa",
"f13": "aa",
"f10": 1,
"f11": "com.android.browser",
"f16": "aa",
"f17": "aa",
"f14": "aa",
"f15": "aa"
}
]
}


例如;如上的json 通过json to pb来转化我们需要的pb格式
from google.protobuf.json_format import ParseDict
da = ParseDict(js_dict=data, message=LogSyncMessage())
data = da.SerializeToString() # 进行序列化

然后requests 发起请求就ok了


6.对于一些大数据量的传输,可能需要将序列化之后的数据 进行gzip进行压缩传输请求

列出压缩的函数:

def Testzip(c_data):
buf = StringIO()
try:
with gzip.GzipFile(mode='wb', fileobj=buf) as f:
f.write(c_data)
return buf.getvalue()
except Exception as e:
print ("compress wrong" + e)
finally:
f.close()

发起请求 将json进行转化为pb格式 然后进行序列化 然后利用公共函数 进行gzip进行压缩 然后发起请求
data = da.SerializeToString()  # 序列化
data = self.Testzip(data)
r = requests.post(url=url, data=data, headers=self.header)


完成



推荐阅读