Python调用RPC接口
背景
在测试过程中经常需要手动调用后端rpc接口,目前有三种调用方式
1.通过类似go 反射的方式,将http请求转为rpc请求
2.直接在pod中通过grpcurl命令调用
3.通过python代码直接调用
通过grpcurl命令行调用
- 安装grpcurl
# 通过wget下载
wget https://github.com/fullstorydev/grpcurl/releases/download/v1.8.7/grpcurl_1.8.7_linux_x86_64.tar.gz
- 上传pb文件
# 上传pb文件
tar -zcvf protobuf.tar.gz protobuf
sftp -o xxx {
ip}
注意:如果pb文件中依赖,可以将import 文件的路径移除,把依赖的文件放到pb同目录下
例如:
# 依赖
import "/xxx/xxx/xxx/common.proto";
# 改为
import "common.proto";
再将依赖文件拷贝过来
cp /xxx/xxx/xxx/common.proto .
- 在grpcurl根目录执行命令
./grpcurl -plaintext -d '{"user_id": 1,"order_id": 1}' -import-path protobuf/protobuf3-include -import-path protobuf -proto protobuf/protobuf3/order/order.proto {
ip}:{
port} order.OrderManager/CreateOrder
通过python client请求接口
类似go,需要先转为python可用的rpc client才能调用
- 安装工具包
# 升级pip
$ python -m pip install --upgrade pip
# 安装grpc
$ python -m pip install grpcio
# 安装grpc工具
$ python -m pip install grpcio-tools
- 生成接口文件
# -*- coding: utf-8 -*-
"""
@Time : 2022/2/10 下午2:31
@Author :
@File : compile_proto.py
"""
import os
from pathlib import Path
def combile_pbfile(pb_file_name):
for filename in os.listdir