亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述gRPC服务开发和接口测试初探Go相关的知识,希望能为你提供帮助。
之前写过了Grpc服务开发和接口测试初探【Java】,中间耽搁了一些时间,Go版本的gRPC测试开发实践才有时间学习使用。其中也是由于自己Go语言不够熟悉导致的。之前有段时间想暂时放弃Go语言的学习,导致了Go的生疏,原因是从Groovy到Java性能。
前置回归正题,Go语言版本的gRPC实践相对java来说是比较简单的,但是总体的工具链是比较复杂的,可能是因为Go生态目前相比Java还是比较匮乏吧。下面我先简述一下大致的步骤:
- 安装Go语言环境和IDE:如GoLand
- 安装protoc-gen-go,或者安装gofast,据称后者性能更高且更复杂
- 安装gRPC,这里有坑,可能是网络,大家自行解决
- 生成Demo代码,命令和参数取决于使用哪种工具
- 我这可行的,肯定不是放之四海皆准
- 解决问题也是学习提升的一部分,不能越俎代庖
proto
编写跟Java大致一致,只有一个报名的参数不太一样。下面是我的Hello.proto
内容:syntax = "proto3";
option go_package="./;
proto";
service HelloService
rpc ExecuteHi(HelloRequest) returns (HelloResponse) ;
message HelloRequest
string name = 1;
int32 age = 2;
message HelloResponse
string msg = 1;
这里主要
go_package
网上搜到的配置方式有些不一样,我没有全都尝试,大家在搜索的资料时候,尽量先看看syntax
这个参数的值,以及文章教程写作的时间,如果距离现在太久了,我建议直接关掉。搜索引擎有过滤功能,可以过滤掉过时的教程。编码【gRPC服务开发和接口测试初探Go】这里Go语言gRPC的一点优势,就是在一个项目中即可实现,Java需要先弄一个SDK这样。Go语言的gRPC的代码可以通过生成代码命令中的参数实现指定路径。我是放在了和
proto
文件的同级目录。服务端服务端代码也是比较格式化的内容,如下:
type Ser struct func (s *Ser) ExecuteHi(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error)
return &
pb.HelloResponseMsg: "Hello " + in.Name, nilfunc TestGrpcService(t *testing.T)
// 监听127.0.0.1:12345地址
lis, err := net.Listen("tcp", "127.0.0.1:12345")
if err != nil
log.Fatalf("failed to listen: %v", err)// 实例化grpc服务端
s := grpc.NewServer()pb.RegisterHelloServiceServer(s, &
Ser)// 往grpc服务端注册反射服务
reflection.Register(s)// 启动grpc服务
if err := s.Serve(lis);
err != nil
log.Fatalf("failed to serve: %v", err)
其中
pb.RegisterHelloServiceServer(s, &
Ser)
如果报错,请检查自己安装的工具protoc-gen-go
或者protoc-gen-gofast
版本,一般提取报错message
搜索也能得到解决办法。客户端下面是客户端的代码,由于学艺不精,其中大部分参数的含义目前我也不是很清楚,特别是基于
stream
的请求响应的方式使用。后面我先把Java的学完,再回过头来看Go的,按照这个顺序学习和分享。// TestGrpcClient
// @Description: gRPC客户端Demo
// @param t
func TestGrpcClient(t *testing.T)
conn, _ := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
defer conn.Close()
c := pb.NewHelloServiceClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
r, _ := c.ExecuteHi(ctx, &
pb.HelloRequest
Name: "FunTester",
Age:23,
)
fmt.Printf("msg: %s\\n", r.Msg)
控制台服务端输出:
忘记打日志了。没有输出
客户端输出:
=== RUNTestGrpcClient
msg: Hello FunTester
--- PASS: TestGrpcClient (0.00s)
PASS
Go语言的gRPC测试开发实践已经完事儿,大概率上我不会在工作中使用Go作为主力gRPC测试语言,后面测试实践内容还是会以Java为主。
Have Fun ~ Tester !
- FunTester原创大赏
- 性能测试专题【FunTester原创】
- FunTester社群风采
- 接口功能测试专题【FunTester原创】
- Java& Groovy下载文件对比
- JSON必知必会【PDF+视频教程】
- Groovy入门常用语法
- 2020年FunTester自我总结
- FunTester2021年总结
- 阿拉伯数字转成汉字
- 利用 python+plotly 制作双波源干涉三维图像
推荐阅读
- 360浏览器断网广告怎么去()
- 新买的笔记本如何优化
- 谷歌浏览器打开一个新页面时使用新的标签
- 实践GoF的23种设计模式(建造者模式)
- Sublime Text 全局搜索Ctrl+Shift+F快捷键不能用
- 会声会影x7 每次安装均会提示(已安装这个产品的另一个版本)
- Sublime 添加∕删除右键菜单.bat
- 开机启动流程
- 实战案例(Redis集群动态缩容)