pytest-xdist с приспособлением в области видимости модуля

Сколько раз прибор будет работать:

@pytest.fixture(scope="module")
def foo():
   return True

def test1(foo):
   pass

def test2(foo):
   pass

1 ответ

Он будет запускаться один раз для каждого рабочего потока xdist.

Это не то, что вы ожидаете от нового пользователя, но объяснение заключается в том, что каждый рабочий процесс xdist фактически выполняет один полный отдельный сеанс, только с подмножеством тестовых случаев в каждом.

Это ошибочное предположение о том, что один вызов pytest равен одному тестовому сеансу, поразило меня сегодня, только хуже, потому что у меня было параметризованное крепление процессора и памяти с большим объемом модуля (запуск тестируемого двоичного файла как подпроцесса во многих различных входных файлах), используемое во многих тестовых случаев, поэтому он запускался один раз для каждого тестового случая для каждого файла на каждого рабочего и привязывал мой процессор на несколько минут, а затем заставил меня исчерпать своп.

Мое решение состояло в том, чтобы использовать pytest -n auto --dist=loadscope для последовательного запуска всех тестов, которые использовали это конкретное приспособление, и параллельно выполнять другую полезную работу.

В этом выпуске 2018 года есть полезные обходные пути для некоторых вариантов использования:https://github.com/pytest-dev/pytest-xdist/issues/271 .

само обсуждение намного старше, с 2013 года в репозитории pytest. В конечном итоге они сказали, что это не их проблема, поскольку сеансы работают, как и ожидалось, без использования надстройки xdist:https://github.com/pytest-dev/pytest/issues/252 .

Другие вопросы по тегам