如何对 Flask 端点进行 pytest

Xha*_*ark 4 python pytest flask flask-restful

我开始使用 Flask 和 Pytest 来通过单元测试实现休息服务,但我遇到了一些麻烦。

我想为我的简单端点进行一个简单的测试,但Working outside of application context.在运行测试时我不断收到错误。

这是终点:

from flask import jsonify, request, Blueprint
STATUS_API = Blueprint('status_api', __name__)

def get_blueprint():
    """Return the blueprint for the main app module"""
    return STATUS_API


@STATUS_API.route('/status', methods=['GET'])
def get_status():
    return jsonify({
        'status' : 'alive'
    })
Run Code Online (Sandbox Code Playgroud)

这就是我尝试测试它的方式(我知道它应该无法通过测试):

import pytest

from routes import status_api

def test_get_status():
    assert status_api.get_status() == ''
Run Code Online (Sandbox Code Playgroud)

我猜我只是无法在不构建整个应用程序的情况下尝试该方法。但如果是这样的话我真的不知道如何解决这个问题

J.G*_*.G. 6

Flask的测试文档非常好。

test client您应该创建一个所谓的,例如作为 pytest 固定装置,而不是导入视图函数。

对于我的最后一个 Flask 应用程序,它看起来像:

@pytest.fixture
def client():
    app = create_app()
    app.config['TESTING'] = True

    with app.app_context():
        with app.test_client() as client:
            yield client
Run Code Online (Sandbox Code Playgroud)

create_app是我的应用程序工厂)

然后您可以轻松创建测试,如下所示:

def test_status(client):
    rv = client.get('/stats')
    assert ...
Run Code Online (Sandbox Code Playgroud)

正如一开始提到的,官方文档确实很好。