python - flask test_client 为有效 url 返回 404

标签 python flask pytest flask-restplus

我一直在写一个API,我想测试它。 通过请求获取对 API 的请求运行良好 但是当我想通过 test_client 测试时,我总是收到

<Response streamed [404 NOT FOUND]>

我处理了一个 404 错误并检查了 URL 是否正确并且它是正确的,SERVER_NAME 也与应用程序 URL 匹配。

我正在使用 Python 3、Flask、flask_restplus、pytest

这是我使用的一些代码:

测试接口(interface).py

import pytest


@pytest.mark.parametrize("entity, expected", RESPONSE.items())
@pytest.mark.usefixtures("app")
def test_api_1(app, entity, expected):

    with app.test_client() as client:
        response = client.get(f"/api/{entity}")

    actual = response.json

    assert actual == expected

conftest.py

import pytest

from flask_app import create_app
from flask_app.extensions import db


@pytest.yield_fixture(scope="session", autouse=True)
def app():
    _app = create_app()
    _app.config.testing = True
    _app.engine = db.get_engine(_app)
    _app.connection = _app.engine.connect()
    ctx = _app.app_context()
    ctx.push()
    yield _app

    ctx.pop()

和应用配置:

<Config {'DEBUG': True, 'TESTING': True, 'PROPAGATE_EXCEPTIONS': None, 'PRESERVE_CONTEXT_ON_EXCEPTION': None, 'SECRET_KEY': 'key', 'PERMANENT_SESSION_LIFETIME': datetime.timedelta(days=31), 'USE_X_SENDFILE': False, 'SERVER_NAME': '0.0.0.0:8020', 'APPLICATION_ROOT': '/', 'SESSION_COOKIE_NAME': 'session', 'SESSION_COOKIE_DOMAIN': '0.0.0.0', 'SESSION_COOKIE_PATH': None, 'SESSION_COOKIE_HTTPONLY': True, 'SESSION_COOKIE_SECURE': False, 'SESSION_COOKIE_SAMESITE': None, 'SESSION_REFRESH_EACH_REQUEST': True, 'MAX_CONTENT_LENGTH': None, 'SEND_FILE_MAX_AGE_DEFAULT': datetime.timedelta(seconds=43200), 'TRAP_BAD_REQUEST_ERRORS': None, 'TRAP_HTTP_EXCEPTIONS': False, 'EXPLAIN_TEMPLATE_LOADING': False, 'PREFERRED_URL_SCHEME': 'http', 'JSON_AS_ASCII': True, 'JSON_SORT_KEYS': True, 'JSONIFY_PRETTYPRINT_REGULAR': False, 'JSONIFY_MIMETYPE': 'application/json', 'TEMPLATES_AUTO_RELOAD': None, 'MAX_COOKIE_SIZE': 4093, 'API_URL_PREFIX': '/api', 'APP_PORT': '8020', 'POSTGRES': {'user': 'test', 'pw': 'temporal', 'db': 'test', 'host': 'postgres', 'port': '5432'}, 'RESTPLUS_JSON': {'default': <function decimal_json_default at 0x1065179d8>}}>

最佳答案

如果在 Python 3.7+ 上,在创建应用程序实例后找到一个可以放置断点 () 的位置,如果在其他版本上,则找到 pytest.set_trace()

查看 app.url_map 并使用 iter_rules 迭代规则实例.看看有没有什么东西看起来很有趣。

关于python - flask test_client 为有效 url 返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54198353/

相关文章:

python - 使用条件 python 查找最小值

python - 如何使用 nan 和 twinx/secondary_y 绘制多列线图

python - Abaqus/Python 修复了播种约束

python - 如何使用 flask 创建进度条?

python - Pytest 断言方法的返回值

python - 从列表创建多个复选框并获取所有值

python - Flask 检查请求来自哪里

python - AttributeError: '_AppCtxGlobals' 对象在 Flask 中没有属性 'user'

Django 表单测试失败

python - 当第一步失败时,我如何继续执行测试?