Thrift接口测试实践

Thrift是Facebook实现的一种高效的并且支持多种主流编程语言的远程服务调用的框架,Thrift服务器包含了用于绑定协议和传输层的基础架构,也是基于HTTP/2.0的版本实现,Thrift提供阻塞,非阻塞,单线程,多线程的模式运行在服务器上,结合容器化技术可以实现无缝的对接。

在使用Thrift之前,首先需要搭建Thrift的环境,在Mac中,搭建环境成功后,输入命令:thrift -v就会显示具体的版本号信息,具体如下图所示。

thrift -version
Thrift version 0.11.0

搭建环境成功后,下面通过具体的案例来演示下这部分的具体实战应用。

首先需要编写thrift的文件,如按文件名称为login.thrift,案例中的文件信息如下:

service Login {
string sayMsg(1:string msg);
string invoke(1:i32 status 2:string token 3:bool isActive 4:string data)
}

在Login中定义了sayMsg和invoke,下来执行命令生成对应的Python文件,在

login.thrift的目录下,执行如下命令:

thrift -gen py  login.thrift

执行成功后,会在gen_py的包下生成login的包,具体结构如下所示:

下来把login的包移动到项目的根目录下,要不无法调用,移动后的目录结构如下所示:

下来编写端的代码,源代码具体如下:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:无涯import  json
from login import Login
from thrift.transport import  TSocket
from thrift.transport import  TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServerclass LoginThrift(object):
def __init__(self):
passdef sayMsg(self,msg):
'''获取到来自客户端的请求信息'''
return json.dumps({'msg':msg})def invoke(self,status,token,isActive,data):
if status==0:
return json.dumps({'status':status,'token':token,'isActive':isActive,'data':json.loads(data)})
else:
return '请求参数错误,请检查!'if __name__ == '__main__':handler=LoginThrift()processor=Login.Processor(handler)transport=TSocket.TServerSocket('127.0.0.1',12305)tfactory=TTransport.TBufferedTransportFactory()pfactory=TBinaryProtocol.TBinaryProtocolFactory()server=TServer.TSimpleServer(processor,transport,tfactory,pfactory)print('Starting server...')server.serve()

 编写好服务端的代码后,开始编写客户端的代码,也就是具体的API测试用例,这地方主要测试对应的接口信息以及验证服务端返回的响应数据,测试代码如下:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# author:无涯import  json
import  uuid
from login import Login
from login.ttypes import *
from login.constants import  *
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocoldef conn_thrift():transport = TSocket.TSocket('127.0.0.1', 12305)transport = TTransport.TBufferedTransport(transport)protocol = TBinaryProtocol.TBinaryProtocol(transport)client = Login.Client(protocol)transport.open()
return transport,clientdef test_thrift_login_invoke():transport,client=conn_thrift()status=0token=str(uuid.uuid4())isActive=Truedata=json.dumps({"name":"wuya"})data=json.loads(client.invoke(status=status,token=token,isActive=isActive,data=data))
assert data['status']==0
assert data['data']=={'name': 'wuya'}transport.close()def test_thrift_login_sayMsg():transport,client=conn_thrift()msg='Hello Thrift'msg=json.loads(client.sayMsg(msg=msg))
assert msg['msg']=='Hello Thrift'transport.close()

 在如上代码中,对返回来的响应数据进行了反序列化的处理以及响应数据的验证。其实在之前的文章学习的成本中很详细的介绍到针对不同的协议的测试,本质的核心思想都是一样的,都是客户端与服务端之间的请求/响应模式或者是异步通信的模式。所以遇到gRPC协议还是Thrift其实看看官方的资料,就能够立刻的编写出API的测试用例。

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

   视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/337826.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32 使用 DS18B20 温度传感器实现环境温度监测

