Pest v4.6.0 отримав функцію Time-Based Sharding для ефективного розподілу тестів у CI.

Перекладено ШІ 0 Laravel News 22 квітня, 2026

Pest v4.6.0 впроваджує інтелектуальний розподіл шардів на основі реального часу виконання тестів для максимальної ефективності вашого CI. Дізнайтеся, як цей інструмент допоможе збалансувати навантаження та значно пришвидшити процес тестування.

Pest v4.6.0 представляє розподіл шардів за часом — новий режим, який балансує CI-шарди на основі реальної тривалості виконання тестів, а не просто кількості файлів. Якщо ви вже використовуєте --shard у CI, достатньо записати дані про час виконання за допомогою --update-shards та додати отриманий JSON-файл до репозиторію.

  • Розподіл шардів за часом через --update-shards
  • Збереження даних про таймінг у tests/.pest/shards.json

# Що нового

# Шардинг на основі часу

Під час паралельного запуску тестів на кількох CI-шардах поділ за кількістю файлів часто створює нерівномірне навантаження: один шард завершує роботу за секунди, тоді як інший працює кілька хвилин. Pest v4.6.0 розв'язує цю проблему завдяки збалансованому за часом шардингу.

Крок 1: Запустіть повний набір тестів із прапорцем --update-shards, щоб зафіксувати час виконання кожного класу:

./vendor/bin/pest --update-shards

Для пришвидшення процесу цей параметр можна комбінувати з --parallel:

./vendor/bin/pest --parallel --update-shards

Це запише тривалість виконання кожного тестового класу у файл tests/.pest/shards.json:

{
    "timings": {
        "Tests\\Feature\\Payments\\StripeCheckoutTest": 1.608,
        "Tests\\Feature\\Reports\\SalesReportTest": 2.105,
        "Tests\\Unit\\Models\\UserTest": 0.050
    },
    "checksum": "...",
    "updated_at": "2026-04-14T10:30:00+00:00"
}

Крок 2: Додайте (commit) tests/.pest/shards.json до вашого репозиторію.

Крок 3: Запускайте шардовані CI-завдання як зазвичай. Якщо файл із таймінгами наявний, Pest автоматично застосує збалансований розподіл:

./vendor/bin/pest --shard=1/5

Вивід підтвердить, що активовано режим time-balanced:

Shard:    1 of 5 — 12 files ran, out of 50 (time-balanced).

Якщо після створення файлу з таймінгами ви додасте або перейменуєте тестові файли, Pest виявить розбіжність і виведе попередження:

WARN The [tests/.pest/shards.json] file is out of date...

Тести все одно будуть запущені: нові файли розподіляться рівномірно, а вже відомі — згідно з часом їхнього виконання. Видалення файлів не викликає попереджень, а застарілі записи ігноруватимуться до наступного оновлення JSON-файлу.

Приклад налаштування матриці у GitHub Actions:

strategy:
  matrix:
    shard: [1, 2, 3, 4, 5]

steps:
  - name: Run tests
    run: ./vendor/bin/pest --shard=${{ matrix.shard }}/5

PR: #1671, розроблено @nunomaduro

# Посилання

Популярні

Інше, що варто прочитати

16 Оновлено 05 червня, 2026

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті

17 Оновлено 05 червня, 2026

Обробка геопросторових даних за допомогою Laravel Magellan

Ви готові відкрити нові горизонти у роботі з геопросторовими даними в Laravel? Дізнайтеся, як за допомогою PostGIS та пакету Laravel-Magellan можна легко зберігати, запитувати та маніпулювати інформацією про розташування, перетворюючи ваші проекти на вражаючі рішення у сфері картографії та геолокації!

12 Оновлено 05 червня, 2026

Удосконалюйте свої проєкти Laravel за допомогою справжнього штучного інтелекту для кодування з Laravel Boost!

Готові підняти свій робочий процес у Laravel на новий рівень? У цій статті я розгляну Laravel Boost, інноваційний AI-допомічник для програмування, який зробить вашу розробку швидшою та продуктивнішою