Чтобы изолировать приложение для каждой тестовой функции, вы должны использовать @pytest.fixture
декоратор.
Прежде всего, вы должны прочитать Testing Flask Applications from the official docs .
Начните определять, новое приспособление для вашего приложения в вашем conftest.py , с областью действия (по умолчанию), другими областями .
from myapp import create_app
@pytest.fixture
def app():
app = create_app()
return app
Затем внутри тестовой функции вы можете вызвать фикстуру приложения.
def test_my_function(app):
# Here you have a fresh app object.
pass
Здесь начинается другая часть. Вам нужен test_client , чтобы делать запросы. Обратите внимание, что если вы тестируете утверждения или исключения в коде приложения, вы должны установить app.testing = True, чтобы исключения распространялись на тестовый клиент.
Более простой способ для этого нужно использовать pytest- flask, который создаст вам другие необходимые вам приспособления, такие как client , config и другие ...
Пример с pytest- flask:
def test_my_function(client):
rv = client.get('/')
assert b'No entries here so far' in rv.data
Если вы посмотрите на pytest -flask / fixture.py на github , вы можете видеть, что клиентское приспособление просто зависит от приспособления приложения и возвращает из него text_client.
Вы все равно можете попробовать это сделать это с резьбой, но этот способ намного проще. Вам не нужно беспокоиться о том, как завершить цепочку. У вас может быть другая проблема с режимом отладки , который запускает основной поток для управления реальным приложением.
В конце концов, для каждой тестовой функции, которая вызывает клиентское приспособление, у вас будет новое приложение fre sh, и это именно то, что вам нужно.