繁体   English   中英

如何 pytest 和 Flask 端点

[英]How to pytest a Flask Endpoint

我开始使用 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() == ''

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

关于测试的 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

create_app是我的应用工厂)

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

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

开头提到的,官方文档确实不错。

您是否考虑过尝试使用 API 客户端/开发工具? InsomniaPostman是流行的。 使用一个也许可以为您解决这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM