基于Flask搭建MockServe
什么是Mock?
Mock是软件开发中一种模拟对象的概念。它是一个模拟或替代实际对象的对象,用于模拟实际的行为,以便在测试或开发过程中进行使用。
为什么要进行模拟(Mock)?
在软件开发中,通常会有一些依赖于外部资源或者其他组件的模块或类。在单元测试过程中,为了隔离被测试的代码,我们需要将这些外部依赖进行模拟,以确保测试的焦点只集中在当前被测试的单元上。这时就可以使用Mock对象来模拟这些外部依赖
直白的讲就是,遇到对应的一些无法调用或者难以调用的接口,为了模拟对应的场景,我们需要测试覆盖这个场景,那么可以通过mock去实现,就是写一个假的接口,指返回我们想要的数据,确保接口可以调通。
常用的场景
支付场景,商品金额比较大,就需要进行场景模拟,当然也可以用沙箱支付,微信支付和支付宝都有沙箱支付
或者自己写一个接口调用一下
编写代码
下面我们用python的flask框架,写一个简单登录接口和用户信息接口
from flask import Flask, request, jsonify
app = Flask(__name__) # 定义Flask应用程序实例
# 模拟用户定义数据库用户数据
alluser = {"username": "test", "password": "123456"}
# 接口返回数据 -- 定义
# 登录成功
MSG_LOGIN_SUCCESS = {
"msg": "登录成功",
"code": 0,
"data": {
"id": "75",
"username": "test",
"nickname": "测试",
"mobile": "",
"email": "",
"alipay_openid": "",
"weixin_openid": "",
"token": "1234567890"
}
}
# 参数不能为空
MSG_DATA_NOT_NULL = {
"msg": "用户名和密码不能为空",
"code": -1,
"data": ""
}
# 密码错误
MSG_PASSWORD_ERROR = {
"msg": "密码错误",
"code": -2,
"data": ""
}
# 用户不存在
MSG_USERNAME_NULL = {
"msg": "用户不存在",
"code": -3,
"data": ""
}
# 参数填写错误
MSG_DATA_ERROR = {
"msg": "参数填写错误",
"code": -4,
"data": ""
}
# 登录失效
MSG_TOKEN_INVALIDATION = {
"msg": "登录失效",
"code": -5,
"data": ""
}
def str_replace(res):
new_dict = {}
for key, value in res.items():
if isinstance(key, str):
key = key.lower() # 转成小写
new_dict[key] = key
return new_dict
# 登录接口
@app.route("/api/login", methods=["POST"])
def login():
# username和passowrd不区分大小写
# 用户请求的数据
res = request.get_json()
# 转换的数据
result = str_replace(res)
print("转换出来的数据:", result)
# 异常处理
try:
# 获取用户名和密码
username = res["username"].lower()
password = res["password"]
except:
# return "用户或密码填写错误"
return jsonify(MSG_DATA_ERROR)
# 数据校验 -- 场景
# 1. 参数不能为空
if username == "" or password == "":
# return "用户或密码不能为空"
return jsonify(MSG_DATA_NOT_NULL)
# 2. 登录成功
elif username == alluser["username"] and password == alluser["password"]:
# return "登录成功"
return jsonify(MSG_LOGIN_SUCCESS)
# 3. 密码错误
elif username == alluser["username"] and password != alluser["password"]:
# return "密码错误"
return jsonify(MSG_PASSWORD_ERROR)
# 4. 用户名不存在
elif username != alluser["username"]:
# return "用户不存在"
return jsonify(MSG_USERNAME_NULL)
# 5. 对应的参数填写错误
else:
# return "用户或密码填写错误"
return jsonify(MSG_DATA_ERROR)
# 查看用户信息接口
@app.route("/api/info", methods=["POST"])
def info():
# 显示用户信息,请求头:token
try:
# 用户填写的数据
token = request.headers.get("token")
# 和数据库当中的数据进行对比
if token == MSG_LOGIN_SUCCESS["data"]["token"]:
return jsonify(MSG_LOGIN_SUCCESS)
except:
return jsonify(MSG_TOKEN_INVALIDATION)
if __name__ == '__main__':
app.run(debug=True)
运行代码调用接口
- 右键运行代码
- 打开postman
- 调用登录接口,传入用户名和密码
- 调用用户信息接口,传入token