基于Flask搭建MockServe接口

本文讲解了如何使用Flask构建一个带有模拟功能的API服务,通过Mock模拟外部依赖,便于单元测试。涉及登录和用户信息接口的示例以及实际操作步骤。
摘要由CSDN通过智能技术生成

基于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)

运行代码调用接口

  1. 右键运行代码
  2. 打开postman
  3. 调用登录接口,传入用户名和密码
    在这里插入图片描述
  4. 调用用户信息接口,传入token
    在这里插入图片描述
  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值