pb协议接口测试

文章目录

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。



本文开始

1.Protocol buffers

Protocol buffers:是 Google用于序列化结构化数据的语言中立、平台中立、可扩展机制--想想XML,但更小、更快、更简单。您只需定义一次数据的结构化方式,然后就可以使用特殊生成的源代码轻松地将结构化数据写入和读取各种数据流,并使用各种语言。

应用场景:Dubbo, gRPC-主要

官网地址:https://grpc.io/docs/what-is-grpc/introduction/

2.如何进行PB(Protobuf)协议接口测试呢?

2.1定义pb结构体=定义消息Message

Protobuf :是高性能微服务通信(如 gRPC)的首选协议,它用二进制换来了极速传输,用预编译机制换来了数据结构的安全与稳定。

基础定义语法

原始类型:integers, booleans, floats

消息类型:message

字段规则:required-必传 optional-可选 repeated-重复

查看官方文档:https://protobuf.dev/programming-guides/proto3/

示例定义结构

proto3 和 proto2 语法差一点,详细查看官方文档

demo.proto文件定义如下:

bash 复制代码
syntax = "proto3"; // 或者 proto2

message Person {
  int32 id = 1;           // 字段1
  string name = 2;        // 字段2
  string email = 3;       // 字段3
  
  // 嵌套消息,对应 PhoneNumber
  message PhoneNumber {
    string number = 1;
    enum PhoneType {
      MOBILE = 0;
      HOME = 1;
      WORK = 2;
    }
    PhoneType type = 2;
  }
  
  repeated PhoneNumber phones = 4; // 字段4,重复类型
}

从定义的结构查看测试需要调用的方法

2.2 使用编译器生成想要语言的文件

编译消息到各个语言代码 Protocol Compiler

下载编译器

github上下载地址:
https://github.com/protocolbuffers/protobuf/releases

【注】对应平台下载相应版本的编译器

编译器命令行命令

命令:protoc下载路径 输出语法 输出路径文件夹 定义的Proto结构文件

bash 复制代码
# protoc下载路径 输出语法 输出路径文件夹 定义的Proto文件
xxx/protoc --java_out out_java/ demo.proto
# 将demo.proto文件编译成python文件
protoc --python_out=$DST_DIR demo.proto
# 将demo.proto文件编译成java文件
protoc --java_out=$DST_DIR demo.proto

2.3 在各个语言中构建 Protobuf Runtime

可以寻找的下载路径:https://github.com/protocolbuffers/protobuf?tab=readme-ov-file#fprotobuf-runtime-installation

示例:以Java为例,Java中配置依赖

xml 复制代码
<dependency>
  <groupId>com.google.protobuf</groupId>
  <artifactId>protobuf-java</artifactId>
  <version>3.21.4</version>
</dependency>

2.4 测试pb协议接口-代码示例

在项目代码中应用 序列化反序列化网络传输等

【注】在序列化和反序列化过程中,模拟实际网络传输

开发人员会定义好pb结构,也会编译生成对应的pb文件,测试人员需要编写单元测试,调用对应编译语言的文件方法(例如:调用了Java编译的方法),验证数据序列化和反序列化结果;

java 复制代码
@Test
void pbDemo() throws InvalidProtocolBufferException {
  //1.构建对象
	Person john = Person.newBuilder()
	    .setId(1234)
	    .setName("John Doe")
	    .setEmail("jdoe@example.com")
	    .addPhones(
	        Person.PhoneNumber.newBuilder()
	            .setNumber("555-4321")
	            .setType(Person.PhoneType.HOME)
	    )
	    .build();
	  //2.序列化-模拟发送端
	  byte[] raw = john.toByteArray();
	  //3.反序列化-模拟接收端
	  Person john2 = Person.parseFrom(raw);
	  //4.断言验证
	  //验证特定字段的值是否正确传递
	  assertEquals(john2.getId(), 1234);
	  //验证序列化=反序列化后结果
	  assertEquals(john,john2);
}

作用:

标准的 单元测试,用于验证 Protobuf 生成的 Java 类功能正常。

确保数据在"对象 <-> 二进制"转换过程中准确无误。

微服务架构(特别是使用 gRPC 时)中常见的测试环节。

3. 测试流程-实际工作

整个链条是这样的:

  1. 开发人员编写 demo.proto (定义数据结构)。
  2. 运行编译命令 (例如 protoc --java_out=src/main/java demo.proto)。
  3. 编译器生成 Demo.java (包含 Person 类等所有代码)。
  4. 测试/开发人员 在项目中引用这个生成的 Demo.java,然后就可以使用 Person.newBuilder() 等方法了。

总结

✨✨✨各位读友,本篇分享到内容是否更好的帮助你理解,如果对你有帮助给个👍赞鼓励一下吧!!
🎉🎉🎉世上没有绝望的处境,只有对处境绝望的人。
🎉🎉🎉一遇挫折就灰心丧气的人,永远是个失败者。而一向努力奋斗,坚韧不拔的人会走向成功。
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

相关推荐
XDHCOM19 小时前
ORA-32484重复列名错误,ORACLE数据库CYCLE子句故障修复与远程处理方案
数据库·oracle
翻斗包菜19 小时前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
呆瑜nuage19 小时前
MySQL表约束详解:8大核心约束实战指南
数据库·mysql
liliangcsdn19 小时前
Agent Memory智能体记忆系统的示例分析
数据库·人工智能·全文检索
那个失眠的夜20 小时前
Mybatis延迟加载策略
xml·java·数据库·maven·mybatis
Rick199320 小时前
SQL 执行流程
数据库·sql
M--Y20 小时前
Redis常用数据类型
数据结构·数据库·redis
猿小喵20 小时前
MySQL慢查询分析与处理-第二篇
数据库·mysql·性能优化
Y0011123621 小时前
MySQL-进阶
开发语言·数据库·sql·mysql
徒 花21 小时前
数据库知识复习01
数据库