flask微服务框架的初步接触

时间:2021-06-23 04:30:04
  测试2个关联的系统接口时,经常会遇到被测试系统或被测app的处理内部处理流程会依赖另一个系统的接口返回结果,这时,
常用的做法就是写一个模拟测试桩,用作返回请求时的结果。java可以用servicelet来实现,而python可以使用flask这个框架来实现,
并且,实现起来也比java相对简单一些。 编程语言的永远第一个示例,hello world from flask import Flask, request    #安装 flask和flask_restful 包
from flask_restful import Api, Resource app=Flask(__name__) #实例化,__name__为系统变量
api=Api(app) #restful API的固定写法
class HiWorld(Resource): #创建一个类,并继承flask_restful.Resource;定义为一个资源
def get(self):
return {'Hello':'World'} api.add_resource(HiWorld,'/Hello_World/a') #将HiWorld类作为数据资源加入到api,‘/Hello_World’为请求资源地址
if __name__=="__main__":
app.run(host='0.0.0.0',port='8585',debug=True) #host='0.0.0.0'表示开放其他机器访问权限,debug=True表示打印调试日志,port为访问端口号
                                #请求默认地址http://127.0.0.1:5000 示例二:多个请求资源
from flask import Flask
from flask_restful import Api,Resource,reqparse,abort app=Flask(__name__)
api=Api(app) todos={
'todo1':{'task':'welcome'},
'todo2':{'task':'to'},
'todo3':{'task':'school'}
} def abort_if_todo_unexist(todo_id): #请求的资源不在todos变量中,返回404
if todo_id not in todos:
abort(http_status_code=404,message="todo{}doesn't exsit".format(todo_id)) #abort提前退出请求,并返回http状态码404 parser=reqparse.RequestParser() #解析url中参数
parser.add_argument('task',type=str) #todo
class Todo(Resource):
def get(self,todo_id): #请求时get的方法,根据url中参数获取资源
abort_if_todo_unexist(todo_id)
return todos[todo_id]
def delete(self,todo_id): #请求时delete的方法,根据url中参数删除资源
abort_if_todo_unexist(todo_id)
del todos[todo_id]
return '',204
def put(self,todo_id): #请求时put的方法,根据url中参数修改资源
args=parser.parse_args()
task={'task':args['task']}
todos[todo_id]=task
return task,201 #todolist
class Todolist(Resource):
def get(self): #请求时get的方法,url没有带参数时,返回所有变量todos的值
return todos
def post(self): #请求时post的方法,url没有带参数时,新增todos[todo_id]的值
args=parser.parse_args()
todo_id=int(max(todos.keys()).lstrip('todo'))+1
todo_id='todo%i'%todo_id
todos[todo_id]={'task':args['task']}
return todos[todo_id],201 api.add_resource(Todolist,'/todos/')
api.add_resource(Todo,'/todos/<todo_id>') #<todo_id>为传入的参数 if __name__=='__main__':
app.run(host='0.0.0.0',port='8585',debug=True)