Могу ли я обусловить параллельное выполнение pytest-xdist тестовыми зависимостями?
Я обнаружил какую-то комбинацию pytest-xdist с плагинами, связанными с зависимостями, такими как pytest-dependency (но, похоже, есть некоторые несовместимости, лучше сказать, они не ладят) или pytest-ordering с теми же проблемами.
Мне нужно запускать параллельно, но вводить некоторые ограничения, чтобы гарантировать, что некоторые тесты, связанные с общими задачами (в основном, предоставление базы данных для конкретных тестов), выполняются изолированно перед остальными тестами группы "распараллеливания". Например, я хотел бы организовать свои тесты примерно так:
test_suite1 / test_provision.py
/ chapter1 / test_a.py
test_b.py
...
/ chapter2 / test_provision.py <= don't pay attention on test names issues (this
test_a.py can be named test_suite1_chapter2_provision.py
test_b.py or __init__.py can be used to avoid the problem
test_c.py of unique names)
...
...
test_suite2 / test_suite2_provision.py
...
...
Идея состоит в том, чтобы запустить распараллеливание с учетом ограничений, связанных с зависимостями, так, например, при вводе глобального списка собранных тестов для test_suite1
, pytest-xdist должен остановиться на test_provision.py
запускать его последовательно, затем запускать главы параллельно и так далее. Некоторые главы также могут иметь ограничения (например, chapter2 test_provision.py), и это также должно быть соблюдено: сначала условие, затем дочерние тесты chapter2... В примереchapter2 / test_provision.py
находится в том же каталоге, что и тесты, это не вопрос организации иерархии файловой системы (хотя это, вероятно, соглашение по проекту и, вероятно, должно быть единообразным: например, тесты обеспечения изолированы в родительских каталогах или что-то в этом роде). Таким образом, я ожидаю вставлять метки pytest или аналогичные для создания зависимостей в определениях тестов, а не в файловой системе.
Если эту идею сложно реализовать, возможно, упрощением можно было бы отметить тест, который будет выполняться однозначно при достижении (остановка параллельного выполнения pytest-xdist для всей группы собранных тестов), тогда, хотя другие действительно могут быть распараллелены с ним, мы может пожертвовать этим ради большего блага, то есть избежать коллизий в плане тестирования (и, таким образом, избежать неудачных выполнений). Но это означало бы большее общее время выполнения, и я бы предпочел избежать этого решения.
Кроме того, я не хочу запускать каждый тест обеспечения в начале (например, pytest -m 'provisions' ; pytest -m 'others'
) потому что некоторые положения являются специализациями верхних и несовместимы с другими братьями по положениям веток. Итак, с точки зрения pytest-xdist, каждый тест при достижении должен действовать так, как он был разработан.
РЕДАКТИРОВАТЬ: мою озабоченность можно понять как требование установить какое-то тестовое сродство к конкретному рабочему pytest-xdist. Это связано с тем, что если я гарантирую, что некоторые каталоги управляются одним рабочим, я смогу контролировать всю картину.