Pb协议的接口测试

【摘要】 Protocol Buffers 是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具有可扩展的机制。用于序列化结构化数据,此工具对标 XML ,支持自动编码,解码。比 XML 性能好,且数据易于解析。更多有关工具的介绍可参考官网。Protocol Buffers官网:https://developers.google.com/protocol-buffers 1Protocol B...

Protocol Buffers 是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具有可扩展的机制。用于序列化结构化数据,此工具对标 XML ,支持自动编码,解码。比 XML 性能好,且数据易于解析。更多有关工具的介绍可参考官网。

Protocol Buffers官网:https://developers.google.com/protocol-buffers 1

Protocol Buffers 为跨平台设计,以 Python 为例,使用者配置 .proto 文件,利用 Protocol Buffers 工具即可生成 Python 代码,此代码就是使用者想要的数据结构。


如果编程语言换成了 Java ,使用者可使用相同的 .proto 文件,利用 Protocol Buffers 工具生成 Java 代码,此代码可被 Java 进行解析。


这么做的好处是可以跨语言交流,试想 Java 与 Python 间的数据通信,只需要利用 .proto 确定格式,就可随心编程,这个过程惬意无比。基于 Protocol Buffers 的测试也无比舒服。

1080×303 63.9 KB


你可选择自己的语言进行测试,比如 Python 。由于数据格式基于 .proto 配置文件,获取到这个文件即可生成数据类,比如下述 .proto 内容通过 protoc --python_out=./ ./addressbook.proto 命令即可生成 addressbook_pb2.py 文件:

syntax = "proto2";package tutorial;message Person {optional string name = 1;optional int32 id = 2;optional string email = 3;enum PhoneType {MOBILE = 0;HOME = 1;WORK = 2;}message PhoneNumber {optional string number = 1;optional PhoneType type = 2 [default = HOME];}repeated PhoneNumber phones = 4;
}message AddressBook {repeated Person people = 1;
}

测试人员的代码只需导入 addressbook_pb2 ,对其初始化后即可使用,比如对 Person 的字段加入一些测试值:

import addressbook_pb2
person = addressbook_pb2.Person()
person.id = 1234
person.name = "John Doe"
person.email = "jdoe@example.com"
phone = person.phones.add()
phone.number = "555-4321"
phone.type = addressbook_pb2.Person.HOME

最后,将 person 序列化后即可传输到被测对象。如果你的业务采用文件进行数据传输,可参考官方写文件的例子(采用 python2 ):

#! /usr/bin/pythonimport addressbook_pb2
import sys# This function fills in a Person message based on user input.
def PromptForAddress(person):person.id = int(raw_input("Enter person ID number: "))person.name = raw_input("Enter name: ")email = raw_input("Enter email address (blank for none): ")if email != "":person.email = emailwhile True:number = raw_input("Enter a phone number (or leave blank to finish): ")if number == "":breakphone_number = person.phones.add()phone_number.number = numbertype = raw_input("Is this a mobile, home, or work phone? ")if type == "mobile":phone_number.type = addressbook_pb2.Person.PhoneType.MOBILEelif type == "home":phone_number.type = addressbook_pb2.Person.PhoneType.HOMEelif type == "work":phone_number.type = addressbook_pb2.Person.PhoneType.WORKelse:print "Unknown phone type; leaving as default value."# Main procedure:  Reads the entire address book from a file,
#   adds one person based on user input, then writes it back out to the same
#   file.
if len(sys.argv) != 2:print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE"sys.exit(-1)address_book = addressbook_pb2.AddressBook()# Read the existing address book.
try:f = open(sys.argv[1], "rb")address_book.ParseFromString(f.read())f.close()
except IOError:print sys.argv[1] + ": Could not open file.  Creating a new one."# Add an address.
PromptForAddress(address_book.people.add())# Write the new address book back to disk.
f = open(sys.argv[1], "wb")
f.write(address_book.SerializeToString())
f.close()

也可从被测对象传来的文件中读数据:

#! /usr/bin/pythonimport addressbook_pb2
import sys# Iterates though all people in the AddressBook and prints info about them.
def ListPeople(address_book):for person in address_book.people:print "Person ID:", person.idprint "  Name:", person.nameif person.HasField('email'):print "  E-mail address:", person.emailfor phone_number in person.phones:if phone_number.type == addressbook_pb2.Person.PhoneType.MOBILE:print "  Mobile phone #: ",elif phone_number.type == addressbook_pb2.Person.PhoneType.HOME:print "  Home phone #: ",elif phone_number.type == addressbook_pb2.Person.PhoneType.WORK:print "  Work phone #: ",print phone_number.number# Main procedure:  Reads the entire address book from a file and prints all
#   the information inside.
if len(sys.argv) != 2:print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE"sys.exit(-1)address_book = addressbook_pb2.AddressBook()# Read the existing address book.
f = open(sys.argv[1], "rb")
address_book.ParseFromString(f.read())
f.close()ListPeople(address_book)

如果数据通过 https 传输,可采用 requests ,其它传输方式同理,请自行查阅数据传输工具。如果测试人员代码与被测对象建立了联系,即可收发测试数据,测试人员对接收到的数据编写测试用例即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351171.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

nopi 缩小字体填充_我在超市里改字体

- 今天,2020年第一天,送篇字体教程给大家,让大家在学习中拥抱这新的一年,嗯,我们就是这么贴心呢! 这次主题是《我在超市改字体》,前段时间,我带工作室小伙伴们去楼下超市拍了一些产品包装上的图…

可扩展性与生态应用:Ardor公链AMA回顾

