gpt4 book ai didi

python-3.x - 启动本地 flask 服务器以使用 pytest 进行测试

转载 作者:行者123 更新时间:2023-12-04 16:45:26 26 4
gpt4 key购买 nike

我有以下问题。

我想在部署到生产环境之前在本地 flask 服务器上运行测试。我为此使用 pytest。我的 conftest.py 目前看起来像这样:

import pytest
from toolbox import Toolbox
import subprocess


def pytest_addoption(parser):
"""Add option to pass --testenv=local to pytest cli command"""
parser.addoption(
"--testenv", action="store", default="exodemo", help="my option: type1 or type2"
)


@pytest.fixture(scope="module")
def testenv(request):
return request.config.getoption("--testenv")


@pytest.fixture(scope="module")
def testurl(testenv):
if testenv == 'local':
return 'http://localhost:5000/'
else:
return 'https://api.domain.com/'

这允许我通过输入命令 pytest 来测试生产 api,并通过输入 pytest --testenv=local

来测试本地 flask 服务器

此代码可以完美运行。

我的问题是,每次我想像这样在本地进行测试时,我都必须从终端手动实例化本地 flask 服务器:

source ../pypyenv/bin/activate
python ../app.py

现在我想添加一个固定装置,在测试开始时在后台启动终端,并在完成测试后关闭服务器。经过大量的研究和测试,我仍然无法让它工作。这是我添加到 conftest.py 的行:

@pytest.fixture(scope="module", autouse=True)
def spinup(testenv):
if testenv == 'local':
cmd = ['../pypyenv/bin/python', '../app.py']
p = subprocess.Popen(cmd, shell=True)
yield
p.terminate()
else:
pass

我收到的错误来自请求包,指出没有连接/被拒绝。

E requests.exceptions.ConnectionError: HTTPConnectionPool(host='localhost', port=5000): Max retries exceeded with url: /login (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused',))

/usr/lib/python3/dist-packages/requests/adapters.py:437: ConnectionError

这对我来说意味着app.py下的flask server不在线。有什么建议么?我愿意接受更优雅的选择

最佳答案

对于本地测试,Flask test_client 是一个更优雅的解决方案。请参阅 Testing 上的文档.您可以为 test_client 创建一个 fixture 并使用它创建测试请求:

@pytest.fixture
def app():
app = create_app()
yield app
# teardown here

@pytest.fixture
def client(app):
return app.test_client()

然后像这样使用它:

def test_can_login(client):
response = client.post('/login', data={username='username', password='password'})
assert response.status_code == 200

如果唯一的问题是手动步骤,可以考虑使用 bash 脚本为您进行手动设置,然后执行 pytest

关于python-3.x - 启动本地 flask 服务器以使用 pytest 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53336768/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com