前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python+fiddler模拟Protobuf数据容错

Python+fiddler模拟Protobuf数据容错

作者头像
用户5521279
发布2020-12-24 10:55:04
1.8K1
发布2020-12-24 10:55:04
举报
文章被收录于专栏:搜狗测试搜狗测试

前言

在客户端和服务端数据传输交换中经常使用的技术是 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;

代码语言:javascript
复制
python setup.py build
python setup.py test
python setup.py install

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

代码语言:javascript
复制
protoc --version

实现脚本

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

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

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

代码语言:javascript
复制
protoc.exe ./XX.proto --python_out =./  
注:./表示当前文件夹,--python_out表示编译为py文件

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

代码语言:javascript
复制
import quick_share_pb2 as qs     #引用proto数据
from google.protobuf.json_format import MessageToJson   #引入protobuf框架

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

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

代码语言:javascript
复制
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 组件库,搭建服务器;

代码语言:javascript
复制
from http.server import BaseHTTPRequestHandler, HTTPServer
HOST = "10.129.XXX.44"  #自己的IP
PORT = 89              #任意端口号  
Handler = QuickShareHandler
httpd = 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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档