热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Pb协议的接口测试

本文节选自霍格沃兹测试学院内部教材ProtocolBuffers是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具有可扩展的机制。用于序列化结构化数据,此工具对标XML,

本文节选自霍格沃兹测试学院内部教材


Protocol Buffers 是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具有可扩展的机制。用于序列化结构化数据,此工具对标 XML

,支持自动编码,解码。比 XML 性能好,且数据易于解析。更多有关工具的介绍可参考官网。

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

Protocol Buffers 为跨平台设计,以 Python 为例,使用者配置 .proto 文件,利用 Protocol Buffers

工具即可生成 Python 代码,此代码就是使用者想要的数据结构。

如果编程语言换成了 Java ,使用者可使用相同的 .proto 文件,利用 Protocol Buffers 工具生成 Java

代码,此代码可被 Java 进行解析。

这么做的好处是可以跨语言交流,试想 Java 与 Python 间的数据通信,只需要利用 .proto

确定格式,就可随心编程,这个过程惬意无比。基于 Protocol Buffers 的测试也无比舒服。

你可选择自己的语言进行测试,比如 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_pb2person = addressbook_pb2.Person()person.id = 1234person.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/python
import addressbook_pb2import 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 = email
while True: number = raw_input("Enter a phone number (or leave blank to finish): ") if number == "": break
phone_number = person.phones.add() phone_number.number = number
type = raw_input("Is this a mobile, home, or work phone? ") if type == "mobile": phone_number.type = addressbook_pb2.Person.PhoneType.MOBILE elif type == "home": phone_number.type = addressbook_pb2.Person.PhoneType.HOME elif type == "work": phone_number.type = addressbook_pb2.Person.PhoneType.WORK else: 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/python
import addressbook_pb2import 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.id print " Name:", person.name if person.HasField('email'): print " E-mail address:", person.email
for 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

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

** _

来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力

QQ交流群:484590337

公众号 TestingStudio

点击获取更多信息



推荐阅读
  • 我是GoogleProtobuf的新手。我想解决一个问题,但我无法在互联网上找到答案, ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • golang基础-protobuf使用,Go语言社区,Golang程序员人脉社 ... [详细]
  • protobuf 安装_protobuf详解
    protobuf详解一、什么是protobufprotobuf全称GoogleProtocolBuffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具 ... [详细]
  • 学习gRPC1.工作原理是什么
    什么是gRPCgRPC已经成为实现需要大规模快速运行的分布式软件系统的一项重要技术。简而言之,gRPC是一个API框架,它允许一个程序在互联网上的一个位置传递数据到另一个位置的另一 ... [详细]
  • gRPC框架学习:2、ProtocolBuffers学习文章目录gRPC框架学习:2、ProtocolBuffers学习1.前言2.定义消息类型(1). ... [详细]
  • Google ProtoBuf的使用
    Google的protobuf太好用了,又小,读写又快跑步快慢受鞋的影响太大了,但是造鞋的工具研究起来还是很有难度的,百度 ... [详细]
  • 谷歌宣布在 Kotlin 中支持 Protocol Buffers 数据格式
    谷,歌,宣布,在,kotlin,中,支持,protocol,buf ... [详细]
  • Go实战--golang中使用gRPC和Protobuf实现高性能api(golangprotobuf、google.golang.orggrpc),Go语言社区,Golang程序 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
author-avatar
小王子loving
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有