Перейти к содержимому
15 / 15

Тесты в CI: время прогона, параллельность и нестабильные тесты

Набор тестов полезен ровно до тех пор, пока ему доверяют и его дожидаются. Разрушают доверие две вещи: долгий прогон и нестабильные тесты. Со временем работают на трёх уровнях: кеш сборки и модулей в конвейере, параллельность (-p задаёт число одновременно тестируемых пакетов, t.Parallel — подтестов внутри), и разделение наборов, где быстрые тесты идут на каждый коммит, а интеграционные отдельным шагом. С нестабильностью правило жёсткое: повторный запуск — не решение. Флаг вроде -count для перезапуска маскирует настоящую гонку и обесценивает весь набор, потому что красный результат перестаёт что-либо значить. Правильный порядок — найти причину: почти всегда это time.Sleep вместо синхронизации, общее состояние между параллельными тестами, зависимость от порядка выполнения или неучтённая гонка, которую покажет -race. Обязательный минимум в конвейере: -race, -count=1, разумный -timeout и вывод списка самых долгих тестов.

Тесты в CI: время прогона, параллельность и нестабильные тесты | JScriptiser