Пропуск/исключение тестового модуля при параллельном запуске Pytest

У меня есть несколько тестовых файлов, таких как

test_func1.py
test_func2.py
test_func3.py

Я заранее знаю, что test_func3.py не пройдет, если я запущу Pytest параллельно, например. pytest -n8. Причина в том, что test_func3.py содержит ряд параметризованных тестов, обрабатывающих процессы файлового ввода-вывода. Параллельная запись в один и тот же файл приводит к сбоям. В режиме последовательного тестирования все тесты в этом модуле проходят успешно.

Мне интересно, как я могу пропустить весь модуль, если Pytest будет запущен с опцией -n? Я думаю применить маркер skipif. Мне нужно проверить в своем коде, передан ли аргумент -n в pytest.

...>pytest # run all modules
...>pytest -n8 # skip module test_func3.py automatically

person Andi    schedule 01.04.2020    source источник


Ответы (1)


Пакет pytest-xdist поддерживает четыре алгоритма планирования:

  • каждый
  • нагрузка
  • лоадскоп
  • файл загрузки

Вызов pytest -n — это ярлык для load планирования, т. е. планировщик будет распределять нагрузку тестов между всеми рабочими процессами.

При использовании планирования loadfile все тестовые случаи в тестовом файле будут выполняться последовательно одним и тем же исполнителем.

pytest -n8 --dist=loadfile сделает свое дело. Недостатком может быть то, что выполнение всего набора тестов может быть медленнее, чем при использовании load. Преимущество заключается в том, что будут выполнены все тесты, и ни один тест не будет пропущен.

person Andi    schedule 02.04.2020