为了实现环境温度监测系统,我们可以利用STM32微控制器和DS18B20数字温度传感器。在本文中,我们将介绍如何通过STM32微控制器读取DS18B20传感器的温度数据,并展示一个简单的示例代码。 1. 系统概述 环境温度监测系统旨在使用DS18B20数字温度…

【Vue】文件管理页面制作

<template><div><div style"margin: 10px 0"><el-input style"width: 200px" placeholder"请输入名称" suffix-icon"el-icon-search" v-model"name"></el-input><el-button class"ml…

【ThreeJS入门——】WEB 3D可视化技术——threejs

简介 网页上已经可以做出很多复杂的动画&#xff0c;精美的效果。下图就是通过WebGL在网页中绘制高性能的3D图形。 threejs是一个让用户通过javascript入手进入搭建webgl项目的类库。 1、搭建第一个场景和物体 三维的物体要渲染在二维的屏幕上。首先要创建一个场景来放置物体…

bootstrap搭建一个简单的官网案例附代码

bootstrap搭建一个简单的官网案例附代码 效果常用属性完整代码 效果 大概的效果如下 主要都是用bootstrap的代码实现的 网站是照着 b站视频做的 查看视频教程 建议自己先看一遍文档再跟着视频写&#xff0c;不然可能看不懂 bootstarp中文文档 logo是从别人的站上扒的有点不太协…

zabbix监控windows主机

下载安装zabbix agent安装包 Zabbix官网下载地址: https://www.zabbix.com/cn/download_agents?version5.0LTS&release5.0.40&osWindows&os_versionAny&hardwareamd64&encryptionOpenSSL&packagingMSI&show_legacy0 这里使用zabbix agent2 安装 …

jmeter命令执行脚本

小结&#xff1a; 并发数怎么来的&#xff1f; 并发的TPS总请求数/总时间 二八原则&#xff1a;并发的TPS总请求数*0.8/总时间*0.2 稳定性测试的并发数&#xff1a;有效总请求数*0.8/有效总时间*0.2 压力测试的并发数&#xff1a;峰值请求数/峰值时间*系数

Java微服务系列之 ShardingSphere - ShardingSphere-JDBC

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项…

java.net.ConnectException: Connection refused: connect已解决

&#x1f95a;今日鸡汤&#x1f95a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 —— 《枫》 遇见问题莫着急&#xff0c;着急也没用~&#x1f636;‍&#x1f32b;️ 目录 &#x1f9c2;1.令人发麻的问题 &am…

C#入门篇(一)

变量 顾名思义就是变化的容器&#xff0c;即可以用来存放各种不同类型数值的一个容器 折叠代码 第一步&#xff1a;#region 第二步&#xff1a;按tab键 14种数据类型 有符号的数据类型 sbyte&#xff1a;-128~127 short&#xff1a;-32768~32767 int&#xff1a;-21亿多~21亿多…

Python虚拟环境轻松配置:Jupyter Notebook中的内核管理指南

问题 在Python开发中&#xff0c;一些人在服务器上使用Jupyter Notebook中进行开发。一般是创建虚拟环境后&#xff0c;向Jupyter notebook中添加虚拟环境中的Kernel&#xff0c;后续新建Notebook中在该Kernel中进行开发&#xff0c;这里记录一下如何创建Python虚拟环境以及添…

golang实现加密解密文档

golang实现加密解密文档 package mainimport ("bytes""crypto/aes""crypto/cipher""crypto/rand""encoding/base64""flag""fmt""io""io/ioutil" )func main() {encodePtr : flag.…

使用 STM32 和 DS18B20 温度传感器设计室内温度监测与报警系统

为设计室内温度监测与报警系统&#xff0c;我们将利用STM32微控制器和DS18B20数字温度传感器&#xff0c;以及蜂鸣器实现温度报警功能。在本文中&#xff0c;将介绍如何通过STM32微控制器读取DS18B20传感器的温度数据&#xff0c;并在超出设定范围时触发蜂鸣器报警。 1. 系统概…