Python+fiddler模拟Protobuf数据容错

原创
2020/12/17 08:00
阅读数 1.4K

前言


 在客户端和服务端数据传输交换中经常使用的技术是 JSON 或 XML,而小编最近在项目中接触到了一种新的数据传输框架——Protobuf,接下来我们就正式学习一下吧。


一、Protobuf介绍

简介


(1)Protocol Buffers(简称Protobuf) ,是Google出品的序列化框架,与开发语言、平台无关,具有良好的可扩展性;

(2)Protobuf和所有的序列化框架一样,都可以用于数据存储、通讯协议,是一种自动化机制的结构数据序列化方法。

优点


(1)更小——序列化后,数据大小可缩小约3倍;

(2)更高效——序列化速度更快,比XML和JSON快20-100倍,体积缩小后,传输时,带宽也会优化;

(3)更灵活——protoc编译器,自动进行序列化和反序列化;

(4)加密性好——HTTP传输内容抓包只能看到字节。


适应场景


在传输数据量大、网络环境不稳定的数据存储和RPC数据交换场景比较合适。


fiddler构造Protobuf数据响应

在测试中,经常需要做响应数据的容错,对于json格式的响应数据,大家都知道怎么做。但是对于Protobuf数据响应如何做数据容错呢?这时候我们可以通过python脚本来模拟数据响应。

下载fiddler插件


链接:https://pan.baidu.com/s/1MUVrBny4PgPmCDl4BPCHPg

提取码:9ags

工具下文件介绍


  • Inspectors

fiddler插件dll,关闭fiddler,将里面的dll文件放到fiddler安装目录下Inspectors文件夹下;

  • protobuf-net

Protobuf的C#依赖库和proto文件转换工具,将protobuf-net文件夹放到C:\Progarm Files(X86) 目录下;

使用方法


上述步骤完成后,我们打开fiddler,就可以看到在Inspectors下出现Protobuf字段了,接下来我们就可以触发并查看数据流为Protobuf请求了,不会再是一堆二进制格式数据了;


fiddler构造Protobuf数据响应

在测试中,经常需要做响应数据的容错,对于json格式的响应数据,大家都知道怎么做。但是对于Protobuf数据响应如何做数据容错呢?这时候我们可以通过python脚本来模拟数据响应。


下载安装Python Protobuf


1、下载环境包https://github.com/protocolbuffers/protobuf/releases

2、下载好以后,解压缩,把protoc-3.14.0-win64文件夹下的protoc.exe复制到protobuf-python-3.14.0/src目录下;

3、进入protobuf-3.14.0/python目录下;

4、打开cmd,输入以下命令,编译并安装protobuf-python;

python setup.py buildpython setup.py testpython setup.py install

5、查看protobuf-python是否安装成功

protoc --version

实现脚本


1、将需要修改的proto文件(服务端响应的protobuf格式数据)转换为python文件放到fiddler插件目录下,作为数据源;

(1)将proto文件放到C:\Program Files (x86)\protobuf-net\protobuf-net-VS9下,打开cmd;

(2)将当前文件夹下的proto文件编译为py文件,并且输出路径为当前文件夹;

protoc.exe ./XX.proto --python_out =./  注:./表示当前文件夹,--python_out表示编译为py文件

(3)将编译成功的XX.py文件放入python第三方库目录下,即XX/Lib/site-packages;

import quick_share_pb2 as qs     #引用proto数据from google.protobuf.json_format import MessageToJson   #引入protobuf框架

(4)python脚本中引入编译成功的proto数据;

2、获取作为响应body的数据源,修改想要做容错的数据;

def __init__(self):    self.body = qs.ServerResponseBody()   #获取服务端响应数据,即之前转化成功的proto数据    # update_infos=self.body.update_infos['whitenewlist']    container_properties = self.body.container_properties    self.body.request_class = 'soul'    container_properties['activeVpaDisappearTime'] = "30000"    container_properties['activeVpaUnfoldDisappearTime'] = "35000"    container_properties['isActiveVpa'] = "1"    container_properties['flags'] = "rrc:soul,type:soul,cv:10.12.1000"    container_properties['total_vpaminicards'] = "1"    container_properties['total'] = "0"

3、基于python中http.server 组件库,搭建服务器;

from http.server import BaseHTTPRequestHandler, HTTPServerHOST = "10.129.XXX.44"  #自己的IPPORT = 89              #任意端口号  Handler = QuickShareHandlerhttpd = HTTPServer((HOST, PORT), Handler)httpd.serve_forever()

4、在fiddler中配置搭建的服务器IP:host;

5、打开fiddler,运行脚本,再返回的数据就是修改之后的内容了。


总结

以上是小编最近在项目中学习到Protobuf相关内容,还需要持续学习并挖掘,也欢迎大家来交流~


参考链接http://venus.sogou-inc.com/AppStore/Wiki/Pages/WikiArticles.html?id=16768


本文分享自微信公众号 - 搜狗测试(SogouQA)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
云盘连接失效了,能再发下吗
2021/07/15 12:11
回复
举报
更多评论
打赏
1 评论
0 收藏
0
分享
返回顶部
顶部