pytest и фляга: поддержите работу сервера печени для тестового класса - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь реализовать модульные тесты (с pytest) для моего приложения Flask.

Мое приложение выполняет некоторые интенсивные операции ввода-вывода, которые длятся несколько минут в init, и поэтому я хотел бы запуститьодин живой сервер для моих тестов и тестирования всех конечных точек на одном и том же экземпляре сервера.

Вот мой конкурс:

@pytest.fixture
def app():

    os.environ["FLASK_ENV"] = "development"
    os.environ["DATABASE_URI"] = os.path.join(
        ds.WORK_DIR, "tests", "fake_db.sqlite"
    )
    app = create_app()

    # http://flask.pocoo.org/docs/1.0/api/#flask.Flask.test_client
    app.testing = True

    return app

А вот тестовый класс япытается запустить:

@pytest.mark.usefixtures("live_server")
class TestLiveServer:
    def test_server_is_up_and_running(self):
        res = requests.get(url_for("index", _external=True))

        assert res.status_code == 200, "Index end point didn't return correct answer"
        assert "worksies" in res.text, "worksies not returned..."

    def test_proper_db(self):
        res = requests.get(url_for("all_products", _external=True))

Приведенный выше код работает, все загружается и тестируется отлично, но, похоже, для каждого из методов test_ запускается новый сервер.По крайней мере, задачи ввода / вывода выполняются дважды.

Как этого избежать?

1 Ответ

0 голосов
/ 03 марта 2019

Используйте scope=session для вашего прибора.Он будет выполняться только один раз за тестовую сессию.

@pytest.fixture(scope=session)
def app():
    # your code here

Я не знаю, что такое live_server прибор, но предполагаю, что он также может быть помечен как область действия сессии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...