# Скоротила набір тестів від шести тестів, що перевищували ліміт у шістдесят секунд, до 135 успішних за 8,9 секунди, профілюючи головний потік і прибравши два виклики, у яких він перебував 3 989 із 4 017 вибірок.

вересень 2026

**Ситуація.** Набір тестів мав ліміт у шістдесят секунд, і шість тестів його перевищували. Набір, який виконується довше хвилини, перестають запускати перед кожною зміною, а набір, який не запускають перед кожною зміною, — це вже звіт про минуле. Перше бажання в такій ситуації — підняти ліміт, але саме так набір і розростається до десяти хвилин.

**Завдання.** Час треба було знайти, а не закласти в бюджет, тобто профілювати набір, а не розмірковувати, які тести здаються ресурсоємними.

**Дія.** Профіль головного потоку знімали під час виконання набору, і результат спростував здогад. У 3 989 відліках із 4 017 головний потік перебував усередині двох викликів — тож повільними були не ті тести, які виконували найбільше роботи, а майже кожен тест проходив через ті самі два місця. Перше — фіксоване очікування, щоб асинхронна робота встигла завершитися до перевірки результату, — по суті, пауза (sleep), за яку платив кожен тест, що зачіпав шлях подій, незалежно від того, чи робота вже завершилася. Його замінили очікуванням самої умови з тайм‑аутом, тож тест, готовий за п'ять мілісекунд, триває п'ять мілісекунд, і повний час очікування витрачає лише той тест, який справді завис. Друге — підготовка перед кожним тестом, яка щоразу заново будувала дорогу фікстуру, хоча фікстура була доступна лише для читання й могла будуватися один раз для всього набору. Жодне з цих місць не було в тесті, який хтось назвав би повільним; обидва були на спільному шляху, і саме тому повільним був увесь набір рівномірно, а не кілька тестів, що вибивалися б із загальної картини.

**Результат.** Було шість тестів, що перевищували шістдесят секунд, — 74 секунди реального часу, — а стало 135 тестів, які проходять за 8,9 секунди, і цього досить, щоб набір запускався під час кожного збереження. Застереження в тому, що спільна фікстура лише для читання тепер стала точкою зв'язності: тест, який її змінить, спричинить збій в іншому тесті, а швидкість набору залежить від дисципліни, дотримання якої компілятор не забезпечує.

---

- Роль: Інженер з тестування та якості
- Категорії: [DevOps](https://advisory.engineer.company/uk/categories/devops/), [Автоматизація та CI/CD](https://advisory.engineer.company/uk/categories/automation/), [Оптимізація продуктивності](https://advisory.engineer.company/uk/categories/performance/), [Тестування та QA](https://advisory.engineer.company/uk/categories/testing/)
- Послуги: [DevOps та автоматизація CI/CD](https://advisory.engineer.company/uk/services/devops-cicd/), [Технічне лідерство та консалтинг](https://advisory.engineer.company/uk/services/technical-leadership/)

<https://advisory.engineer.company/uk/portfolio/took-the-test-suite-under-nine-seconds-158/>
