Проверяет умение ускорять тестовый прогон в CI за счёт параллелизации и правильной изоляции тестов.
Параллельный запуск тестов в CI — это способ сократить время обратной связи, распределяя тесты между несколькими исполнителями. Вместо последовательного прогона всех тестов на одной машине CI запускает несколько задач одновременно, каждая из которых выполняет свою часть набора тестов.
По мере роста проекта тестовый набор может занимать десятки минут. Параллелизация позволяет сократить это время пропорционально количеству воркеров, но требует аккуратной организации, чтобы тесты не мешали друг другу.
Главная проблема параллельных тестов — общие ресурсы: база данных, файлы, порты, внешние сервисы. Нужно либо изолировать окружение для каждого воркера, либо использовать уникальные идентификаторы данных. Также важно бороться с flaky-тестами, которые могут проявляться только при параллельном запуске.
jobs:
test:
strategy:
matrix:
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm test -- --shard=${{ matrix.shard }}/4
# Запуск тестов в 4 процесса
pytest -n 4
# С распределением по файлам
pytest -n auto --dist loadfile
После параллельного прогона нужно объединить отчёты (JUnit XML, coverage) в один артефакт. Многие CI-системы умеют это делать автоматически, но иногда требуется отдельный шаг merge.
Итог: параллельный запуск тестов в CI стоит применять, когда тестовый набор стал узким местом пайплайна. Ключ к успеху — изоляция тестов, стабильные данные и корректное объединение отчётов.