Мокинг POST-запроса Flask с аргументами json с использованием pytest и pytest-mock
Я хочу протестировать ввод / вывод для запроса POST с помощью фляги и, возможно, по возможности высмеять оба результата. Для простоты я урезал большую часть логики.
# 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))
и протестируйте предоставленный ответ, учитывая, что это действительно запускает код. Дело в том, что я знаю, что это не идеально, потому что, если сервер сломается или что-то пойдет не так, я не смогу правильно его протестировать.