3

我想用烧瓶测试 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)

我对这种情况不满意,因为一切都是模拟的,我不能保证函数会正常运行。理想情况下,我能够为 POST 请求传递 JSON 数据,并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))并测试提供的响应,因为这实际上会运行代码。问题是,我知道这并不理想,因为如果服务器出现故障或其他问题,我将无法正确测试它。

4

0 回答 0