系列文章目录
提示:阅读本章之前,请先阅读目录
文章目录
前言
本章会介绍,Postman的mock,以及python flask 框架的mock教程
一、为什么要自定义接口(Mock)?
从某种意义上来说,我们mock的数据,实际上就是接口的数据
我们为什么要模拟数据呢?
- 解决前后端分离开发的依赖,在前端开发的时候,需要依赖后端的接口,但是此时后端的接口还未开发完成,那么,前端就要被耽搁吗?显然不是,如果,这个时候,我们能够有一个模拟的接口,来模拟返回数据,不进行复杂的业务数据处理,那么,这样就可以加快前端开发进度。
- 有时候,我们需要调用第三方接口,或者是,该接口需要查询的时间非常长,那么,我们就可以自定义接口,直接返回该数据,那么,就直接节省了,服务器处理的时间,这样,就大大提升我们的测试进度或者是前端开发进度
- 对于一些支付接口,在项目前期,支付接口是需要签各种协议的,有的,还要等项目上线,才有支付接口,并且,支付接口涉及金额等敏感信息,是没办法频繁测试,所以,我们就可以自定义接口,模拟支付接口,从而达到测试支付接口
- 当我们需要给客户演示项目成果的时候,这个时候,我们可能没有真实的数据,但是,我们可以模拟真实的数据,mock,有个好处就是,当我们有真实的接口的时候,我们只需要把接口地址改为真实的接口地址,这样就直接切换到真实接口,需要mock接口,那么就切换到mock地址
二、Postman Mock
1. 安装最新版 postman
要用mock的话,需要安装最新版的才有,旧版,没有这个功能
2. 创建mock
postman的mock,是比较简单的,你不能对参数进行处理,只能指定请求方式,请求的资源路径
然后,下一步
然后再填写mock 名
然后,我们会得到一个mock地址
然后,我们返回集合,发起请求
三、Python + Flask
1. 安装 Flask
pip install Flask
2. 创建路由
# 导入包,Flask,和,request(获取请求的数据)
from flask import Flask, request
# 实例化
app = Flask(__name__)
# 指定路由,访问的资源路径是/,默认的请求方法是get
@app.route('/')
def cust_index():
return {
'code': 0,
'msg': '成功',
'data': [
{'name': 'xiaofeng', 'age': 20},
{'name': 'xiaohong', 'age': 16},
{'name': 'xiaoming', 'age': 28}
]
}
3. 运行
在最下面,写上运行代码
if __name__ == '__main__':
app.run()
会在控制台看到,我们的临时mock地址
"C:\Program Files\Python36\python.exe" D:/code/flask_mock_demo/demo.py
* Serving Flask app 'demo' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
4. 通过mock地址,访问
通过get
这样,我们就简单的实现了自定义接口
可以和postman mock一样的效果,并且,请求速度是非常快,因为在本地,postman的mock是通过服务器来部署的,所以,访问外部连接,请求速度是比较慢的
5. 设置请求方法
# 导入包,Flask,和,request(获取请求的数据)
from flask import Flask, request
# 实例化
app = Flask(__name__)
# 指定路由,访问的资源路径是/
@app.route('/', methods=['GET', 'POST'])
def cust_index():
return {
'code': 0,
'msg': '成功',
'data': [
{'name': 'xiaofeng', 'age': 20},
{'name': 'xiaohong', 'age': 16},
{'name': 'xiaoming', 'age': 28}
]
}
传入参数,methods
这样的话,我们就可以同时支持get和post的请求
6. get和post获取参数
# 我们获取请求的参数,需要引入request这个包
from flask import Flask, request
app = Flask(__name__)
@app.route('/get-request', methods=['GET'])
def get_request():
# get请求,是通过request.args来获取的
username = request.args.get('username')
password = request.args.get('password')
msg_obj = {
'username': username,
'password': password
}
return msg_obj
@app.route('/post-request', methods=['POST'])
def post_request():
# post请求,是通过request.form来获取的
username = request.form.get('username')
password = request.form.get('password')
msg_obj = {
'username': username,
'password': password
}
return msg_obj
7. 获取文件上传
from flask import Flask, request
app = Flask(__name__)
@app.route('/upload-file', methods=['post'])
def post_file():
# 获取上传的文件,是通过request.files获取
file = request.files.get('file')
# 判断是不是file字段,是不是文件类型
if file is None:
return {
'code': 1,
'msg': '当前不是文件类型,无法上传',
'data': []
}
# 判断文件是不是为空
if file.filename == '' or file.filename is None:
return {
'code': 1,
'msg': '请上传文件',
'data': []
}
file_type = str(type(file))
path = './upload/' + str(file.filename)
# 判断文件是不是文件类型
if file_type == "<class 'werkzeug.datastructures.FileStorage'>":
# 调用save方法保存
file.save(path)
msg_obj = {
'code': 0,
'msg': '上传成功',
'data': {
'url': path
}
}
else:
msg_obj = {
'code': 1,
'msg': '当前不是文件类型,无法上传',
'data': file_type
}
return msg_obj
8. md5加密
# md5加密,在这个包里面
import hashlib
from flask import Flask, request
app = Flask(__name__)
# 我们创建一个md5加密函数
def md5(val):
"""md5加密"""
# str(val)确保加密的是一个字符串
# encode('utf-8'),对于中文的加密,需要先转码
# hexdigest() 16进制
return hashlib.md5(str(val).encode('utf-8')).hexdigest()
@app.route('/get-request', methods=['GET'])
def get_request():
username = request.args.get('username')
password = request.args.get('password')
if username is None or password is None:
msg_obj = {
'code': 1,
'msg': '请输入账号,密码!',
'data': []
}
else:
if str(username) == 'admin' and str(password) == md5('admin'):
msg_obj = {
'code': 0,
'msg': '登录成功',
'data': [
{'name': 'admin'}
]
}
else:
msg_obj = {
'code': 1,
'msg': '登录失败,账号密码错误',
'data': []
}
return msg_obj
更新日志
提示:将会持续优化更新
20220725,为什么要自定义接口(Mock)?,Postman Mock-安装最新版postman,创建mock,Python+Flask-安装Flask,创建路由,运行