Как указать pytest-xdist запускать тесты из одной папки последовательно, а остальные параллельно?

Представьте, что у меня есть test/unit/... которые безопасно запускать параллельно и test/functional/... которые пока нельзя запускать параллельно.

Есть ли простой способ убедить pytest запустить functionalпоследовательно? Учтите, что мы говорим о большом количестве тестов, поэтому изменение каждой функции / метода тестирования было бы очень шумным.

На данный момент мы запускаем тесты с фильтрами маркеров, поэтому в основном мы запускаем их раздельно. Тем не менее, я ищу решение для устранения необходимости запускать их по отдельности.

1 ответ

Вы можете реализовать свой собственный планировщик, который действует как load или loadscope, в зависимости от того, в каком модуле определен тест. Пример:

from xdist.scheduler.loadscope import LoadScopeScheduling


class MyScheduler(LoadScopeScheduling):
    def _split_scope(self, nodeid):
        if 'test/functional' in nodeid:
            return 'functional-tests'
        return nodeid


def pytest_xdist_make_scheduler(config, log):
    return MyScheduler(config, log)

Все тесты под test/functional будут сгруппированы под одним узлом functional-tests (и, таким образом, выполняются одним и тем же воркером), остальные будут выполняться параллельно, как обычно.

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