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 TServer

class LoginThrift(object):
def __init__(self):
pass

def 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 TBinaryProtocol

def 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,client

def test_thrift_login_invoke():
  transport,client=conn_thrift()
  status=0
  token=str(uuid.uuid4())
  isActive=True
  data=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的测试用例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值