近日,Jelurida团队工程师Francisco Sarrias做客CryptoWallet.com,分享了一些有关Ardor的话题: Ardor是什么? Ardor是一个旨在提高区块链可扩展性的开源平台,这意味着该项目有助于使区块链网络运行更顺畅,用…

100天精通Golang(基础入门篇)——第1天:学习Go语言基本概念

🌷 博主 libin9iOak带您 Go to Golang Language.✨ 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《I…

什么是压力测试?如何进行Jmeter压力测试

一、什么是压力测试 软件测试中:压力测试(Stress Test),也称为强度测试、负载测试。压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、…

2023网安164道面试题(附答案)

最近有不少小伙伴跑来咨询: 想找网络安全工作,应该要怎么进行技术面试准备?工作不到 2 年,想跳槽看下机会,有没有相关的面试题呢? 为了更好地帮助大家高薪就业,今天就给大家分享两份网络安全工…

安装MySQL出现:无法定位序数4699于动态链接库 ...\bin\mysqld.exe

在安装MySQL的时候,在Apply Configuration中的Initializing Database出现错误,具体如下所示: 出错的原因及对应的解决办法如下: (1)卸载老版本的MySQL数据库没有卸载干净,建议重新卸载老版本的…

无法定位序数

无法定位序数31。各位大神,这种情况该怎么办😟

求助:无法定位序数于动态链接库....SSLEAY32.dll上

我百度搜了类似的解答,尝试了更换dll文件,还有修复c库,都以失败告终。 本来用的好好的,突然出现这个情况。

win10安装sql2000 无法定位序数1于动态链接库c:\windows\system32\sqlunirl.dll

win10安装sql2000 无法定位序数1于动态链接库c:\windows\system32\sqlunirl.dll 解决方法: 1、首先取得权限,管理员权限.只要将下面的注册表文件(‘管理员权限.reg’)导入,右键就有管理员权限权限。 2、在c:\windows\syswow64中右键取得sqlunirl.dll的…

无法定位序数4999于动态链接库libmysql.dll的解决办法

1、无法定位序数4999于动态链接库libmysql.dll的解决办法 在保证 包含目录和包含的库都已经设置完毕,链接器也添加了libmysql.dll情况下仍然出现这个问题。。 我最后是在源程序的.h .cpp目录下 添加了这个dll就可以了。而且一定要最新的。 2、c 链接mysql&#xf…

Spring为什么默认是单例的?

目录 一、五种作用域 二、单例bean与原型bean的区别 三、单例Bean的优势与劣势 一、五种作用域 1.singleton: singleton是Spring Bean的默认作用域,也就是单例模式。在整个应用程序中,只会创建一个实例,Bean的所有请求都会共享这个实例。 …

如何打造微信私域?

现如今,微信已经从社交通讯软件,慢慢被默认为常规办公软件,工作沟通、业务洽谈、网络会议等都在微信上进行,完全变成职场首选的社交工具。 然而,由于微信平台的限制,很多企业在微信私域营销方面遇到了很多…

Linux中的ACL以及加固

ACL访问控制 // ACL:Access Control List 访问控制列表 // -p :以原始格式显示 ACL [rootzbx ~]# getfacl -p /root/ // 查看ACL策略 # file: /root/ # owner: root # group: root user::r-x group::r-x other::--- 设置ACL策略 // -m : 修改文件的ACL // -b : 表示删除所有的…

分享140个HTML公司企业模板,总有一款适合您

分享140个HTML公司企业模板,总有一款适合您 140个HTML公司企业模板下载链接:https://pan.baidu.com/s/1C38R80gdY8SMGz3FpDDzAA?pwddl21 提取码:dl21 Python采集代码下载链接:采集代码.zip - 蓝奏云 商务网站手机wap模板下载…

也谈用户体验这件小事

对于我这种非产品经理出身的普通人,谈“用户体验”是不是有点不自量力? 用户体验是“小事”吗?普通人懂吗?可能在产品经理的眼中,用户体验不是一般人都能懂的。可是产品做出来之后,是给谁体验的呢&#xff…

怎么学习linux

内容简介 本书源自日均阅读量近万次火爆的线上同名课程,口碑与影响力俱佳,旨在打造简单易学且实用性强的轻量级 Linux 入门教程。 本书基于红帽 RHEL 系统编写,且内容通用于 CentOS、Fedora 等系统。本书共分为20章,内容涵盖了部…

Android最新面试实战总结

热文导读 | 点击标题阅读 金九银十跳槽季如何进阶找到合适满意的工作? Spring中的9种设计模式汇总 凛冬将至?对互联网行业人员流动性的一些看法(深度好文) 作者:骑小猪看流星 来源:http://www.apkbus.com/blog-973383-79263.html…

基于java的学生信息管理系统(含源文件)

欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 内容摘要 - 2 - 引言 - 4 - 学生信息管理系统开发的意义和目的 - 4 - 国内研究现状和应用前景 - 4 - 研究课题主要内容 - 5 - 第1章 需求分析 - 6 - 第2章…

基于java的学生学籍管理系统(含源文件)

欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 目录 内容摘要 - 2 - 引言 - 4 - 学生学籍管理系统开发的意义和目的 - 4 - 国内研究现状和应用前景 - 4 - 研究课题主要内容 - 5 - 第1章 需求分析 - 6 - …

“独裁”的张小龙和他的微信帝国诞生记

2010年11月20日这一天,在广州,一个六七人的产品小组正式组建。2011年10月1日,这个产品小组的一款产品登上了中国移动互联网即时通讯工具软件第一的位置。 这款产品叫“ 微信”,主导了这款产品的人是 张小龙,时任腾讯…