通过 grpcurl 工具,我们可以在没有客户端代码的环境下测试 gRPC 服务。
使用前提:
1、安装grpcurl
根据github文档执行:https://github.com/fullstorydev/grpcurl
2、在注册服务之后,启动反射服务:reflection.Register(rpcServer)
主要命令:
列出服务名称:
grpcurl -plaintext localhost:4399 list
查看服务描述信息:
grpcurl -plaintext localhost:4399 describe pb.Order
根据服务名称pb.Order查看服务的方法列表:
grpcurl -plaintext localhost:4399 list pb.Order
调用方法:
linux环境:
grpcurl -plaintext -d '{"user_id": 10}' localhost:4399 pb.Order/login
(window这样执行会报错:Error invoking method “pb.Order/login”: error getting request data: invalid character ‘u’ looking for beginning of object key string)
window环境:
grpcurl -plaintext -d '{\"user_id\": 1}' localhost:4399 pb.Order/login
有些方法用了自定义token校验,通过metadata传递字段进行判断权限。因为metadata是放在 Request-Headers 内。所以用-H指定参数。
grpcurl -plaintext -H 'app_id:10086-9527' -d '{\"order_id\":1}' localhost:4399 pb.Order.orderDetail
【工具–grcpui】
除了grpcurl还有另一个利器:grpcui (web ui界面,类似postman)
根据 https://github.com/fullstorydev/grpcui 下载这个工具:
go install github.com/fullstorydev/grpcui/cmd/grpcui@latest
然后输入 grpcui -plaintext 127.0.0.1:8081 即可自动生成一个url地址访问调用rpc接口。
【工具-grpc压测:gzh】
下载:https://github.com/bojand/ghz (直接选择go install的方式)
-c:并发请求数
-n:最大请求数,达到后则结束测试
-d /–data= :请求参数。json格式。(-d的话直接空格加json字符串。–data就是=后面接json字符串)
–call:指定调用的方法。具体格式为包名.服务名.方法名 (可以通过grpcurl工具查看服务名,再通过服务名获取方法名:grpcurl -plaintext 127.0.0.1:4399 list)
ghz -c 10 -n 10 --insecure --proto ../pb/order.proto --call pb.Order.orderDetail 0.0.0.0:4399
ghz -c 10 -n 10 --insecure --proto ../pb/order.proto --call pb.Order.orderDetail -d '{\"orderId\": 3}' --metadata='{\"app_id\": \"10086-9527\"}' 0.0.0.0:4399 (window环境下json参数需要加上反斜杠)