如何使用 pytest 测试 Flask 端点

3

我正在使用Flask和Pytest开始编写一个带有单元测试的REST服务,但是我遇到了一些问题。

我想为我的简单端点编写一个简单测试,但在运行测试时我一直收到一个“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'
    })

这是我尝试测试它的方式(我知道它应该测试失败):

import pytest

from routes import status_api

def test_get_status():
    assert status_api.get_status() == ''

我猜想如果我不构建整个应用程序就无法尝试该方法。但是如果是这种情况,我真的不知道如何解决这个问题。

2个回答

6

Flask测试文档相当不错。

与其导入视图函数,不如创建所谓的测试客户端,例如作为pytest fixture。

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

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

    with app.app_context():
        with app.test_client() as client:
            yield client

(create_app 是我的应用工厂)

在此之后,您可以按照以下方式轻松创建测试:

def test_status(client):
    rv = client.get('/stats')
    assert ...

正如开头所提到的,官方文档非常好。


这是我发现有用的文档 - https://flask.palletsprojects.com/en/2.2.x/testing/ - Smit Thakkar

0

您是否考虑过尝试使用API客户端/开发工具?InsomniaPostman都是很受欢迎的工具。使用其中一个可能能够为您解决这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接