软件测试|不会Python RPC,一篇文章教你入门

简介: 软件测试|不会Python RPC,一篇文章教你入门

在这里插入图片描述

RPC,全程为 Remote Procedure Call,是一种进程间的通信方式,它采用「 服务端 / 客户机 」模式,是一种请求响应模型

其中,服务端负责提供服务程序、响应请求做具体的实现逻辑,客户机负责请求调用

主流的 RPC 框架包含:

  • 阿里的 Dubbo
  • Facebook 的 Thrift
  • Google 的 gRpc

其中,gRpc 和 Thrift 是跨语言的 RPC 服务框架,并且 Thrift 相比性能更高

本篇文章以 Thrift 为例,聊聊 Python 中使用 RPC 的流程

thriftpy2 介绍

Thrift 是一种接口描述语言和二进制通讯协议,它可以被用来定义和创建跨语言的服务,使得不同语言的客户端、服务器之间能进行高效透明的通信

thriftpy2 是在 Thrift 的基础上进行二次封装,使用它编写 RPC 更加方便快捷

首先,我们在虚拟环境下安装依赖包

# 安装依赖
pip3 install thriftpy2

然后,如果是 Windows系统电脑,建议在 Pycharm 中安装 thrift 插件

PS:该插件可以方便我们编写 Thrift 通讯文件

首先,根据需求编写 Thrift 通讯文件

比如,该文件定义 2 个方法

无参函数 ping
登录 login包含两个参数:username、password

# foo.thrift
service PingPong{
string ping(),
string login(
1: string username,
2: string password
)
}

然后,编写服务端代码

根据 Thrift 通讯文件中定义的方法,编写具体的实现逻辑

创建一个服务对象,指定绑定的 ip 地址及端口号,开启服务并监听消息

# rcp_server.py
import thriftpy2
from thriftpy2.rpc import make_server
# 读取通信配置文件
pingpong_thrift = thriftpy2.load("foo.thrift", module_name="pingpong_thrift")
class Dispatcher(object):
"""根据通信配置文件定义的方法,重写实现方法"""
def ping(self):
"""
Ping一下
:return:
"""
return "pong"
def login(self, username, password):
"""
登录
:param username: 用户名
:param password: 密码
:return:
"""
print('获取客户端传过来的参数,用户名:',username,",密码:",password)
return '登录成功!'
# 创建服务,指定本地ip地址及监听端口号
server = make_server(pingpong_thrift.PingPong, Dispatcher(), '192.168.40.217', 9000)
# 开启服务并监听
server.serve()

接着,编写客户端代码

这里,根据服务端提供的 ip 地址、端口号,创建客户端连接对象,调用通信文件中定义好的方法

PS:如果客户端在远程执行,需要将 Thrift 通讯文件放置到同级目录下执行

# rcp_client.py
import thriftpy2
from thriftpy2.rpc import make_client
# 读取通信配置文件
pingpong_thrift = thriftpy2.load("foo.thrift", module_name="pingpong_thrift")
# 创建客户端
client = make_client(pingpong_thrift.PingPong, '192.168.40.217', 9000)
# 调用通信文件中定义好的方法(实际调用服务端的方法)
print(client.ping())
print(client.login('root', 'pwd'))

最后,分别运行服务端和客户端的代码

使用 WireShark 进行抓包分析,能发现服务端和客户端通讯的方式及数据传输过程

总结

企业项目中,常用的 HTTP 的特点是简单、开发方便,上手简单、是主流的数据传输协议

相比 HTTP 或 H2,RPC 的主要优势体现在安全高、性能消耗低、传输效率高、服务治理方便上,所以我们可以根据实际项目需求选择合理的数据通信方式。

相关文章
|
2月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
298 7
|
3月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
332 1
|
2月前
|
Cloud Native 算法 API
Python API接口实战指南:从入门到精通
🌟蒋星熠Jaxonic,技术宇宙的星际旅人。深耕API开发,以Python为舟,探索RESTful、GraphQL等接口奥秘。擅长requests、aiohttp实战,专注性能优化与架构设计,用代码连接万物,谱写极客诗篇。
Python API接口实战指南:从入门到精通
|
2月前
|
存储 Java 调度
Python定时任务实战:APScheduler从入门到精通
APScheduler是Python强大的定时任务框架,通过触发器、执行器、任务存储和调度器四大组件,灵活实现各类周期性任务。支持内存、数据库、Redis等持久化存储,适用于Web集成、数据抓取、邮件发送等场景,解决传统sleep循环的诸多缺陷,助力构建稳定可靠的自动化系统。(238字)
488 1
|
3月前
|
调度 数据库 Python
Python异步编程入门:asyncio让并发变得更简单
Python异步编程入门:asyncio让并发变得更简单
189 5
|
3月前
|
数据采集 存储 XML
Python爬虫入门(1)
在互联网时代,数据成为宝贵资源,Python凭借简洁语法和丰富库支持,成为编写网络爬虫的首选。本文介绍Python爬虫基础,涵盖请求发送、内容解析、数据存储等核心环节,并提供环境配置及实战示例,助你快速入门并掌握数据抓取技巧。
|
3月前
|
大数据 数据处理 数据安全/隐私保护
Python3 迭代器与生成器详解:从入门到实践
简介:本文深入解析Python中处理数据序列的利器——迭代器与生成器。通过通俗语言与实战案例,讲解其核心原理、自定义实现及大数据处理中的高效应用。
157 0
|
11月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
6月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
987 23
|
8月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
1097 24

推荐镜像

更多