Перебрасывание Flask POST-запроса с json аргументами с использованием pytest и pytest-mock - PullRequest
1 голос
/ 31 марта 2020

Я хочу проверить ввод / вывод для запроса POST с помощью flask и, возможно, смоделировать оба результата, если это возможно. Для простоты я сократил большую часть логики c.

# extract.py
import app  # This is the main flask app. Just a basic setup.
from flask import jsonify, request

@app.route('/extract', methods=['POST'])
def task():
    args = request.json
    table_name = args.get('table')
    start_date = args.get('start_date')
    end_date = args.get('end_date')

    # Logic here
    result = dict(key1=value1, key2=value2)

    return jsonify(result)

. Я не доволен этим сценарием, учитывая, что все проверено, и я не могу гарантировать, что функция будет работать правильно , В идеале я мог бы передать данные JSON для запроса POST и проверить ответ, предоставленный методом jsonify(result) extract.py.

# test_extract.py
# mocker comes from pytest-mock


def test_trigger_extract_1(mocker):
    import extract

    mocker.patch.object(extract, 'task')

    data = [{
        'table': 'name',
        'start_date': '2020-01-02',
        'end_date': '2020-01-03',
    }]

    extract.task.return_value.status_code = 200
    extract.task.return_value.json.return_value = data

    extract.task()

    extract.task.assert_called_once()

Обычным способом сделать это, будет вызывать request.get('/extract', json=json.dumps(data)) и проверить полученный ответ, учитывая, что это фактически запустит код. Дело в том, что я знаю, что это не идеально, потому что, если сервер сломается или что-то пойдет не так, я не смогу проверить это должным образом.

...