светильники py.test с глобальным охватом - PullRequest
0 голосов
/ 10 сентября 2018

Я ищу способ использовать что-то вроде "global fixtures" в py.test. Кажется, что scope="session" будет ближе всего к тому, что мне нужно, но, похоже, он работает аналогично опции уровня scope="module". Устройство запускается всего n раз, где n - количество модулей.

По сути, у меня есть этот медленно инициализируемый и ресурсоемкий сервис, который выполняет морфологический анализ

@pytest.fixture(scope='session', autouse=True)
def morfanalyzer():
    from myapp.nlp.morfservice import MorfAnalyzerService
    morfservice = MorfAnalyzerService()

    def f():
        morfservice.run(debug=True)

    thread = Thread(target=f)
    thread.start()

    yield morfservice

    morfservice.stop()
    thread.join()

И я использую это как

@pytest.mark.usefixtures(morfanalyzer.__name__)
def test_this_stage(morfanalyzer):
    assert False

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

1 Ответ

0 голосов
/ 10 сентября 2018

Указав scope="session" в своем приборе, у вас будет экземпляр в области сеанса. Вы можете проверить настройку и демонтаж приборов с помощью флага setup-show cli, как показано в 3.0 Changelog

Также, как указал @hoefling в комментариях, после установки autouse=True пометка теста с usefixtures больше не нужна.

...