Flask实现一个简单的mockserver

测试的时候经常出现开发的接口没有部署好,或者没有开发完,或者因为网络等等其他原因无法提供给测试,这时下游接口或者app页面可以调用mock模拟接口进行测试,因为接口参数返回是需求阶段已经定义好的。
flask开发一个简单的mock接口非常容易。

from flask import Flask, jsonify, request, g
import copy
import json
import time

app = Flask(__name__)


@app.before_request
def set_up_data():
    g.data = [
        {'id': 1, 'title': 'task 1', 'desc': 'this is task 1'},
        {'id': 2, 'title': 'task 2', 'desc': 'this is task 2'},
        {'id': 3, 'title': 'task 3', 'desc': 'this is task 3'},
        {'id': 4, 'title': 'task 4', 'desc': 'this is task 4'},
        {'id': 5, 'title': 'task 5', 'desc': 'this is task 5'}
    ]

    g.task_does_not_exists = {'msg': 'task does not exists.'}
    g.title_or_desc_null = {'msg': 'title or desc is null.'}


@app.route('/api/tasks')
def get_all_tasks():
    return jsonify(g.data)


@app.route('/api/tasks/<int:task_id>', methods=['GET'])
def get_a_task(task_id):
    if task_id > 0 and task_id < len(g.data):
        return jsonify(g.data[task_id - 1])
    else:
        return jsonify(g.task_does_not_exists)


@app.route('/api/tasks/<int:task_id>', methods=['PUT'])
def complete_a_task(task_id):
    if task_id > 0 and task_id < len(g.data):
        tmp = copy.deepcopy(g.data[task_id - 1])
        tmp['done'] = True
        print(g.data)
        return jsonify(tmp)
    else:
        return jsonify(g.task_does_not_exists)


@app.route('/api/tasks/<int:task_id>', methods=['DELETE'])
def delete_a_task(task_id):
    if task_id > 0 and task_id < len(g.data):
        g.data.remove(g.data[task_id - 1])
        return jsonify({"result": True})
    else:
        return jsonify(g.task_does_not_exists)


@app.route('/api/tasks', methods=['POST'])
def create_tasks():
    data = request.get_data()
    j_data = json.loads(data.decode('utf-8'))
    now_time = time.strftime('%Y-%m-%d %H:%M:%S')
    tmp_data = {'id': g.data[-1]['id'] + 1,
                'title': j_data['title'],
                'desc': j_data['desc'],
                'done': 0,
                'createdAt': now_time,
                'updatedAt': now_time}
    if j_data['title'] == "" or j_data['desc'] == "":
        return jsonify(g.title_or_desc_null)
    g.data.append(tmp_data)
    return jsonify(tmp_data)

使用方法:
windows命令行:
set FLASK_APP=mock.py
flask run

Linux命令行:
export FLASK_APP=mock.py
flask run

然后打开浏览器或其他测试工具,发送http请求即可。

猜你喜欢

转载自blog.csdn.net/a200822146085/article/details/88618396