前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用python可视化protobuf内容

用python可视化protobuf内容

作者头像
用户5521279
发布2020-06-04 14:38:47
1.7K0
发布2020-06-04 14:38:47
举报
文章被收录于专栏:搜狗测试搜狗测试

一、什么是protobuf

Protocol Buffers(简称protobuf)是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式,用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

二、protobuf的优缺点

(1) 优点: protobuf以高效的二进制方式存储,比XML小3到10倍,快20到100倍。 平台无关、语言无关 二进制、数据字描述 提供了完整详细的操作API (2)缺点: 可读性差:为了提高性能,Protobuf采用了二进制格式进行编码。 对于开发同学来说,在进行程序调试时,二进制格式编码阅读比较困难。 对于测试同学来说,查看请求或者响应中的特定编码格式的protobuf数据比较困难,无法直观看到数据。

三、python如何解析

小编在测试过程中接触到的protobuf文件中以url_16_le格式编码较多,故以此编码为例进行处理,借助python的codecs库可以处理此类编码,当然codecs库中还有其他编码(utf_32_le、utf_32_be、utf_16_be、utf_7、utf_8),感兴趣的小伙伴可以去了解下。

1、命令行中实现解析

2、代码中实现解析

例:解析该protobuf文件(其中2代表url_16_le编码格式的数据) 8 { 1 { 6: 117 } 2: “\311Q\256v” 5: 1 6: 1 }

(1) 取出url_16_le编码格式的内容,并重新转为byte类型

代码语言:javascript
复制
l2 = str(line).split('"')[1].replace('\\\\','\\')
l3 =bytes(l2,encoding="utf8")

l3输出结果为==>b’\311Q\256v’

(2) 数据处理(如图所示,l3输出结果解析后乱码,故需要进一步处理:\n\t\r禁止转义)

代码语言:javascript
复制
l4 =codecs.escape_decode(l3, 'hex-escape')[0]

l4输出结果为==>b’\xc9Q\xaev’(如图,处理后的数据就可以解析了哦)

(3) 数据解码

代码语言:javascript
复制
l5=codecs.utf_16_le_decode(l4)[0]

l5输出结果为==>凉皮(将结果输出到某个文件就可以直观查看数据了哦) (4) 代码总览

(5) 输出结果示例

四、小结

本文主要简单介绍了protobuf的概念及如何使用python得到可视化的数据。脚本虽简单,但在测试过程中针对每一个请求及响应,基本上都能直观的看到protobuf的数据,大大的提高了测试效率。同学们是否还有其他的可视化的方法,欢迎大家来补充~~

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

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

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

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

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